Taylor's method of order 2 programming
2 views (last 30 days)
Show older comments
ivordes greenleaf
on 13 Apr 2015
Commented: Star Strider
on 13 Apr 2015
So I am writing a program to solve an IVP problem, I'm trying to write it with not using the function script because I want to plot the error later.
This is my coding:
clear;
h=0.1; t=1:h:2; n=length(t);
%initial condition y=zeros(n,1); y(1)=-0.5;
for i = 1:n-1 y(i+1)=y(i)+h*RHS(t(i),y(i))+(h.^2/2)*RHS3(t(i),y(i)); end
truesol= (sqrt(3)/(2*t))*tan((sqrt(3)/2)*log(t))-1/2*t;
plot(t,y,'.',t,truesol,'*')
[t' y truesol']
And I wrote my RHS(which is my original function) and RHS3(which is my df/dt) separately:
function result = RHS(t,y)
result= y.^2+(1/(t.^2));
end
and
function result= RHS3(t,y)
result = 2*y.^3+((2*y)/(t.^2))-(2/(t.^3));
end
Everything seems to be okay, I even tried a simple "true solution" and it works. It only doesn't work when I tried the correct true solution, which is
truesol= (sqrt(3)/(2*t))*tan((sqrt(3)/2)*log(t))-1/2*t;
it gives me an error of "??? Error using ==> mldivide Matrix dimensions must agree."
Thanks for any input.
0 Comments
Accepted Answer
Star Strider
on 13 Apr 2015
See if vectorising this line (replacing (/) with (./) and (*) with (.*)) solves the problem:
truesol= (sqrt(3)./(2*t)).*tan((sqrt(3)/2)*log(t))-1/2*t;
2 Comments
Star Strider
on 13 Apr 2015
My pleasure. I’m glad it worked.
I did not run your code, but it would seem to me that a smaller step size would result in a smaller error. You are plotting log(err) against log(h), so I would expect a linear relationship. I believe your plot is likely correct.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!