C++ динамическая система
Александр Дергилёв

Добрый день. Возникла такая проблема. У меня есть динамическая система изменяющаяся во времени, нужно составить систему диф. уравнений, которые описывают поведение этой системы (сделано) и так же запрограммировать решение этих систем результатми которых будут, например w(t) или v(t) в общем параметры которые изменяются во времени. диф уравнение должно решаться метод рунге-кутте. И кроме этого для каждого параметра должен выводится график в системе координат( например зависимость скорости от времени, где время это ось х, а скорость ось у) в итоге должно на экране быть 4 графика. В идеале их вид должен принимать синусойду. Так вот. С графикой никогда не имел дело. Есть наброски, тупые, не спорю, но хоть что то есть. Могли бы вы подсказать или написать часть кода, чтобы строился хотя бы один график, остальные я уже сам. Вот наброски, пишу в visual studio 2013.

include <Windows.h>

include <stdlib.h>

include <math.h>

pragma warning(disable : 4996)

float k1 = 100000, k2 = 10000, m = 5, l = 1, u = 8, mb = 10, t0 = 0, t1=100;
float g = 9.8;
float dv(float x, float fi)
{
return (l*(-k2*(x - l*fi) - 0.5 * mb*g)) / u;
}
void px(float x, int n, float h)
{
x[0] = 0;
for (int i = 1; i <= n; i++)
x[i] = x[0] + h*i;
}
void runge(float t0, float t1, float *y, float x, float h, int n)
{
HDC hDC = GetDC(GetConsoleWindow());
HPEN Pen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
int i = 1;;
float m1, m2, m3, m4;
for (i = 1; i <= n; i++)
{
m1 = dv(x, y[i - 1]);
m2 = dv(x + h / 2, y[i - 1] + h / 2 * m1);
m3 = dv(x + h / 2, y[i - 1] + h / 2 * m2);
m4 = dv(x + h, y[i - 1] + h * m3);
y[i] = y[i -1] + h / 6 * (m1 + 2 * m2 + 2 * m3 + m4);
MoveToEx(hDC, 10 * t0 + 100,-10
y[i] + 85, NULL);//10 - scale
LineTo(hDC, 10 * t0 + 100, -10 * y[i] + 85);
t0 += h;
x += h;
}
}
int main(void)
{
float h;
float x, *y;
int n;
HDC hDC = GetDC(GetConsoleWindow());
HPEN Pen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
SelectObject(hDC, Pen);
MoveToEx(hDC, 0, 85, NULL);
LineTo(hDC, 200, 85);
MoveToEx(hDC, 100, 0, NULL);
LineTo(hDC, 100, 170);
h = 0, 1;
n = (t1 - t0) / h;
//x = (float
)calloc(n, sizeof(float));
y = (float*)calloc(n, sizeof(float));
float x0 = 0;
y[0] = 0;
runge(t0, t1, y, x0, h,n);
/for (x = -8.0f; x <= 8.0f; x += 0.01f) // O(100,85) - center
{
MoveToEx(hDC, 10 * x + 100, -10 * sin(x) + 85, NULL);//10 - scale
LineTo(hDC, 10 * x + 100, -10 * sin(x) + 85);
}
/
system("pause");
return 0;
}

1 чел.