Оценка рядов Тейлора С ++ точности дифференциального уравнения начального значения

Меня попросили использовать метод рядов Тейлора, чтобы оценить начальную проблему 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?

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

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 времена были найдены эмпирически, так как расширение, похоже, тогда сходилось.

1

По вопросам рекламы [email protected]