![]() |
Решение дифуравнения на С++
Подскажите, пожалуйста, алгоритм решения дифура 3-его порядка методом Эйлера. Там вроде как надо переходить от дифура к системе дифуров 1-ого порядка...
|
gustav21, нужно просто посчитать или поставить вопрос решений на поток и изготовить для этого прогу?
В любом случаи существуют готовые математические программы среди которых Maple, MathCAD, Matlab, Mathematica и т.д. Как примерно это выглядит Решение дифференциальных уравнений в Mathcad Аналитическое решение дифференциальных уравнений с помошью Maple и т.д. на том же ресурсе. А насчёт самого хода решения то в данном случаи с 3го можем понизить (если оно не содержит y или x) до 2го и решать его. |
В том то и дело, что нужна именно прога на С++ (ну или алгоритм накрайняк)
|
Цитата:
|
Знаю, я сделал прогу, но она дает неправильные результаты, я проверял в Маткаде, может я не так реализовал этот алгоритм.... могу привести код вот он:
главный цикл for (ind = 0+h; ind <= T; ind += h) { v = CalcCondition(v0); v0 = v; cout << "\n" << ind << ": " << v.w; } h - это шаг описание структур v и v0: struct vector { double w, y, z; } v, v0; vector CalcCondition (vector v0) { vector v; v.z = f1(v0.w, v0.y, v0.z); v.y = f2(v0.w, v0.y, v.z); v.w = f3(v0.w, v.y, v.z); return v; } double f1 (double w, double y, double z) { return z + (-z/Tya - (Tv+Tem)*y/(Tya*Tv*Tem) - w/(Tya*Tv*Tem) + kdv*u/(Tya*Tv*Tem))*h; } double f2 (double w, double y, double z) { return y + z*h; } double f3 (double w, double y, double z) { return w + y*h; } функции f1, f2, f3 - это система дифуров первого порядка, вот система: z(штрих) = -z/Tya - (Tv+Tem)*y/(Tya*Tv*Tem) - w/(Tya*Tv*Tem) + kdv*u/(Tya*Tv*Tem) y(штрих) = z w(штрих) = y T, к - это все константы вроде все правильно написано, но результаты неправильные!! |
Время: 11:19. |
Время: 11:19.
© OSzone.net 2001-