Can someone check my for loop?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Bri
el 9 de Oct. de 2014
Comentada: Star Strider
el 10 de Oct. de 2014
I have to create a function m file called mylength(f,a,b,n) which takes four inputs:
f: A function handle.
a: A real number.
b: A real number.
n: A positive integer.
Note: You may assume that f(x) is differentiable on [a, b] and that a < b.
Does: Calculates the length of f(x) on [a, b] using the formula L = the integral from a to b of the square root of (1 + f′(x)^2 dx) but with the integral approximated using a for loop to calculate a left sum with [a, b] divided into n subintervals.
Returns: This approximated length.
Here is sample data and correct answers to the sample data.
a = mylength(@(x) x^2,0,2,5)
a = 4.0480127986983730101003658887008
a = mylength(@(x) sin(x),pi,2*pi,10)
a = 3.820197787492867218055528594355
Here is my code.
function l=mylength(f,a,b,n);
syms x;
r=(b-a)/n;
L = sqrt(1+diff(f(x))^2);
l=0;
for q=(a:n-1);
y=subs(f(x),q);
area=r*y;
l=vpa(l+subs(L,r*area));
end
end
It does not return the same answers as the sample data, and I was pretty sure my code was right. Can you please let me know what is wrong with it?
Thanks
2 comentarios
Respuesta aceptada
Star Strider
el 10 de Oct. de 2014
This hits ‘sin(x)’ spot on but slightly underestimates ‘x^2’:
syms x;
r=(b-a)/(n-1);
s = a:r:b;
L = sqrt(1+diff(f(x))^2);
l=0;
for q=1:n-1;
l=l+vpa(subs(L,s(q))*r);
end
4 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Calculus en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!