我是编程新手。我的大学类(class)包含一个编程模块(C),我需要一些帮助来确定我的代码发生了什么。
对于 sin(x) 我有:
#include <stdio.h>
#include <math.h>
/*Taylor series expansion of sin(x)*/
int main(void)
{
float x, ans;
int i, fac, n, sign;
printf("Value for x: ");
scanf("%f", &x);
printf("Value for n: ");
scanf("%d", &n);
for (i=1, fac=1, ans=x, sign=-1; i<=n; i++)
{
fac*=(2*i+1)*2*i;
ans+=sign*pow(x,2*i+1)/fac;
sign*=-1;
}
printf("Answer is %f.\n", ans); /*Taylor expansion completed*/
return 0;
}
我现在(在帮助下)修复了 sin(x) 的展开式。但对于完整的问题,我很难回答正确。
到目前为止,我对 f(x)=sin(x)+cos(x) 的扩展如下所示:
#include <stdio.h>
#include <math.h>
int main(void)
{
int x, sin, cos;
float i, j, fac1, fac2, n, sign, ans;
printf("Value for x: ");
scanf("%f", &x);
printf("Value for n: ");
scanf("%d", &n);
for (i=1, fac1=1, fac2=1, sin=x, cos=1, ans=1+x, sign; i<=n; i++)
{
fac1*=(2*i+1)*2*i; /*factorial expansion for sin(x)*/
fac2*=2*i*(2*i-1); /*factorial expansion for cos(x)*/
sin+=sign*pow(x,2*i+1)/fac1; /*Series expansion of sin(x)*/
cos+=sign*pow(x,2*i)/fac2; /*Series expansion of cos(x)*/
sign*=-1;
ans=sin+cos; /*Final step*/
}
printf("Answer is %f.\n", ans); /*Taylor expansion completed*/
return 0;
}
我认为这会起作用,但例如插入 1 和 10 会得到 1065353216 (基本上是严重错误的)。对这个有什么建议吗?
最佳答案
展开式的分子中应包含 (-1)i。您应该使用 int i
因为它是一个循环变量,否则会违反约定。
a = a + (pow(-1,i) * pow(x, (2 * i) + 1)) / f; /* Expansion sum */
或将 pow(-1, i)
替换为 (i & 1 ? -1 : 1)
,其中 i
是 int
.
关于c - C 编程中函数的泰勒展开式 f(x)=sin(x)+cos(x) 存在输出错误。有什么建议么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26864741/