IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> метод Эйлера и Рунге-Кутта 3 порядка
B0ND
сообщение 17.5.2005, 20:45
Сообщение #1




Группа: Пользователи
Сообщений: 6
Регистрация: 31.3.2005
Пользователь №: 4 038






вот есть два метода.
метод Эйлера:

Расчетные формулы для 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
сообщение 17.5.2005, 21:36
Сообщение #2




Группа: Пользователи
Сообщений: 28
Регистрация: 1.5.2005
Пользователь №: 4 197






тык эта. в СИ ведь ^ - это битовый xor, а не возведение в степень.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
B0ND
сообщение 17.5.2005, 22:09
Сообщение #3




Группа: Пользователи
Сообщений: 6
Регистрация: 31.3.2005
Пользователь №: 4 038






[quote=mnemonic]тык эта. в СИ ведь ^ - это битовый xor, а не возведение в степень.[/quote]

Это не С, это VB.
в синтоксисе у меня всё норм., может в алгоритме у меня что-то не так?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Алхимик
сообщение 22.5.2005, 02:52
Сообщение #4




Группа: Пользователи
Сообщений: 181
Регистрация: 25.12.2003
Из: Юго-западный район Екатеринбурга
Пользователь №: 1 385






Может надо шаг поменьше или у тебя там где нить точка перегиба встречается. Или может где-нить надо вместо вычитания прибавлять и ли наоборот вычитать вместо прибавления. Проверь знаки в формулах. А еще полезно погрешность определить. Почитай учебник какой-нибудь где примеры разобраны.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Manunich
сообщение 15.5.2015, 17:13
Сообщение #5




Группа: Новички
Сообщений: 1
Регистрация: 15.5.2015
Пользователь №: 58 473






Цитата(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
сообщение 16.5.2015, 17:34
Сообщение #6




Группа: Топ-модераторы
Сообщений: 7 990
Регистрация: 16.1.2007
Из: Форумы.КАБiNET
Пользователь №: 19 436






Цитата(Manunich @ 15.5.2015, 17:13) *
Немного припоздал

всего лишь на 10 лет
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Demon2
сообщение 26.5.2015, 20:24
Сообщение #7




Группа: Модераторы
Сообщений: 7 040
Регистрация: 25.11.2006
Из: :
Пользователь №: 17 337






Вот это я понимаю отсутствие свободного времени.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 26.6.2017, 13:49
Блог КАБiNET