读书人

级数逼近:《C++程序设计教程(第二版

发布时间: 2012-09-29 10:30:01 作者: rapoo

级数逼近:《C++程序设计教程(第二版)》第二章的课后习题。这道题,我希望自己能够作出来,所以回复会比较迟
题目:
对运行中输入的x,计算级数:n
x² n+1 x
1 + x - --- + …(-1) ---
2! n!
-8
要求输出精度为 10 (十的负八次).分别用for和while语句各编写一个程序。


[解决办法]
老实说这个
x² n+1 x
1 + x - --- + …(-1) ---
2! n!

我看的不咋明白
[解决办法]
你说taylor级数,或者maclaulin级数大家就懂了
你这样写出来,别人肯定稀里糊涂的
[解决办法]

C/C++ code
#include <iostream>#include <cmath>using namespace std;int main(){    double fact=1.0,x,sum=0;    int n=1,co=-1;    double tmp=1.0;    cin>>x;    while(fabs(tmp)>1e-10)    {        sum+=tmp;        fact*=n;        n++;        co*=-1;        tmp=co*x/fact;        x*=x;    }    cout<<sum<<endl;    return 0; }
[解决办法]
四楼思路是对的……
不过计算除法时出现了溢出……

以下代码可行,思路请参考4楼……
C/C++ code
#include <iostream>#include <cmath>using namespace std;int main(){    double fact=1.0,x,sum=1;    int n=1;    double tmp=-1.0;    cin>>x;    while(fabs(tmp)>1e-9)    {        tmp=-tmp*x/n++;        sum+=tmp;    }    cout<<sum<<endl;    return 0;}
[解决办法]
该级数等于Exp(-x),或者说1/e^x,e是自然对数的底
[解决办法]
探讨
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double fact=1.0,x,sum=0; //将fact和sum定义成双精度因为要求输出为有精度的值
    int n=1,co=-1;//n就是算是里面的n
    double tmp=1.0;          //tmp应该可以在上面一起定义吧?
    cin>>x;                  //输入一个数放到x中
    while(abs(tmp)>1e-8)    //对于这里我修改了一下,可能是题目没看清吧或者我理解错了他的意思?这个终止条件我在书上看了很多次,就是不明白为什么
    {
        sum+=tmp;            //sum用于累加tmp的值
        fact*=n;            //fact是用来表示n的阶乘的吧。我记得应该还有一种除以n的方法吧?
        n++;                //n的增量,让n不断加一变化
        co*=-1;            //co用来变化每一项的符号
        tmp=co*x/fact;      //这个应该算是通项吧
        x*=x;              //这个用来让x呈现出x的n次方
    }
    cout < <sum < <endl;        //输出结果
    return 0;
}                        //为什么结果不正确呢?

读书人网 >C++

热点推荐