Trapezodial Method using while loop

16 views (last 30 days)
LauraB
LauraB on 18 May 2020
Commented: Rik on 18 May 2020
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 Comments
LauraB
LauraB on 18 May 2020
Okay, i guess this needs a whole different approach then..
I wrote down the first few iterations on paper and then tried to 'translate' it into code, but it seems I haven't worked thoroughly enough. I'm gonna try it your way this time :)
Rik
Rik on 18 May 2020
One hint that should help dividing the range 0 to pi in segments:
linspace(0,pi,n)

Sign in to comment.

Answers (1)

David Hill
David Hill on 18 May 2020
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 Comments
Rik
Rik on 18 May 2020
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.
LauraB
LauraB on 18 May 2020
I agree, but it sometimes helps to take in a different view to find your own mistakes. So thank you anyway!

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!