gpt4 book ai didi

c - 在 C 中做泰勒级数的替代方法

转载 作者:行者123 更新时间:2023-12-04 10:36:03 25 4
gpt4 key购买 nike

在我的课上,我的教授希望我们使用函数来求解 sinX、cosX 和 expX 的泰勒级数。

我解决得比较快,但当我上交时,他说他希望我先使用除法而不是乘法,基本上结合了我的 powerfact 函数.我不知道他为什么要这样做,因为我得到了正确的答案,但在我这样做之前他不会接受作业。

我尝试了好几次想弄明白这个解决方案,但我不是 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;
}

最佳答案

幂函数和阶乘函数的使用效率低下。对于每个术语,您每次都在计算同一组产品。您还在构建可能导致精度损失的大量数字。

看一下每个级数的定义(这里^表示幂,!表示阶乘):

e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ...
sin(x) = x - x^3/3! + x^5/5! - + x^7/7! + ...
cos(x) = 1 - x^2/2! + x^4/4! - + x^6/6! + ...

对于 e^x,每个术语都是 x/n 乘以最后一个,其中 n 是术语编号。类似地,对于 sin(x)cos(x),每一项都是 - x^2/((2n-1)*2n) 最后一次。使用它代替幂函数和阶乘函数来计算每个连续项。

还有一个很好的技巧,它涉及一个比较,这在数学上没有意义,但由于 float 的精度有限而无法知道何时停止计算项。看看你能不能想出来。

关于c - 在 C 中做泰勒级数的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44808441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com