Trapezodial Method using while loop

16 Ansichten (letzte 30 Tage)
LauraB
LauraB am 18 Mai 2020
Kommentiert: Rik am 18 Mai 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 Kommentare
LauraB
LauraB am 18 Mai 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 am 18 Mai 2020
One hint that should help dividing the range 0 to pi in segments:
linspace(0,pi,n)

Melden Sie sich an, um zu kommentieren.

Antworten (1)

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

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by