2012-10-22 9 views
5

Si verifica uno strano problema con la funzione quad. Stavo usando quad per calcolare semplice integrale, ed ha funzionato per 10 a 20 volte, poi Matlab emette il seguente errore:Informazioni sull'utilizzo di quad in MATLAB

Error using quad (line 75) 
The integrand function must return an output vector of the same length as the input vector. 
yteor(k) = quad(@(q)(exp(-(q).^2).*q.^2/(k.^2+1)), 0, 1); 

Qui q e k sono scalari. Non riesco a capire cosa è sbagliato e perché ha funzionato diverse ore fa.

Modifica

Ecco il mio codice

for k=1:100, 
    xteor(k)=step*k; 
    yteor(k)=quad(@(q)(exp(-(q).^2).*q.^2/((step.*k+1).^2)),0,1); 
end plot(xteor,yteor,'r'); 
+2

Il messaggio di errore sembra abbastanza auto-esplicativo. Potresti mostrare il tuo codice? (idealmente, funzionante e non funzionante) – FabienAndre

+0

L'intero codice è troppo grande, quindi invierò la parte che integra e traccia il grafico: –

+0

per k = 1: 100 xteor (k) = passo * k; yteor (k) = quadruplo (@ (q) (exp (- (q).^2). * Q.^2/((passo. * K + 1).^2)), 0,1); fine grafico (xteor, yteor, 'r'); –

risposta

1

Il seguente frammento funziona per me su Octave (Matlab GNU clone)

step = 1; 
xteor = zeros(100,1); 
yteor = zeros(100,1); 

for k=1:100, 
    xteor(k)=step*k; 
    yteor(k)=quad(@(q)(exp(-(q).^2).*q.^2/((step.*k+1).^2)),0,1); 
end 
plot(xteor,yteor,'r'); 
pause 

La mia ipotesi è che il vostro errore è il conseguenza di qualcos'altro accadeva in precedenza nel tuo codice (forse relativo a step non essendo uno scalare?). Invece di concentrarsi su questa linea dove sorge l'errore. Prova a cercare cosa hai modificato appena prima che l'errore venga visualizzato.

+0

Sì, grazie Ho guardato attraverso il codice e ho trovato che da qualche parte ho inserito". "))) Comunque grazie mille per l'aiuto !!! –

+0

Benvenuti in SO! Dato che sei nuovo, puoi controllare questo [collegamento] (http://meta.stackexchange.com/a/5235/187716). – FabienAndre