【发布时间】:2017-06-29 02:08:58
【问题描述】:
在我的课堂上,我的教授希望我们使用函数来求解 sinX、cosX 和 expX 的泰勒级数。
我解决它的速度相对较快,但是当我上交它时,他说他希望我先使用除法而不是乘法,基本上结合了我的 power 和 fact 函数。我不知道他为什么要这样做,因为我得到了正确的答案,但在我这样做之前他不会接受任务。
我尝试了几次来弄清楚这个解决方案,但我不是 Comp Sci 专业的,而且已经 6 年多没有学过数学了,所以它在我的大脑中转动齿轮非常困难。任何帮助将不胜感激。
double power(double x, int n)
{
int i = 0;
double prod = 1.;
for ( ; i++ < n; )
prod = prod * x;
return prod;
}
double fact (int n)
{
int i;
double prod = 1.;
for (i = 1; i <= n; i++)
prod = prod * i;
return prod;
}
double mySin(double x)
{
int i, sign;
double sum = 0;
for (i = 0, sign = 1; i < 21; i++, sign = -sign)
sum = sum + sign * power(x, 2 * i + 1)/ fact(2 * i + 1);
return sum;
}
double myCos(double x)
{
int i, sign;
double sum = 0;
for(i = 0, sign = 1; i < 21; i++, sign = -sign)
sum = sum + sign *power(x,2 * i)/ fact(2 * i);
return sum;
}
double myExp(double x)
{
int i, sign;
double sum = 0;
for(i = 0, sign = 1; i < 21; i++, sign = sign)
sum = sum + sign * power(x, i)/ fact(i);
return sum;
}
【问题讨论】:
-
嗯...除法周围的括号?
-
“我不知道他为什么要这样做” - 你问了吗?
-
一定要喜欢“6 年没学过数学了,所以我大脑里的齿轮转动得很厉害”,因为我已经 6*6 年没有学过数学了,但齿轮看起来还不错。
-
@chux Gears 需要定期维护。
-
您可以通过计算一次指数来优化这一点,而不是在
power和fract调用中。比如mySin、int exp = 2 * i + 1;sum = sum + sign * (power(x, exp) / fact(exp));
标签: c taylor-series