Меня попросили использовать метод рядов Тейлора, чтобы оценить начальную проблему 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?
Вы можете использовать цикл while так:
double t = 5.0;
while (t > 0.0) {
/* Your Code of Taylor function */
t = t -0.01;
}
Этот код начинается со значения t 5,0 и уменьшается на 0 в 0 на каждой итерации цикла. Цикл заканчивается, когда значение 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
времена были найдены эмпирически, так как расширение, похоже, тогда сходилось.