Trapezodial Method using while loop
11 次查看(过去 30 天)
显示 更早的评论
Hi for my numerics class i have an assignment, which is supposed to be quite easy but I can't seem to find my mistake. We have to solve the integral of sin(x) within 0 and pi using the trapezodial method and double the interval until the solution is close enough to the true value 2. So far my code looks like this, and i'm not supposed to use trapz.
clear
f=@(x) sin(x);
a=0;
b=pi;
n=1;
h=(b-a)/n;
tol=10^-6;
I=h*s
s=0.5*(f(a)+f(b))
i=0
while abs(2-I)>=tol
n=n*2;
a=b-(b/n);
b=b/n;
h(n)=((b*(n-1)/n)-(a/n))/n;
s(n)=0.5*(f(a)+f(b));
I=sum(h(n)*s(n));
i=i+1;
end
I
but it takes a really long time and gives me the following error:
Requested 1073741824x1 (8.0GB) array exceeds maximum
array size preference. Creation of arrays greater
than this limit may take a long time and cause MATLAB
to become unresponsive. See array size limit or
preference panel for more information.
Error in NumMeth3 (line 18)
h(n)=((b*(n-1)/n)-(a/n))/n;
I don't know why this gets so 'big'. I've tried a lot but nothing seems to work, so I'd love some help!
Thanks in advance.
5 个评论
回答(1 个)
David Hill
2020-5-18
f=@(x) sin(x);
tol=1e-6;
x=linspace(0,pi,2);
A=sum(movsum(f(x),2,'Endpoints','discard')/2.*diff(x));
n=2;
while abs(2-A)>=tol
x=linspace(0,pi,n+1);
A=sum(movsum(f(x),2,'Endpoints','discard')/2.*diff(x));
n=2*n;
end
2 个评论
Rik
2020-5-18
Since this is homework I wouldn't encourage posting complete working examples. Also, without comments it isn't immediately obvious that this is an implementation of the trapezoidal method.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!