【发布时间】:2015-12-10 02:54:46
【问题描述】:
我正在尝试计算cos(x) 的泰勒级数,最多有错误10^-3 和所有x ∈ [-pi/4, pi/4],这意味着我的错误需要小于0.001。我可以修改 for 循环中的 x += 以获得不同的结果。我尝试了几个数字,但它从来没有变成小于 0.001 的错误。
#include <stdio.h>
#include <math.h>
float cosine(float x, int j)
{
float val = 1;
for (int k = j - 1; k >= 0; --k)
val = 1 - x*x/(2*k+2)/(2*k+1)*val;
return val;
}
int main( void )
{
for( double x = 0; x <= PI/4; x += 0.9999 )
{
if(cosine(x, 2) <= 0.001)
{
printf("cos(x) : %10g %10g %10g\n", x, cos(x), cosine(x, 2));
}
printf("cos(x) : %10g %10g %10g\n", x, cos(x), cosine(x, 2));
}
return 0;
}
我也在为e^x 做这件事。对于这部分,x must in [-2,2]。
float exponential(int n, float x)
{
float sum = 1.0f; // initialize sum of series
for (int i = n - 1; i > 0; --i )
sum = 1 + x * sum / i;
return sum;
}
int main( void )
{
// change the number of x in for loop so you can have different range
for( float x = -2.0f; x <= 2.0f; x += 1.587 )
{
// change the frist parameter to have different n value
if(exponential(5, x) <= 0.001)
{
printf("e^x = %f\n", exponential(5, x));
}
printf("e^x = %f\n", exponential(5, x));
}
return 0;
}
但是每当我更改 for 循环中的项数时,它总是会出现大于 1 的错误。我应该如何将其更改为小于 10^-3 的错误?
谢谢!
【问题讨论】:
-
如果将
exponential循环中的计算更改为sum = 1.0 + x * sum / (float) i会发生什么? -
好的,我看到它应该是浮动的,但除此之外,没有什么真正改变,输出保持不变。
-
在您检查值
if(cosine(x, 2) <= 0.001)、if(exponential(5, x) <= 0.001)的这些行中,您不应该与cos、exp的TRUE 值进行比较吗?您在这里检查的似乎是函数是否接近于零。我觉得应该是if (abs(cosine(x,2) - cos(x)) > .0001) { ... }
标签: c taylor-series function-approximation