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 件のコメント

Dyuman Joshi
Dyuman Joshi 2024 年 2 月 18 日
移動済み: Dyuman Joshi 2024 年 2 月 18 日
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

サインインしてコメントする。

 採用された回答

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2024 年 2 月 18 日

0 投票

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)
The actual value for arctan(x) at x = 0.8 is 0.66577375
fprintf('The approximate value of arctan(x): %0.1f is %0.8f \n', x, approximatearctan)
The approximate value of arctan(x): 0.8 is 0.66577376
fprintf('The number of terms required: %d \n',n)
The number of terms required: 29
fprintf('The difference is %1.8f \n', abs(approximatearctan - arctanactual))
The difference is 0.00000001

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Get Started with MATLAB についてさらに検索

製品

リリース

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by