用泰勒级数计算sin(X) [英] Calculating sin(x) with Taylor series
本文介绍了用泰勒级数计算sin(X)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
任务:根据sin(X)的泰勒级数,使用名为mysin的双函数进行计算,并将其传递给双变量。从用户获取x值,并使用mysin函数计算sin(X)。
问题是程序给了我错误的sin(X)值。我已经试着解决这个问题大约4个小时了,但是没有找到。是因为sin(X)函数,还是我在代码中遗漏了什么?
我的代码:
#include <stdio.h>
double mysin(double x)
{
double value = x;
double sum = x;
int neg_pos = 1;
int fac = 1;
int counter = 0;
while(1)
{
neg_pos *= -1;
fac += 2;
value = value/(fac*(fac-1));
value = value*x*x*neg_pos;
sum += value;
//printf("Hello");
counter++;
if (counter == 100) break;
}
return sum;
}
int main()
{
double number;
scanf("%lf",&number);
printf("%g",mysin(number));
//printf("%g",number);
}
推荐答案
问题是您要乘以neg_pos
每个步骤,这会在+1和-1之间切换。这意味着条款只有一半的时间会更改符号,而它们每次都应该更改符号。
修复方法是每次只乘以-1,而不是neg_pos
。
下面是您的程序的一个有效的、稍微简化的形式,它计算从0到3范围内的数字的sin,显示要比较的stdlib计算。
#include <math.h>
#include <stdio.h>
double mysin(double x) {
double value = x;
double sum = x;
int fac = 1;
for (int counter = 0; counter < 100; counter++) {
fac += 2;
value = -value*x*x/fac/(fac-1);
sum += value;
}
return sum;
}
int main() {
for (double x = 0.0; x < 3.0; x += 0.1) {
printf("%g: %g %g
", x, mysin(x), sin(x));
}
}
您还可以避免使用单独的fac
和counter
变量,可能如下所示:
double mysin(double x) {
double term=x, sum=x;
for (int f = 0; f < 100; f++) {
term = -term*x*x/(2*f+2)/(2*f+3);
sum += term;
}
return sum;
}
这篇关于用泰勒级数计算sin(X)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文