Hello. I have come up with the following code:
function p = findmanyzeros(f, a, b, n, tol)
x = a + (b-a)*(0:n)/n;
fx = f(x);
p = [];
for i = 1:n
if sign(fx(i)) ~= sign(fx(i+1))
p(end+1) = findzero(f, x(i), x(i+1), tol);
end
end
My instructions were to Implement a MATLAB function findmanyzeros of the form function p=findmanyzeros(f, a, b, n, tol)
which finds zeros in the interval [a, b] using the following strategy:
1. Compute n+1 equidistant points xk, k=0,...,n, between a and b
2. For k = 1,...,n, if f(xk) and f(xk1) have different signs, compute a zero using findzero
3. The output vector p should contain all the computed zeros

5 comentarios

Cris LaPierre
Cris LaPierre el 30 de Sept. de 2021
Sorry if I missed it, but what is your question?
Lavorizia Vaughn
Lavorizia Vaughn el 30 de Sept. de 2021
its not working. i keep getting that there is an error on
p(end+1) = findzero(f, x(i), x(i+1), tol);
Jan
Jan el 30 de Sept. de 2021
Whenever you mention an error in the forum, post a copy of the complete error message. It is much easier to solve an error that to guess, what the error is.
Lavorizia Vaughn
Lavorizia Vaughn el 30 de Sept. de 2021
>> f= @(x) cos(x)-x;
>> findzeros(f, 0, 1, 10, 10^-4)
Unrecognized function or variable 'fx'.
Error in findzeros (line 6)
if sign(fx(i)) ~= sign(fx(i+1))
>>
Lavorizia Vaughn
Lavorizia Vaughn el 30 de Sept. de 2021
Editada: Cris LaPierre el 30 de Sept. de 2021
f= @(x) cos(x)-x
f = function_handle with value:
@(x)cos(x)-x
findzeros(f, 0, 1, 10, 10^-4)
Unrecognized function or variable 'fx'.

Error in solution>findzeros (line 7)
if sign(fx(i)) ~= sign(fx(i+1))
function p = findzeros(f,a,b,n,tol)
x=a+(b-a)*(0:n)/n;
p=[];
for i = 1:n
if sign(fx(i)) ~= sign(fx(i+1))
p(end+1) = findzero(f, x(i), x(i+1), tol);
end
end
end

Iniciar sesión para comentar.

 Respuesta aceptada

Cris LaPierre
Cris LaPierre el 30 de Sept. de 2021
Editada: Cris LaPierre el 30 de Sept. de 2021

0 votos

You have not defined a variable fx inside your findzeros function. Do you mean to use f?
You have created a recursive function but you have not defined an exit criteria. Since sign(f(i) always is the same as sign(f(i+1)), p is never assigned a value, and your result is an empty vector.
f= @(x) cos(x)-x;
f(1:10)
ans = 1×10
-0.4597 -2.4161 -3.9900 -4.6536 -4.7163 -5.0398 -6.2461 -8.1455 -9.9111 -10.8391

Más respuestas (0)

Categorías

Más información sobre Mathematics and Optimization en Centro de ayuda y File Exchange.

Productos

Etiquetas

Preguntada:

el 30 de Sept. de 2021

Comentada:

el 30 de Sept. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by