C ++泰勒级数估计初值微分方程精度

时间:2015-12-02 08:47:54

标签: c++ taylor-series

我被要求使用泰勒系列方法来估计x(t)'= tx(t) + t^4, x(5) = 3的初始值问题。我必须编写代码以使用0<=t<=5的泰勒系列方法显示估算值。

我被教导从t=0开始,使用t=0的初始条件查找x0,然后按t=5增加0.01计算x'', x''', etc并找到与x对应的下一个t+0.01

如何在c ++中向后执行此过程,如从t=5开始并向下递增到0?

2 个答案:

答案 0 :(得分:1)

你可以像这样使用while循环:

double t = 5.0;
while (t > 0.0) {
       /* Your Code of Taylor function */
       t = t -0.01;
}

此代码以t值5.0开始,并在循环的每次迭代中以t为0.01递减。当t值达到0.0

时,循环结束

答案 1 :(得分:1)

这不是问题,你需要关注的是解决方案的泰勒扩展,一旦你完成了它,它只是计算每个值的函数的问题。要查找泰勒展开式,您可以在t=5周围进行,因为您知道x(5)=3,然后直接从微分方程中找到x'(5),并通过重复区分方程的两边来找到后续的导数。您会发现t^4这个词最终会消失,其余的会产生一个简单的递归公式。

#include <cstdio>

double c[] = { 3,
               625,
               500,
               300,
               120,
               24 };

double x(double t) 
{
    int j;
    double cc = 0;
    double cp = 0;
    double tj = 1;
    double s = 0;

    for(j=0; j<100; j++) {
        cc = (j-1)*cp + 5*cc;

        if( j < sizeof(c)/sizeof(c[0]) )
            cc += c[j];

        if( j > 0 )
            cc /= j;

        s += cc * tj;
        //printf("[%2d] %f %f\n", j, cc, s);

        tj *= (t-5);
    }

    return s;
}

int main()
{
    double t;

    for( t = 0.0; t<5.005; t+=0.01 )
        printf("%f %f\n", t, x(t));

    return 0;
}

数组c是由t^4的初始值和导数产生的项。这些术语在24之后消失。由于扩张似乎已经收敛,所以在经验上找到了循环100次。