Why does this function not work for decimals?
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
TheSaint
el 18 de Feb. de 2024
Movida: Dyuman Joshi
el 18 de Feb. de 2024
x = input("Please enter the value of x (in radians): ");
approximatearctan = 0;
n = 0;
arctanactual = atan(x);
while (abs(approximatearctan - atan(x))>0.00001)
approximatearctan = approximatearctan + (-1)^n * x^(2*n +1) / factorial(2*n+1);
n = n + 1;
end
fprintf('The actual value for arctan(x) to eight decimal places given an input of %0.1f is %0.8f. \n', x, arctanactual)
fprintf('The approximate value of arctan(x) to eight decimal places given an input of %0.1f is %0.8f. \n', x, approximatearctan)
fprintf('The number of terms required to reach a five decimal place agreement between the approximate and actual values of arctan(x) is %0.0f \n', n)
I have this code, and it works fine for any number above one. However, I need it to work for numbers smaller than 1, e.g. 0.7. Whenever I put in a number that is <1, the program just gets stuck in an endless running state. Any input is appreciated.
1 comentario
Dyuman Joshi
el 18 de Feb. de 2024
Movida: Dyuman Joshi
el 18 de Feb. de 2024
The formula you have used is incorrect. There is no factorial in the formula.
Refer to this webpage for expansion of arc tan for different values - https://proofwiki.org/wiki/Power_Series_Expansion_for_Real_Arctangent_Function
Respuesta aceptada
Sulaymon Eshkabilov
el 18 de Feb. de 2024
Here is the corrected answer (Note abs(x)<=1):
% x = input("Please enter the value of x (in radians): "); % Here "input" prompt does
% not work, but it works in a MATLAB desktop:
% E.g.:
x = pi/4;
approximatearctan = 0;
n=0;
arctanactual = atan(x);
approximatearctan = 0;
while abs(approximatearctan - arctanactual)>1e-8
approximatearctan= approximatearctan + ((-1)^n * x^(2*n + 1)) / (2*n + 1);
n = n+1;
end
fprintf('The actual value for arctan(x) at x = %0.1f is %0.8f \n', x, arctanactual)
fprintf('The approximate value of arctan(x): %0.1f is %0.8f \n', x, approximatearctan)
fprintf('The number of terms required: %d \n',n)
fprintf('The difference is %1.8f \n', abs(approximatearctan - arctanactual))
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Genomics and Next Generation Sequencing 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!