[Matlab] Soluzione equazione delle onde

D4lF4zZI0
Salve a tutti, come da titolo, vorrei implementare in matlab la soluzione dell'equazione omogenea delle onde che si presenta nel seguente modo:
$ u(x,t)=1/2[f_1(x-ct)+f_1(x+ct)]+1/(2c)int_(x-ct)^(x+ct) f_2(y) dy $
dove $ f_1=f_1(x) $ e $ f_2=f_2(x) $
Al momento ho implementato questo codice:
c=2;
X=linspace(-pi,pi,100);
T=linspace(0,3,length(X));
[x,t]=meshgrid(X,T);
f1=inline('sin(x)','x');

u(:,:)=0;
for j=1:length(T)
for i=1:length(X)
u(j,i)=(1/2)*( f1(X(i)-c*T(j)) + f1(X(i)+c*T(j)) ) + (1/(2*c))* integral(@(x) 0*x,X(i)-c*T(j),X(i)+c*T(j));
end;
end;
mesh(x,t,u)
xlabel('x');
ylabel('t');

che effettivamente calcola la funzione $u(x,t)$, ma Matlab impiega molto tempo a causa dei cicli annidati.
Vi chiedo se c'è un modo più veloce per calcolare la soluzione.
Grazie

Risposte
Raptorista1
Potresti velocizzare la cosa facendo a mano l'integrale e facendo calcolare a matlab solo il risultato finale. Nel caso corrente in cui l'integranda è zero puoi direttamente togliere quel pezzo.
A parte ciò, non c'è molto che tu possa fare per velocizzare matlab.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.