Метод эйлера системы дифференциальных уравнений python

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

Необходимо решить систему уравнений (на изображении) методом Эйлера на отрезке [0, 1].

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
from math import * def f1(x,y1,y2): return (x^2+y1^2)/y2^2 def f2(x,y1,y2): return x+y1+y2 class CF: def __init__(self,n,f): self.n,self.f=n,f def step(self,x,h,y1,y2): y[self.n]+=h*self.f(x,y1,y2) a=0 b=1 n=100.0 h=(b-a)/n x=a l=4 y=[0.0,0.0] F=[f1,f2] Y=[] for i in range(l): Y+=[CF(i,F[i])] while xb: for i in Y: i.step(x,h,y1,y2) x+=h print (x,y1,y2)

В строке 23 выдаёт следующую ошибку: for i in range(l): Y+=[CF(i,F[i]) IndexError: list index out of range

Подскажите, пожалуйста, в чём проблема и как её исправить.
Спасибо!

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

Задача Коши для системы уравнений (метод Эйлера). Ошибка в решении
Здравствуйте! Необходимо решить систему ОДУ. Исходные данные: E2 = 5; Cb = 2 10^-12; C1 =.

Решение системы дифф.уравнений. Метод Эйлера
Добрый день, хотел бы обратиться за помощью. Необходимо написать программу на PascalABC.NET для.

Метод Эйлера для дифференциальных уравнений.
Здравствуйте, помогите пожалуйста разобраться. Дано система дифференциальных уравнений, нада.

Эксперт Python

Safoks, ты это сам придумал, я про синтаксис?

Добавлено через 3 минуты
Цикл от 0 до 4, а в списке две функции.

ЦитатаСообщение от Safoks Посмотреть сообщение

l=4 . F=[f1,f2] . for i in range(l): Y+=[CF(i ,F[i])]

ЦитатаСообщение от Safoks Посмотреть сообщение

DmFat, а слона-то я и не приметил, спасибо!

Переделываю чужой код, уже глаз замылился

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

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

Метод Эйлера для системы ДУ
Нужен алгоритм реализации метода Эйлера для системы дифференциальных уравнений. К примеру для.

Программа для решения системы двух дифференцальных уравнений методом Эйлера
Составить блок-схему и программу решения системы двух дифференцальных уравнений на языке Turbo.

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

Написать подпрограмму, реализующую метод Эйлера для системы ДУ 1-го порядка
Форумчане, подсобите, пожалуйста, пропустил задание в лабораторке, не понимаю, как сделать это. .

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Differential Equations Course Assignment

mdmxfry/DE-methods

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Variant 19 (Sukach Maxim, BS17-03)

В итоге, наше решение принимает вид:

Метод Эйлера дает возможность приближенно выразить функцию теоретически с любой наперед заданной точностью. Суть метода Эйлера в пошаговом вычислении значений решения y=y(x) дифференциального уравнения вида y’=f(x,y) с начальным условием (x0;y0). Метод Эйлера является методом 1-го порядка точности и называется методом ломаных.

Для вычисления используются следующие формулы:

def next_y(xi, yi): return yi + self.h * self.f(xi, yi) ys = [] xs = np.arange(x0 + h, xf + h, h) # вектор всех значений x for x in xs: ys.append(y) y = next_y(x, y) # В результате ys будет содержать все значения метода Эйлера 

Метод Эйлера и точное решение при x0 = 0, xf = 9, y0 = 1, h = 0.1

Метод Эйлера и точное решение при x0 = 0, xf = 3, y0 = 1, h = 0.1

Метод Эйлера и точное решение при x0 = 0, xf = 1, y0 = 1, h = 0.1

Усовершенствованный метод Эйлера

Суть усовершенствованного метода Эйлера в пошаговом вычислении значений решения y=y(x) дифференциального уравнения вида y’=f(x,y) с начальным условием (x0;y0). Усовершенствованный метод Эйлера является методом 2-го порядка точности и называется модифицированным методом Эйлера.

Разница между данным методом и методом Эйлера минимальна и заключается в использовании следующих формул:

# Заменяем next_y функцию на эту: def next_y(xi, yi): h2 = h / 2 delta_y = h * f(xi + h2, yi + h2 * f(xi, yi)) return yi + delta_y 

Усовершенствованный Метод Эйлера и точное решение при
x0 = 0, xf = 9, y0 = 1, h = 0.1

Усовершенствованный Метод Эйлера и точное решение при
x0 = 0, xf = 3, y0 = 1, h = 0.1

Усовершенствованный Метод Эйлера и точное решение при
x0 = 0, xf = 1, y0 = 1, h = 0.1

Классический метод Рунге-Кутты

Суть метода Рунге-Кутты в пошаговом вычислении значений решения y=y(x) дифференциального уравнения вида y’=f(x,y) с начальным условием (x0;y0). Классический метод Рунге-Кутты является методом 4-го порядка точности и называется методом Рунге-Кутты 4-го порядка точности.

# Заменяем next_y функцию на эту: def next_y(xi, yi): h2 = h / 2 k1 = f(xi, yi) k2 = f(xi + h2, yi + h2 * k1) k3 = f(xi + h2, yi + h2 * k2) k4 = f(xi + h, yi + h * k3) return yi + (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4) 

Классический метод Рунге-Кутты и точное решение при x0 = 0, xf = 9, y0 = 1, h = 0.1

Классический метод Рунге-Кутты и точное решение при x0 = 0, xf = 3, y0 = 1, h = 0.1

Классический метод Рунге-Кутты и точное решение при x0 = 0, xf = 1, y0 = 1, h = 0.1

Сравнение методов для заданной задачи

Размер ошибки всех методов на промежутке [0, 9] с шагом 0.1

Размер ошибки всех методов на промежутке [0, 3] с шагом 0.1

Размер ошибки всех методов на промежутке [0, 1] с шагом 0.1

Очевидно что, классический метод Рунге-Кутты справляется с задачей аппроксимации в случае данного уравнения намного лучше чем Метод Эйлера и Усовершенствованный метод Эйлера.

График глобальной средней ошибки

Глобальная ошибка в зависимости от размера шага H на промежутке от 0.01 до 0.91 для x0 = 1, xf = 9

  1. Установить Python3
  2. Все пакеты необходимые для работы находятся в requirements.txt matplotlib
    numpy
  3. Запустить run.py в корневой директории проекта.

Все настройки находятся в run.py в виде констант (строки 12-16). configparser очень не хотелось подключать. После запуска скрипт покажет 6 графиков (в диком разрешении, там ничего не видно толком) и сохранит их нормальные версии (dpi=300) в папке results.

Latex Редактор: https://www.codecogs.com/latex/eqneditor.php
Метод Эйлера: Wikipedia
Усовершенствованный метод Эйлера: Mathprofi (кык)
Метод Рунге — Кутты: Wikipedia

About

Differential Equations Course Assignment

Источник

Читайте также:  Java ide android studio
Оцените статью