Write a script file that will compute the sine of an angle using the Taylor series formula:

85 次查看(过去 30 天)
Write a script file that will compute the sine of an angle using the Taylor series formula:
The program will prompt the user to input the angle in degrees, and the number of terms in the series. Use the program to calculate sin(150 degrees) using 5 and 9 terms.
Note: Can anyone help mw with this? So far this is what I have and I am not sure if it is even correct.
disp("Input the angle in degrees (x) and the number of terms (n)")
x = input('x: ');
n = input('n: ');
sum = 0;
deg = x*180/pi;
for k = 0:n
y = ((((-1)^k)*deg^(2*k+1)))/factorial(2*k+1);
sum = sum + y;
end;
fprintf('sin(%3.2f) = %1.2fln',x,sum)

采纳的回答

Mathieu NOE
Mathieu NOE 2021-9-29
hello
please don't use sum or any other native matlab function names for variables names in your code; this can shadow the native function and create trouble in code execution (and unpredictable results).
beside that , your conversion from degrees to radian was wrong (as x is supposed to be in rad in the taylor formula)
also no need for for loop as your code can be easily vectorized.
code updated :
disp("Input the angle in degrees (d) and the number of terms (n)")
d = input('d: ');
n = input('n: ');
x = d*pi/180;
% out = 0;
% for k = 0:n
% y = ((((-1)^k)*x^(2*k+1)))/factorial(2*k+1);
% out = out + y;
% end;
k = 0:n;
y = ((((-1).^k).*x.^(2*k+1)))./factorial(2*k+1);
out = sum(y);
fprintf('sin taylor (%3.2f) = %1.4f\r',d,out) % taylor serie output
fprintf('sin (%3.2f) = %1.4f\r',d,sin(x)) % sin function output
fprintf('error percentage (%3.2f) = %1.4f\r',d,error_percent) % error (%) output
  4 个评论
John Doe
John Doe 2021-10-4
Oh okay, noted, but there is also another error. The error_percentage was never declared or identified in the code.
Mathieu NOE
Mathieu NOE 2021-10-4
sorry
probably error of copy paste - that line disappeared by mistake
correction :
disp("Input the angle in degrees (d) and the number of terms (n)")
d = input('d: ');
n = input('n: ');
x = d*pi/180;
% out = 0;
% for k = 0:n
% y = ((((-1)^k)*x^(2*k+1)))/factorial(2*k+1);
% out = out + y;
% end;
k = 0:n;
y = ((((-1).^k).*x.^(2*k+1)))./factorial(2*k+1);
out = sum(y);
error_percent = 100*abs((out-sin(x))./(sin(x)+eps)); % added eps to avoid zero division for case sin(x) = 0
fprintf('sin taylor (%3.2f) = %1.4f\r',d,out) % taylor serie output
fprintf('sin (%3.2f) = %1.4f\r',d,sin(x)) % sin function output
fprintf('error percentage (%3.2f) = %1.4f\r',d,error_percent) % error (%) output

请先登录,再进行评论。

更多回答(2 个)

Chunru
Chunru 2021-9-29
disp("Input the angle in degrees (x) and the number of terms (n)")
Input the angle in degrees (x) and the number of terms (n)
%x = input('x: ');
x = 45;
%n = input('n: ');
n = 100;
sum = 0;
xrad = x * pi/180;
for k = 0:n
y = (-1)^k * xrad^(2*k+1) /factorial(2*k+1);
sum = sum + y;
end
fprintf('sin(%.2f) = %.6f\n', x, sum)
sin(45.00) = 0.707107

Matt J
Matt J 2021-9-29
Easier:
n=10;
x=pi/7;
k=0:n;
T=sum( ((-1).^k .* x.^(2*k+1))./factorial(2*k+1) )
T = 0.4339
approxError=T-sin(x)
approxError = -5.5511e-17

类别

Help CenterFile Exchange 中查找有关 Mathematics 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by