泰勒公式求sin(x)

什么是泰勒公式?

这不重要,以下是泰勒公式求sin(x)的公式。
image-20230519181937164

方法一

依次计算每个项的值,并将它们累加起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
double jc(int num);
int main()
{
double x;
printf("sin(x):");
scanf("%lf", &x);
int n = 1; // 当前项数,初始为1
double term = x; // 当前项的值,初始为x
double sum = x; // 求和变量,初始为x
int t = -1;
while (fabs(term) >= 1e-5)
{
n++;
term = pow(x, 2 * n - 1) / jc(2 * n - 1) * t; // 计算当前项的值
sum = sum + term;
t = -t; // 取相反的正负号,使下一项的符号与上一项相反
}
printf("%lf",sum);

return 0;
}

double jc(int num)
{
double res = 1.0;
int i = 0;
for (i = 2; i <= num; i++)
{
res = res * i;
}
return res;
}

详解

这段代码实现了通过泰勒级数计算正弦值的方法,并使用一个while循环来实现。在循环开始时,我们定义变量 n 表示当前项的编号,初始值为 1;定义变量 term 表示当前项的值,初始值也为 x;定义变量 sum 表示当前所有项的累加和,初始值也为 x。
由于正弦函数的泰勒级数中每一项都包括一个阶乘,因此我们需要先定义一个函数 jc 来计算阶乘。在while循环中,我们每次都计算当前项的值 term,并将其累加到 sum 中。同时,我们需要根据当前项的编号来决定这一项的符号是正还是负,可以定义一个变量 t,每次将其取相反值即可实现。

方法二

通过观察 sin(x) 的泰勒级数中每两项之间的关系,直接计算出每一项,并将它们累加起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
double x;
printf("sin(x):");
scanf("%lf", &x);
double term = x;
double sum = x;
int n = 1;
while (fabs(term) >= 1e-5)
{
term = -term * x * x / ((n + 1) * (n + 2)); // 计算当前项的值时直接利用前一项的值来计算。
sum = sum + term;
n += 2;
}
printf("sin(x)=%lf", sum);
return 0;
}

核心

当前项的值等于上一项的相反数乘以x的平方再除以 (n+1)(n+2)。
也就是:term=−term∗x∗x/((n+1)∗(n+2))