Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.06.2024
Сообщений: 1

Модифицированный метод Эйлера для решения систем диффуров

17.06.2024, 15:43. Показов 461. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем здравствуйте! Написал код для решения систем дифференциальных уравнений Модифицированным методом Эйлера. Но не могу понять, почему при первой итерации шаг не меняется, и в итоге на десятой итерации шаг 0.9, хотя должен быть 1.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import math
import matplotlib.pyplot as plt
 
def f(t,x,y):
    return (5*x)+(3*y)
def g(t,x,y):
    return -y-3*x
 
sumx=0
sumy=0
n=int(input("КОЛИЧЕСТВО РАЗБИЕНИЙ"))
h=1/n
t=0.0
x_i= 1
y_i= 0
 
xa=[]
ya=[]
xi=[]
yi=[]
t_g=[]
print("    i    t         x_a         x_i         y_a        y_i")
for i in range(0,n+1):
    t_v = t+h/2
    x_v = x_i+h/2*f(t,x_i,y_i)
    y_v = y_i+h/2*g(t,x_i,y_i)
    x_a=(1+3*t)*math.exp(2*t)
    y_a=-3*t*math.exp(2*t)
    xa.append(x_a)
    ya.append(y_a)
    xi.append(x_i)
    yi.append(y_i)
    t_g.append(t)
    print(f"{i:5}{float(t):.2}{x_a:15.5f}{x_i:15.5f}{y_a:15.5f}{y_i:15.5f}")
 
    if i!=0:
        sumx+=abs(x_i-x_a)
        sumy+=abs(y_i-y_a)
        x_i+=h*f(t_v,x_v,y_v)
        y_i+=h*g(t_v,x_v,y_v)
        t+=h
 
ex=sumx/(n)
ey=sumy/(n)
print('ПОГРЕШНОСТЬ \n ПО ОСИ Х =' , ex, '\n ПО ОСИ y = ', ey )
plt.subplot(211)
plt.title('x(t)')
plt.xlabel('t')
plt.ylabel('x')
plt.plot(t_g,xi,'r-.',t_g,xa,'g-.')
plt.legend(['РАСЧЕТНЫЙ ГРАФИК','АНАЛИТИЧЕСКИЙ ГРАФИК'],loc=2)
plt.subplot(212)
plt.title('y(t)')
plt.xlabel('t')
plt.ylabel('y')
plt.plot(t_g,yi,'r-.',t_g,ya,'g-.')
plt.legend(['РАСЧЕТНЫЙ ГРАФИК','АНАЛИТИЧЕСКИЙ ГРАФИК'],loc=2)
plt.show()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2024, 15:43
Ответы с готовыми решениями:

Модифицированный метод Эйлера
Я хочу прописать в функцию solution решение дифференц. уравнения y' = x**2-y**2 y(0) = 0 Но тут произошли трудности некоторые нужна...

Модифицированный метод Эйлера для решения дифференциальных уравнений
Помогите реализовать модифицированный метод Эйлера для нахождения решений дифференциальных уравнений. Уже не первый день ломаю голову как...

Модифицированный метод Эйлера для решения системы дифференциальных уравнений
реализовала модифицированный метод Эйлера для одного уравнения, подскажите пожалуйста, как его переделать для системы из 3-4 уравнений ...

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38178 / 21113 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
18.06.2024, 05:33
IvanKos, у тебя шаг - это h?
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
18.06.2024, 10:09
- Прошу меня простить! Совершенно забыл метод Эйлера. Многие термины писал просто по интуиции.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import math
import matplotlib.pyplot as plt
 
 
# (функция приращения по - x)
def f_x(x: float, y: float) -> float:
    return (5 * x) + (3 * y)
 
 
# (функция приращения по - y)
def f_y(x: float, y: float) -> float:
    return -y - 3 * x
 
 
# N = int(input("КОЛИЧЕСТВО РАЗБИЕНИЙ"))
N: int = 10  # (число Шагов)
h: float = 1 / N  # (один Шаг)
# (текущие Значения)
t = 0.0
x_i = 1.0
y_i = 1.0
# (суммы различий)
sum_x = 0.0
sum_y = 0.0
# (графика)
plot_g = []
# (расчетный график)
plot_rx = []
plot_ry = []
# (аналитический график)
plot_ax = []
plot_ay = []
 
print("\ti\tt\t\t\tx_a\t\t\t\tx_i\t\t\t\ty_a\t\t\t\ty_i")
# (по всем Шагам)
for i in range(0, N + 1):
    # (.....)
    plot_g.append(t)
    # (расчетный график)
    plot_rx.append(x_i)
    plot_ry.append(y_i)
    # (.....)
    t_v = t + h / 2
    x_v = x_i + h / 2 * f_x(x_i, y_i)
    y_v = y_i + h / 2 * f_y(x_i, y_i)
    # (аналитический график)
    x_a = (1 + 3 * t) * math.exp(2 * t)
    y_a = -3 * t * math.exp(2 * t)
    plot_ax.append(x_a)
    plot_ay.append(y_a)
    print(f"{i:5}\t{float(t):.2}\t{x_a:15.5f}\t{x_i:15.5f}\t{y_a:15.5f}\t{y_i:15.5f}")
 
    # (пересчет текущих Значений)
    if i < N:
        # (пересчет сумм)
        sum_x += abs(x_i - x_a)
        sum_y += abs(y_i - y_a)
        # (пересчет текущей Точки)
        x_i += h * f_x(x_v, y_v)
        y_i += h * f_y(x_v, y_v)
        t += h
 
# (погрешности)
e_x = sum_x / N
e_y = sum_y / N
print('\nПОГРЕШНОСТИ: \n  ПО ОСИ Х: =', e_x, '\n  ПО ОСИ Y: = ', e_y)
 
# (графика)
plt.subplot(211)
plt.title('x(t)')
plt.xlabel('t')
plt.ylabel('x')
plt.plot(plot_g, plot_rx, 'r-.', plot_g, plot_ax, 'g-.')
plt.legend(['РАСЧЕТНЫЙ ГРАФИК', 'АНАЛИТИЧЕСКИЙ ГРАФИК'], loc=2)
plt.subplot(212)
plt.title('y(t)')
plt.xlabel('t')
plt.ylabel('y')
plt.plot(plot_g, plot_ry, 'r-.', plot_g, plot_ay, 'g-.')
plt.legend(['РАСЧЕТНЫЙ ГРАФИК', 'АНАЛИТИЧЕСКИЙ ГРАФИК'], loc=2)
plt.show()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.06.2024, 10:09
Помогаю со студенческими работами здесь

Метод Эйлера-Коши и трапеций для решения систем диф. уравнений.
Здравствуйте. Не могу найти внятной информации по численным методам решения систем дифференциальных уравнений первого порядка методами...

Рекурентные формулы метод Рунге - Кутты, Эйлера, Эйлера модифицированный
Дано дифференциальное уравнение первого порядка: y`=2x+2y И задача Коши: y(0)=1, x(0)=0, xk=3.8, hx=0.2 Я видел реализацию методов, с...

Метод Рунге - Кутты для решения диффуров 1-го порядка
Есть ур-е вида: x'={y}^{2}*x Есть задача Коши. Решил методом Эйлера и модифицированным методом Эйлера. При расчете методом Рунге -...

Метод Гаусса для решения систем линейных алгебраических систем уравнений четвертого порядка
Задание №1 : Изучить метод Гаусса для решения систем линейных алгебраических систем уравнений четвертого порядка. Разработать блок-схему...

Программа для решения систем ОДУ неявный методом Эйлера
Всем доброго времени суток! Очень нужна помощь:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru