Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Решение дифуравнения на С++ (http://forum.oszone.net/showthread.php?t=117844)

gustav21 21-09-2008 18:48 904916

Решение дифуравнения на С++
 
Подскажите, пожалуйста, алгоритм решения дифура 3-его порядка методом Эйлера. Там вроде как надо переходить от дифура к системе дифуров 1-ого порядка...

Admiral 22-09-2008 01:05 905242

gustav21, нужно просто посчитать или поставить вопрос решений на поток и изготовить для этого прогу?
В любом случаи существуют готовые математические программы среди которых Maple, MathCAD, Matlab, Mathematica и т.д.
Как примерно это выглядит
Решение дифференциальных уравнений в Mathcad
Аналитическое решение дифференциальных уравнений с помошью Maple
и т.д. на том же ресурсе.

А насчёт самого хода решения то в данном случаи с 3го можем понизить (если оно не содержит y или x) до 2го и решать его.


gustav21 22-09-2008 09:19 905382

В том то и дело, что нужна именно прога на С++ (ну или алгоритм накрайняк)

Busla 22-09-2008 14:10 905626

Цитата:

Цитата gustav21
ну или алгоритм накрайняк »

т.е., что такое метод Эйлера ты не знаешь?

gustav21 22-09-2008 20:41 905998

Знаю, я сделал прогу, но она дает неправильные результаты, я проверял в Маткаде, может я не так реализовал этот алгоритм.... могу привести код вот он:

главный цикл
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-