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

C++ C++;微分方程初值精度的泰勒级数估计,c++,taylor-series,C++,Taylor Series,我被要求使用泰勒级数方法来估计x(t)'=tx(t)+t^4,x(5)=3的初值问题。我必须编写代码,通过0使用泰勒级数方法显示估计值。您可以使用如下while循环: double t = 5.0; while (t > 0.0) { /* Your Code of Taylor function */ t = t -0.01; } 此代码以t值5.0开始,并在循环的每次迭代中以0.01递减t。当t值达到0.0时,循环结束。这不是问题,你需要关注的是解的泰勒展

我被要求使用泰勒级数方法来估计
x(t)'=tx(t)+t^4,x(5)=3的初值问题。我必须编写代码,通过
0使用泰勒级数方法显示估计值。您可以使用如下while循环:

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

此代码以t值5.0开始,并在循环的每次迭代中以0.01递减t。当t值达到0.0时,循环结束。这不是问题,你需要关注的是解的泰勒展开,一旦你完成了,就只需要计算每个值的函数。要找到泰勒展开式,你可以在
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[]={3,
625,
500,
300,
120,
24 };
双x(双t)
{
int j;
双cc=0;
双cp=0;
双tj=1;
双s=0;
对于(j=0;j 0)
cc/=j;
s+=cc*tj;
//printf(“[%2d]%f%f\n”,j,cc,s);
tj*=(t-5);
}
返回s;
}
int main()
{
双t;

对于(t=0.0;t我想说的是,这是一个递归,需要上一个项来计算下一个项,我需要项1来找到2,但如果给我项2,我不确定如何找到项1。在这种情况下,给我t=5,我需要找到t=4.99,向后走。@B.Li这个解决方案正是你想要的。问题是什么在一系列估计微分方程答案的过程中,这是一个递归,其中项xn+1需要项xn在其计算中。假设给我t0=1,那么我可以用t0来找到x0,然后用x0来找到x1。如果给我xn+1,我需要找到xn,我不确定如何回溯步骤来找到递归中的前一项。你有泰勒函数的递归代码?请把这个贴出来