The symbolic code is not running
이전 댓글 표시
syms t x a p q r a1 a2 A pr
f(1)=x+p*x^2/2;g(1)=a*x+q*x^2/2;h(1)=1+r*x;
for i=1:5 %(Can I take i=0:5)
fa(i) = subs(f(i),x,t);ga(i) = subs(g(i),x,t);ha(i) = subs(h(i),x,t);
f(i+1) =f(i)+a1*int(int(int((diff(fa(i),t,3)+(fa(i)+ga(i))*diff(fa(i),t,2)+ a1*diff(fa(i),t,1)*(diff(fa(i),t,1)+diff(ga(i),t,1))),t,0,x)));
g(i+1) =g(i)+a1*int(int(int((diff(ga(i),t,3)+(fa(i)+ga(i))*diff(ga(i),t,2)+ a1*diff(ga(i),t,1)*(diff(fa(i),t,1)+diff(ga(i),t,1))),t,0,x)));
h(i+1) =h(i)+pr*a2*int(int((diff(ha(i),t,2)+(fa(i)+ga(i))*diff(ha(i),t,1)+ A*ha(i)*(diff(fa(i),t,1)+diff(ga(i),t,1))),t,0,x));
end
f=f(1)+f(2)+f(3)+f(4)+f(5);
disp(f(i+1))
figure(1)
fplot(x,f) %% (for FIG. a1=1;a2=2;A=1;pr=1;)
댓글 수: 10
MINATI
2019년 11월 5일
MINATI
2019년 11월 8일
Walter Roberson
2019년 11월 8일
The code is running for me, doing everything it is documented to do.
It is slow code, but that is to be expected when each step involves a triple integral of everything that has gone before. And remember that when you compute the same expression multiple times in an expression, it is faster to compute it once and store into a variable and use the variable See for example the way you compute diff(ga(i),t,1) multiple times and remember that diff(ga(i),t,2) involves first computing diff(ga(i),t,1)
%(Can I take i=0:5)
Yes, just remember to add 1 to i in every place that you use i as an index, as it is not possible to index anything at 0. So you would assign to fa(i+1) and to f(i+1+1) and so on.
Walter Roberson
2019년 11월 8일
Find the expressions that are computed multiple times, such as diff(ga(i),t,1) and store them in variables and use the variables. For example,
f(i+1) =f(i)+a1*int(int(int((diff(fa(i),t,3)+(fa(i)+ga(i))*diff(fa(i),t,2)+ a1*diff(fa(i),t,1)*(diff(fa(i),t,1)+diff(ga(i),t,1))),t,0,x)));
can be changed to
dfa = diff(fa(i),t,1)));
d2fa = diff(dfa,t,1);
d3fa = diff(d2fa,t,1);
dga = diff(ga(i),t,1);
f(i+1) =f(i)+a1*int(int(int((d3fa+(fa(i)+ga(i))*d2fa + a1*dfa*(dfa+dga)),t,0,x)));
This will be more efficient.
However, most of the time will still be spent doing the triple integrals.
Are you trying to do something like a lagrange interpolating polynomial?
MINATI
2019년 11월 9일
Walter Roberson
2019년 11월 10일
I had to stop calculating on the 5th iteration, as it was using 80 gigabytes of memory.
Walter Roberson
2019년 11월 10일
You have triple nested integrals, but you only have bounds for one of the levels, which leads you open to issues about ending up with whatever constant of integration that the routines decide to throw in. Wouldn't it be better to use definite integrals for all of the calculations? At the very least you should be indicating the variable of integration.
MINATI
2019년 11월 10일
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Common Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!