我被要求使用泰勒级数方法来估计 的初始值问题x(t)'= tx(t) + t^4, x(5) = 3
。我必须编写代码来显示使用泰勒级数方法的估计值0<=t<=5
。
我被教导从 开始t=0
,使用初始条件 att=0
来查找x0
,然后通过计算并找到对应于的下一个t=5
以0.01
递增的方式上升。x'', x''', etc
x
t+0.01
我如何在 c++ 中向后执行此过程,如从开始t=5
并向下递增到 0 ?
我被要求使用泰勒级数方法来估计 的初始值问题x(t)'= tx(t) + t^4, x(5) = 3
。我必须编写代码来显示使用泰勒级数方法的估计值0<=t<=5
。
我被教导从 开始t=0
,使用初始条件 att=0
来查找x0
,然后通过计算并找到对应于的下一个t=5
以0.01
递增的方式上升。x'', x''', etc
x
t+0.01
我如何在 c++ 中向后执行此过程,如从开始t=5
并向下递增到 0 ?
您可以使用这样的 while 循环:
double t = 5.0;
while (t > 0.0) {
/* Your Code of Taylor function */
t = t -0.01;
}
此代码从值 5.0 开始,并在循环的每次迭代中将 t 递减 0.01。当 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
是由初始值和 的导数产生的项t^4
。这些术语在 之后消失24
。100
由于扩展似乎已经收敛,因此已经根据经验找到了循环时间。