Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: метод Эйлера и Рунге-Кутта 3 порядка
Форумы.КАБiNET > Технопарк > Программирование
B0ND
вот есть два метода.
метод Эйлера:

Расчетные формулы для 1-го шага
y1=y0+h*f(x0,y0)
x1=x0+h

Расчетные формулы для i-го шага
yi+1=yi+h*f(xi,yi)
xi+1=xi*h

метод Рунге-Кутта третьего порядка:
уi+1=уi+(k1+4k2+k3)/6,
k1=hf(xi, yi),
k2=hf(xi+h/2, yi+k1/2),
k3=hf(xi+h, yi+2k2-k1),
xi+1=xi+h.

Поидее метод Рунге-Кутта должен быть точнее чем метод Эйлера

а мой код вот такой (я рассмотрел один шаг цикла):

нач. значения
y0 = 1
x0 = 1
h = 0.01

первый шаг
y = y0 + h * ((1 - x0 ^ 2) / x0 * y0)
x = x0 + h

метод Эйлера
y1 = y + h * ((1 - x ^ 2) / x * y)

метод Рунге-Кутта
k1 = h * ((1 - x ^ 2) / x * y)
k2 = h * ((1 - (x + h / 2) ^ 2) / (x + h / 2) * (y + k1 / 2))
k3 = h * ((1 - (x + h) ^ 2) / (x + h) * (y + 2 * k2 - k1))
y2 = y + (k1 + 4 * k2 + k3) / 6

в результате должно быть y2>y1, а у меня наоборот
никак не могу найти ошибку, помогите если сможете...
mnemonic
тык эта. в СИ ведь ^ - это битовый xor, а не возведение в степень.
B0ND
[quote=mnemonic]тык эта. в СИ ведь ^ - это битовый xor, а не возведение в степень.[/quote]

Это не С, это VB.
в синтоксисе у меня всё норм., может в алгоритме у меня что-то не так?
Алхимик
Может надо шаг поменьше или у тебя там где нить точка перегиба встречается. Или может где-нить надо вместо вычитания прибавлять и ли наоборот вычитать вместо прибавления. Проверь знаки в формулах. А еще полезно погрешность определить. Почитай учебник какой-нибудь где примеры разобраны.
Manunich
Цитата(B0ND @ 17.5.2005, 22:45) *
никак не могу найти ошибку, помогите если сможете...


Немного припоздал, но косяк в формуле, используй вот такую:

k1=f(x[i-1],y2[i-1]);
k2=f(x[i-1]+h/3, y2[i-1]+h*k1/3);
k3=f(x[i-1]+2*h/3, y2[i-1]+2*h*k2/3);
y2[i]=y2[i-1]+h*(k1+3*k3)/4;
dark-grey
Цитата(Manunich @ 15.5.2015, 17:13) *
Немного припоздал

всего лишь на 10 лет
Demon2
Вот это я понимаю отсутствие свободного времени.
Русская версия IP.Board © 2001-2019 IPS, Inc.