Trapezodial Method using while loop

17 visualizzazioni (ultimi 30 giorni)
LauraB
LauraB il 18 Mag 2020
Commentato: Rik il 18 Mag 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 Commenti
LauraB
LauraB il 18 Mag 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 il 18 Mag 2020
One hint that should help dividing the range 0 to pi in segments:
linspace(0,pi,n)

Accedi per commentare.

Risposte (1)

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

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by