Решение дифференциальных уравнений методом Эйлера
Решение дифференциального уравнения численным методом. Исправленный и модифицированный метод Эйлера. Значение метода Эйлера. Описание алгоритма главной программы. Сравнение результатов полученных при использовании программы, а также ручным способом.
Рубрика | Математика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 20.07.2012 |
Размер файла | 310,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Уравнения, содержащие производную функции одной переменной, возникают во многих областях прикладной математики. Вообще говоря, любая физическая ситуация, где рассматривается степень изменения одной переменной по отношению к другой переменной, описывается дифференциальным уравнением, а такие ситуации встречаются довольно часто.
Решение обыкновенных дифференциальных уравнений (нелинейных) первого порядка с начальными данными (задача Коши) - классическая область применения численных методов. Имеется много разностных методов, часть из которых возникла в домашинную эпоху и оказалось пригодным для современных ЭВМ.
В этой программе использовался метод Эйлера, один из самых старых и широко известных методов численного интегрирования дифференциальных уравнений. Этот метод имеет довольно большую ошибку; кроме того, он очень часто оказывается неустойчивым - малая начальная ошибка быстро увеличивается с ростом Х. Поэтому чаще используют более точные методы, такие как: исправленный метод Эйлера и модифицированный метод Эйлера. Нужно, однако, заметить, что метод Эйлера является методом Рунге - Кутта первого порядка.
Метод Эйлера относиться к численным методам, дающим решение в виде таблицы приближенных значений искомой функции у(х). Он является сравнительно грубым и применяется в основном для ориентировочных расчетов. Однако идеи, положенные в основу метода Эйлера, являются исходными для ряда других методов.
Метод Эйлера для обыкновенных дифференциальных уравнений используется для решений многих задач естествознания в качестве математической модели. Например задачи электродинамики системы взаимодействующих тел (в модели материальных точек), задачи химической кинетики, электрических цепей. Ряд важных уравнений в частных производных в случаях, допускающих разделение переменных, приводит к задачам для обыкновенных дифференциальных уравнений - это, как правило, краевые задачи (задачи о собственных колебаниях упругих балок и пластин, определение спектра собственных значений энергии частицы в сферически-симметричных полях и многое другое).
1. Постановка задачи
1.1 Метод Эйлера
Решить дифференциальное уравнение у/=f (x, y) численным методом - это значит для заданной последовательности аргументов х0, х1…, хn и числа у0, не определяя функцию у=F(x), найти такие значения у1, у2,…, уn, что уi=F(xi) (i=1,2,…, n) и F(x0)=y0.
Таким образом, численные методы позволяют вместо нахождения функции У=F(x) получить таблицу значений этой функции для заданной последовательности аргументов. Величина h=xk-xk-1 называется шагом интегрирования.
Метод Эйлера относится к численным методам, дающим решение в виде таблицы приближенных значений искомой функции у(х). Он является сравнительно грубым и применяется в основном для ориентировочных расчетов. Однако идеи, положенные в основу метода Эйлера, являются исходными для ряда других методов.
Рассмотрим дифференциальное уравнение первого порядка
y/=f (x, y) (1)
с начальным условием
x=x0, y(x0)=y0 (2)
Требуется найти решение уравнения (1) на отрезке [а, b].
Разобьем отрезок [a, b] на n равных частей и получим последовательность х0, х1, х2,…, хn, где xi=x0+ih (i=0,1,…, n), а h=(b-a)/n-шаг интегрирования.
В методе Эйлера приближенные значения у(хi)yi вычисляются последовательно по формулам уi+hf(xi, yi) (i=0,1,2…).
При этом искомая интегральная кривая у=у(х), проходящая через точку М0(х0, у0), заменяется ломаной М0М1М2… с вершинами Мi(xi, yi) (i=0,1,2,…); каждое звено МiMi+1 этой ломаной, называемой ломаной Эйлера, имеет направление, совпадающее с направлением той интегральной кривой уравнения (1), которая проходит через точку Мi, смотри рисунок 1.
Рисунок 1
Если правая часть уравнения (1) в некотором прямоугольнике R {|x-x0|a, |y-y0|b} удовлетворяет условиям:
|f (x, y1) - f (x, y2)| N|y1-y2| (N=const),
|df/dx|=|df/dx+f (df/dy)| M (M=const), то имеет место следующая оценка погрешности:
|y(xn) - yn| hM/2N[(1+hN)n-1], (3)
где у(хn) - значение точного решения уравнения(1) при х=хn, а уn - приближенное значение, полученное на n-ом шаге.
Формула (3) имеет в основном теоретическое применение. На практике иногда оказывается более удобным двойной просчет: сначала расчет ведется с шагом h, затем шаг дробят и повторный расчет ведется с шагом h/2. Погрешность более точного значения уn* оценивается формулой
|yn-y(xn)||yn*-yn|. (4)
Метод Эйлера легко распространяется на системы дифференциальных уравнений и на дифференциальные уравнения высших порядков. Последние должны быть предварительно приведены к системе дифференциальных уравнений первого порядка.
1.2 Исправленный метод Эйлера
В исправленном методе Эйлера мы находим средний тангенс наклона касательной для двух точек: xm, ym и xm+h, ym+hy'm. Последняя точка есть та самая, которая в простом методе обозначалась xm+1, ym+1. Геометрический процесс нахождения точки xm+1, ym+1 можно проследить по рисунку 2. С помощью метода Эйлера находится точка xm+h, ym+hy'm, лежащая на прямой L1. В этой точке снова вычисляется тангенс угла наклона касательной, на рисунке этому значению соответствует прямая L2. Усреднение двух тангенсов дает прямую L'3. Наконец, через точку xm, ym мы проводим прямую L3 параллельную L'3. Точка, в которой прямая L3 пересечется с ординатой, восстановленной из x= xm+1=xm+h, и будет искомой точкой y= ym+1= ym+hy'm. Тангенс угла наклона L3 равен:
F(xm, ym)=1/2 [f(xm, ym)+f(xm+h, ym+hy'm)], (5)
где ym = f(xm, ym) (6)
Уравнение линии L3 при этом записывается в виде:
y = ym + (x - xm)*F(xm) (7)
так что:
ym+1 = ym + h*F(xm) (8)
Соотношения 5, 6, 7 и 8 описывают исправленный метод Эйлера. (рис. 2)
Размещено на http://www.allbest.ru/
Рисунок 2
1.3 Модифицированный метод Эйлера
Этот метод более точен. Рассмотрим дифференциальное уравнение (1) с начальным условием y(x0)=y0. Разобьем наш участок интегрирования на n равных частей. На малом участке [x0, x0+h] интегральную кривую заменим прямой линией. Получаем точку Мк(хк, ук).
Через Мк проводим касательную: y=yк=f(xk, yk) (x-xk). Делим отрезок (xк, xк1) пополам:
xh+k/=xk+h/2=xk+1/2 (9)
yh+k/=yk+f(xk, yk) h/2=yk+yk+1/2 (10)
Получаем точку Nk/. В этой точке строим следующую касательную:
y(xk+1/2)=f(xk+1/2, yk+1/2)=бk (11)
Из точки Мк проводим прямую с угловым коэффициентом бк и определяем точку пересечения этой прямой с прямой xк1. Получаем точку Мк/. В качестве ук+1 принимаем ординату точки Мк/. Тогда:
yк+1=yк+бкh
xk+1=xk+h
бk=f(xk+h/2, xk+f(xk, yk) h/2) (12)
yk=yk-1+f(xk-1, yk-1) h
Эти формулы называются рекуррентными формулами метода Эйлера.
Сначала вычисляют вспомогательные значения искомой функции yк+1/2 в точках xк+1/2, затем находят значение правой части уравнения (1) в средней точке y/k+1/2=f(xk+1/2, yk+1/2) и определяют yк+1.
1.4 Значение метода Эйлера
Метод Эйлера являлся исторически первым методом численного решения задачи Коши. О. Коши использовал этот метод для доказательства существования решения задачи Коши. Ввиду невысокой точности и вычислительной неустойчивости для практического нахождения решений задачи Коши метод Эйлера применяется редко. Однако в виду своей простоты метод Эйлера находит свое применение в теоретических исследованиях дифференциальных уравнений, задач вариационного исчисления и ряда других математических проблем.
2. Описание алгоритмов решения задачи
2.1 Описание переменных
Наименование |
Тип |
Описание |
|
Входные данные |
|||
Xi |
double |
Начальное значение (x) интервала вычисления |
|
Xkon |
double |
Конечное значение (x) интервала вычисления |
|
Yi |
double |
Начальное значение y |
|
Выходные данные |
|||
h |
double |
Фиксированное приращение аргумента (x) |
|
res |
double |
Расчётное значение уравнение y'=F (x, y) в точке (x) |
|
Промежуточные |
|||
i |
integer |
Счётчик цикла |
2.2 Блок-схема главного модуля
Размещено на http://www.allbest.ru/
2.3 Описание алгоритма главной программы
Номер блока |
Описание |
|
1 |
Ввод начального и конечного значений интервала вычисления уравнения, количество шагов, начальное значение у, а также коэффициенты при kx и ky. |
|
2 |
Вычисление фиксированного приращения аргумента х |
|
3 |
Цикл с шагом 1 и конечным значением не превышающим количество шагов, который высчитывает значение y на определённом интервале |
|
4 |
Функция для расчёта уравнения вида y'=f (x, y); |
|
5 |
Вывод результатов на интервале X |
2.4 Блок-схема функции «func»
Размещено на http://www.allbest.ru/
2.5 Описание блок - схемы функции «func»
Номер блока |
Описание |
|
1 |
Вычисление: функции f1 с подстановкой начальных значений; промежуточных значений Yprom и Xprom, значения a для вычисления f (Xprom, Yprom) и расчёт результатов функции и переход на следующий шаг. |
|
2 |
Приращение аргумента x на h |
|
3 |
Вывод результатов уравнения и интервала |
3. Описание языка программирования
Язык программирования С++
С++ - это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.
В С++ нет типов данных высокого уровня и нет первичных операций высокого уровня. В нем нет, например, матричного типа с операцией обращения или типа строка с операцией конкатенации. Если пользователю понадобятся подобные типы, их можно определить в самом языке. По сути дела, основное, чем занимается программирование на С++ - это определение универсальных и специально-прикладных типов. Хорошо разработанный тип, определяемый пользователем, отличается от встроенного типа только способом определения, но не способом использования.
Реализация С++ очень легко переносима. Однако есть полные основания использовать С++ в среде, где имеется гораздо более существенная поддержка. Такие средства, как динамическая загрузка, пошаговая трансляция и база данных определений типов могут с пользой применяться без воздействия на язык.
Типы и средства сокрытия данных в С++ опираются на проводимый во время компиляции анализ программ с целью предотвращения случайного искажения данных. Они не обеспечивают секретности или защиты от умышленного нарушения правил. Однако эти средства можно использовать без ограничений, что не приводит к дополнительным расходам времени на выполнение или пространства памяти.
Компилятор Microsoft C++ и среда разработки Microsoft Visual Studio
В качестве компилятора для разработки приложения был выбран Microsoft C++ по следующим причинам:
практически полная совместимость со стандартом ANSI C++;
наличие удобной среды разработки Microsoft Visual Studio;
наличие отличной документации;
высокая скорость работы результирующих приложений;
совместимость разработанных приложений с большим количеством широко распространенных операционных систем;
достаточная скорость компиляции.
3.1 Описание программы
Разработанное приложение поставляется в виде 2-ух файлов:
1. реш_диф_уров.cpp - исходный код программы на языке C++;
2. реш_диф_уров.exe - исполняемый файл.
Для выполнения исполняемого файла необходима одна из ниже перечисленных операционных систем:
Microsoft Windows 3.11+Win32s;
Microsoft Windows 95/98/Me;
Microsoft Windows NT/2000/XP/2003 - клиентская или серверная версия.
Программа не требует предварительной установки и может быть сразу же запущена на выполнение.
Исходный код приложения может быть откомпилирован в любом ANSI или POSIX совместимом компиляторе С++ для получения выполнимой программы. Для успешной компиляции требуется наличие стандартной библиотеки «iostream».
3.2 Руководство пользователя
При вычислении программа на первом шаге берёт начальные значения для вычисления, а на последующих берёт значения, полученные с предыдущих шагов.
С использованием данной программы намного упростилась работа пользователя. Пользователь просто вводит интервал на котором должен вычисляться пример, количество шагов, начальное значение и коэффициенты переменных, далее программа выдаёт уже готовое решение данного примера.
3.3 Контрольный пример
Данный метод протестирован на контрольном примере и реализован с помощью языка программирования С++.
В результате вычислений контрольного примера вида y'=2x+y с интервалом [0,1], количеством шагов равному 5 и начальным условием у равным 1, с помощью программы, получились результаты, представленные на рис. 4.
Рис. 4. Экран с результатами выполнения программы
Можно сделать вывод, что точность вычисления данного метода зависит от количества выбранных шагов: чем больше шагов, тем меньше фиксированное приращение, а следовательно она более точно вычисляет значение всего интервала.
4. Анализ полученных результатов
По результатам программы можно составить таблицу сравнения результатов полученных при использовании программы и результатов, полученных ручным способом:
уравнение эйлер программа дифференциальный
Ручной способ вычисления |
Программный способ вычисления |
|||
Х |
Y |
X |
Y |
|
0 |
0,82 |
0 |
0,82 |
|
0,2 |
0,75 |
0,2 |
0,7516 |
|
0,4 |
0,77 |
0,4 |
0,770248 |
|
0,6 |
0,85 |
0,6 |
0,856793 |
|
0,8 |
0,99 |
0,8 |
0,996299 |
Из приведенного сравнения можно сделать вывод, что один результат отличается от другого тем, что в примере, решенном программным способом ответ вычисляется с наибольшей точностью, чем при ручном способе. Это может быть связано с тем, что в ручном способе результат округляется для удобства вычисления примера.
Решение дифференциальных уравнений методом Эйлера можно также отобразить в графическом виде:
Рис. 5. Графическое изображение решения примера y'=2x+y
Как видно из рис. 3 графиком решения уравнения является кривая, форма которой зависит от количества разбиений интервала.
По результатам выполненной работы можно сделать вывод, что решение дифференциальных уравнений методом Эйлера является методом вычисления со средней точностью и точность вычисления данного метода зависит от количества разбиений интервала интегрирования. При сравнении результатов решенными разными способами можно сказать, что данный метод был верно реализован на языке программирования Microsoft Visual C++. Полученные результаты сходятся с небольшой погрешностью.
Заключение
Результатом выполнения курсового проекта является готовый программный продукт, позволяющий решать дифференциальные уравнения 1 порядка по методу Эйлера, демонстрирующий возможности численного решения поставленной задачи с заданной степенью точности.
Данная программа решает заданную пользователем дифференциальное уравнение за минимальный промежуток времени. При этом пользователю предоставляется возможность визуально оценить решение, рассматривая график полученного решения.
К достоинствам программы можно отнести также удобный пользовательский интерфейс, возможность ввода пользовательских дифференциальных уравнений, а также давольно высокая стабильность работы. Однако имеются и некоторые недостатки. К недостаткам программы можно отнести: критичность к вводимым пользователем урававней, отсутствие обработки исключительных событий. Это, естественно, ограничивает возможности программы.
Список литературы
1. Численные методы (анализ, алгебра, обыкновенные дифференциальные уравнения), Н.С. Бахвалов. Главная редакция физико-математической литературы изд-ва «Наука», М., 1975 г.
2. Методы, теории обыкновенных дифференциальных уравнений. Н.И. Гаврилов. Государственное издательство «Высшая школа» Москва-1962 г.
3. В.В. Пак., Ю.Л. Носенко. Высшая математика: Учебник. - Д.: Сталкер, 1997 г.
4. Б.П. Демидович, И.А. Марон Основы вычислительной математике. - М., 1966
5. Загускин В.Л. - Справочник по численным методам решения уравнений. - М.: ФИЗМАТГИЗ, 1960. - 216 с.
6. Либерти, Джесс.
Освой самостоятельно С++ за 21 день, 4-е издание.:Пер с англ.-М.: Издательский дом «Вильямс», 2003.-832 с.
7. П. Нортон, П. Иао «Программирование на С++ в среде Windows» («Диалектика» Киев 2003 г.)
8. Янг М. Microsoft Visual C++ - М.:ЭНТРОП, 2000.
9. Марченко А.И., Марченко Л.А. - Программирование в среде
Turbo Pascal 7.0 - К.: ВЕК+, М.: Бином Универсал, 1998. - 496 с.
10. Высшая математика: Справ. материалы: Книга для учащихся. - М.:
Просвещение, 1988. - 416 с.
Приложение 1
Листинг программы
// реш_диф_уров.cpp: определяет точку входа для консольного приложения.
//
#include «stdafx.h»
int _tmain (int argc, _TCHAR* argv[])
{
return 0;
}
#include<iostream>
using namespace std;
void func (double& Xi, double& Yi, double kx, double ky, double h);
int main()
{
double h, Xi, Yi, Xkon, kx, ky;
int n;
cout<<»\t»<<»\t»<< "************************************************n»;
cout<<»\t»<<»\t»<<"* * «<<»\n»;
cout<<»\t»<<»\t»<< "* Reshenie difurov 1 poryadka methodom Eulera *"<<»\n»;
cout<<»\t»<<»\t»<< "*************************************************»;
cout<<endl;
cout<< «Vvedite nachaloe znachenie intervala [a, b]=»;
cin>>Xi;
cout<< «Vvedite konechoe znachenie intervala [a, b]=»;
cin>>Xkon;
cout<< «Vvedite chislo shagov=»;
cin>>n;
h=(Xkon - Xi)/n;
cout<<endl;
cout<< «Vvedite nachalnoe uslovie y=»;
cin>>Yi;
cout<< «Vvedite koefitsient pri x=»;
cin>>kx;
cout<< «Vvedite koefitsient pri y=»;
cin>>ky;
cout<<"|Interval|Chislo shagov|Shag prirasheniya|Nacalnoe Y|Uravnenie vida:| «<<»\n»;
cout<< "|-|-|-|-|-|"<<»\n»;
cout<< "|"<<» [«<<Xi<<», «<<Xkon<<»]» <<» |»<<n<<» | "<<h<<» | "<<Yi<<» |"<< «y'="<<kx<< «x»<<»+"<<ky<< «y»<<» | "<<»\n»;
cout<<endl;
cout<<endl;
for (int i=1; i<=n; i++)
{
func (Xi, Yi, kx, ky, h);
cout<<»\n»;
}
return 0;
}
void func (double& Xi, double& Yi, double kx, double ky, double h)
{
double f1, Yprom, a, Xprom;
f1=(kx*Xi)+(ky*Yi);
Yprom=Yi+f1*(h/2);
Xprom=Xi+h/2;
a=kx*Xprom-Yprom;
Yi=Yi+a*h;
cout<<»\t»<<»\t»<< «Interval x="<<Xi<<»\t»<<» Resultat y="<<Yi;
Xi=Xi+h;
}
Размещено на Allbest.ru
Подобные документы
Математическое объяснение метода Эйлера, исправленный и модифицированный методы. Блок-схемы алгоритмов, описание, текст и результаты работы программы. Решение обыкновенных дифференциальных (нелинейных) уравнений первого порядка с начальными данными.
курсовая работа [78,1 K], добавлен 12.06.2010Составление диагональной системы способом прогонки, нахождение решения задачи Коши для дифференциального уравнения на сетке методом Эйлера и классическим методом Рунге-Кутта. Построение кубического сплайна интерполирующей функции равномерного разбиения.
практическая работа [46,1 K], добавлен 06.06.2011Численное решение уравнения методом Эйлера и Рунге-Кутта в Excel. Программа на языке Turbo Pascal. Блок-схема алгоритма. Метод Рунге-Кутта для дифференциального уравнения второго порядка. Модель типа "хищник-жертва" с учетом внутривидового взаимодействия.
курсовая работа [391,5 K], добавлен 01.03.2012Получение точного решения дифференциального уравнения вручную, операторным методом, приближенное решение с помощью рядов (до 5 элемента ряда) на заданном интервале, графическое решение. Относительная и абсолютная погрешность методов Эйлера и Рунге-Кутты.
курсовая работа [990,8 K], добавлен 17.07.2014Решение дифференциальных уравнений. Численный метод для заданной последовательности аргументов. Метод Эйлера относиться к численным методам, дающим решение в виде таблицы приближенных значений искомой функции. Применение шаговых методов решения Коши.
дипломная работа [1,2 M], добавлен 16.12.2008Нахождение интерполяционных многочленов Лагранжа и Ньютона, проходящих через четыре точки заданной функции, сравнение их степенных представлений. Решение нелинейного дифференциального уравнения методом Эйлера. Решение систем алгебраических уравнений.
задача [226,9 K], добавлен 21.06.2009Решение дифференциального уравнения методом Адамса. Нахождение параметров синтезирования регулятора САУ численным методом. Решение дифференциального уравнения неявным численным методом. Анализ системы с использованием критериев Михайлова и Гурвица.
курсовая работа [398,2 K], добавлен 13.07.2010Решение нелинейных уравнений методом касательных (Ньютона), особенности и этапы данного процесса. Механизм интерполирования функции и численное интегрирование. Приближенное решение обыкновенных дифференциальных уравнений первого порядка методом Эйлера.
курсовая работа [508,1 K], добавлен 16.12.2015Характеристики метода Эйлера. Параметры программы, предназначенной для решения систем линейных уравнений и ее логическая структура. Блок-схема программы и этапы ее работы. Проведение анализа результатов тестирования, исходя из графиков интераций.
курсовая работа [866,0 K], добавлен 27.03.2011Решение задачи Коши для дифференциального уравнения. Погрешность приближенных решений. Функция, реализующая явный метод Эйлера. Вычисление погрешности по правилу Рунге. Решение дифференциальных уравнений второго порядка. Условие устойчивости для матрицы.
контрольная работа [177,1 K], добавлен 13.06.2012