Блок-схема метода Эйлера.
Задаются начальные значения величина шага и количество
расчетных точек , как показано на рисунке 17.1. Решение получается в узлах . Вывод результатов предусмотрен на каждом шаге.
Рисунок 17.1 Блок-схема метода Эйлера.
Понятие решения краевой задачи.
Если при решении обыкновенных дифференциальных уравнений
задаются условия для двух значений независимой переменной (на концах рассматриваемого отрезка), то такие задачи называются краевыми.
Рассмотрим линейное дифференциальное уравнение второго порядка:
. (17.1)
Краевая задача состоит в отыскании решения уравнения (17.1) на отрезке [а,b], удовлетворяющего на концах отрезка условиям
; . (17.2)
Граничные условия могут быть заданы не только в частном виде (17.2), но и в общем:
,
. (17.3)
Методы решения краевых задач могут быть:
точные аналитические, приближенные и численные.
Курсовая работа: Решение дифференциальных уравнений по методу Эйлера
Название: Решение дифференциальных уравнений по методу Эйлера Раздел: Рефераты по математике Тип: курсовая работа Добавлен 20:43:28 26 декабря 2010 Похожие работы Просмотров: 1331 Комментариев: 21 Оценило: 3 человек Средний балл: 5 Оценка: неизвестно Скачать | ||||||||||
Nk / y=y(x)
Мк Мк /
Yk+1
Yk
хк хк1/2 xk+h =xk1 X
Получаем точку Nk / . В этой точке строим следующую касательную:
Из точки Мк проводим прямую с угловым коэффициентом αк и определяем точку пересечения этой прямой с прямой xк1 . Получаем точку Мк / . В качестве ук+1 принимаем ординату точки Мк / . Тогда:
Эти формулы называются рекуррентными формулами метода Эйлера.
Сначала вычисляют вспомогательные значения искомой функции yк+1/2 в точках xк+1/2 , затем находят значение правой части уравнения (1) в средней точке
3. Блок-схема алгоритма
где A — начальное значение x, B — конечное значение x, F(x) — значение функции в точке xn , N — количество промежутков, st – выбор операции, C1,C2,C3 – константы для формул, nom — сохраняет номер используемой функции.
На рисунке представлена блок-схема процесса решения дифференциального уравнения методом Эйлера
Подсчитывая каждый раз новое значение уравнения F(x), получаем последовательность значений xn yn , n=1,2,…
По этим значениям строим график.
4. Описание программы
Программа весьма проста. В ней много предусмотрено моментов неправильного ввода данных, о которых программа предупреждает пользователя и сразу же просит повторно ввести данные.
С самого начала программа предоставляет пользователю меню выполняемых функций, которые выделяются при помощи стрелок ↑ и ↓ выбор клавишей Enter:
После запуска программы нужно выбрать Formyla -> Enter, эта опция позволит из предложенного списка формул выбрать одну, по которой компьютер будет производить расчет и строить график. Все предложенные формулы имеют номерацию; чтобы выбрать интересующий вас пример нажмите на цифру равную номеру примера, и сразу же появится новое окно, в котором сверху будет записан ваш пример. Также в окне будет этот же пример но с нулями на месте констант. Под примером будет высвечена большая буква С, это используется для ввода констант. Для этого вам нужно нажать номер константы, он появится, и после знака равно запишите чему она равна (вводятся целые и вещественные значения). По окончании набора нажать Enter. Операцию повторять пока не будут введены все числа. По окончании нажать Esc. После появится строчка «уточните границы изменения Х, от A= до B= » здесь нужно занести данные на каком промежутке абсциссы будет рассматриваться функция. Следующая строчка попросит ввести начальные данные y(A)=. Следующей строчкой будет вопрос: «сохранить данные в файле? Да/Нет» ответить на этот вопрос с помощью клавиш Д и Н (рус), после чего программа вернется в первоначальное меню. Если данные были сохранены (в папке с программой появляется файл form.txt), то в следующий раз чтобы не набирать снова выберите в меню опцию Formyla -> Open in fails и на экране появятся введенные данные с пометкой снизу, сообщая что данные были прочитаны из файла.
Следующая опция Reshenie. После нажатия в окне просят ввести N(целое число) – число промежутков, на которые разделится рассматриваемый участок (ось ОХ). После появится таблица рассчитанных данных (номер точки, значение абсциссы, значение ординаты). При нажатии любой клавиши произойдет переход в меню.
Graphic эта опция позволяет визуально видеть решение, а так же на этом графике прописываются все данные: начальная формула, шаг и промежуток построения графика, масштаб, данные об его изменении(клавишами +(увеличить) и -(уменьшить), а также возможность определить точное значение функции в любой точке.
Опция Exit применяется для выхода из программы.
Результатом выполнения курсового проекта является готовый программный продукт, позволяющий решать дифференциальные уравнения по методу Эйлера, демонстрирующий возможности численного решения поставленной задачи с заданной степенью точности.
Данная программа решает заданную пользователем дифференциальное уравнение за минимальный промежуток времени. При этом пользователю предоставляется возможность визуально оценить решение, рассматривая график полученного решения.
К достоинствам программы можно отнести также удобный пользовательский интерфейс, возможность ввода пользовательских дифференциальных уравнений, а также давольно высокая стабильность работы. Однако имеются и некоторые недостатки. К недостаткам программы можно отнести: критичность к вводимым пользователем урававней, отсутствие обработки исключительных событий. Это, естественно, ограничивает возможности программы.
Список использованной литературы
1. Д. Мак-Кракен, У. Дорн. Численные методы и программирование на фортране. –М.: Мир,1977.-389,396-408 с.
2. А.А. Самарский. Введение в численные методы. – М.:Наука,1987.-176 с.
3. Алгоритмы вычислительной математики: Лабораторный практикум по курсу «Программирование» для студентов 1 — 2-го курсов всех специальностей БГУИР/А.К. Синицын, А.А. Навроцкий.- Мн.: БГУИР, 2002.- 65-69 с.
4. ГОСТ 2.105-95. Общие требования к текстовым документам.
5. ГОСТ 7.32-91. Система стандартов по информации, библиотечному и издательскому делу. Отчет о НИР. Структура и правила оформления.
Приложение 1. Текст программы.
void formyl(int p)
if(p==1) printf(«\n 1. C1*y’ = C2*y + C3*x + C4*x*y»);
else if(p==2) printf(«\n 2. y’/(C1-100) = C2*y + C3*x + (C4+x)*y»);
else if(p==3) printf(«\n 3. pow(e,C1)*y’ = C2*y + C3*cos(x) + (C4+x+y)»);
else if(p==4) printf(«\n 4. C1*sin(x)*y’ = e*C2*y + C3*arcsin(x) + C4*y/x»);
else if(p==5) printf(«\n 5. C1*y’ = sin(C2)*y + tg(C3*x) + C4*ln(x)*y»);
else if(p==6) printf(«\n 6. C1*y’ = y*C2 + C3*sin(x) + C4*cos(x)*y»);
else if(p==7) printf(«\n 7. (C1+C2+C3+C4)*y’ = C2*y + (C3-x) + lg(C4*x)*y»);
else if(p==8) printf(«\n 8. y’/C1 = y/C2 + C3*sin(x) + C4*x*y»);
else if(p==9) printf(«\n 9. sin(C1)*y’ = C2*y + |C3|*x + x*y/C4»);
void formyl2(int p,double C1,double C2,double C3,double C4)
else if(p==2) printf(«y’/(%.2f-100)=%.2f*y+%.2f*x+(%.2f+x)*y»,C1,C2,C3,C4);else if(p==3) printf(«pow(e,%.2f)*y’=%.2f*y+%.2f*cos(x)+(%.2f+x+y)»,C1,C2,C3,C4);
else if(p==4) printf(«%.2f*sin(x)*y’=e*%.2f*y+%.2f*arcsin(x)+%.2f*y/x»,C1,C2,C3,C4);
else if(p==5) printf(«%.2f*y’=sin(%.2f)*y+tg(%.2f*x)+%.2f*ln(x)*y»,C1,C2,C3,C4);
else if(p==6) printf(«%.2f*y’=y*%.2f+%.2f*sin(x)+%.2f*cos(x)*y»,C1,C2,C3,C4);
else if(p==8) printf(«y’/%.2f=y/%.2f+%.2f*sin(x)+%.2f*x*y»,C1,C2,C3,C4);
else if(p==9) printf(«sin(%.2f)*y’=%.2f*y+|%.2f|*x+x*y/%.2f»,C1,C2,C3,C4);
double formyl3(int p,double h,double x,double y,double C1,double C2,double C3,double C4)
else if(p==2) Y=h*(C1-100)*(y*C2+C3*x+(C4+x)*y)+y;
else if(p==3) Y=h*(C2*y+C3*cos(x)+C4+x+y)/exp(C1)+y;
else if(p==4) Y=h*(exp(1)*C2*y+C3*asin(x)+C4*y/x)/(C1*sin(x))+y;
else if(p==5) Y=h*(sin(C2)*y+tan(C3*x)+C4*log10(x)*y)/C1+y;
else if(p==6) Y=h*(y*C2+C3*sin(x)+C4*cos(x)*y)/C1+y;
else if(p==7) Y=h*(C2*y+(C3-x)+log10(C4*x)*y)/(C1+C2+C3+C4)+y;
else if(p==8) Y=h*(y/C2+C3*sin(x)+C4*x*y)*C1+y;
else if(p==9) Y=h*(C2*y+abs(C3)*x+x*y/C4)/sin(C1)+y;
int vv=0,vv1=0; // руководит операциями
int N=0,W; // кол промежутков
int i,j,k; // используются во всех «for»
int nom; // номер примера
int st=4,vst=0; // строчка в меню
double C1,C2,C3,C4; // константы
double M; // масштаб
double xtoch,ytoch; // считает y(x) по графику
double A=0,B=0,ii,jj,kk; // пределы интегрирования
double x[102],y[102]; // главные переменные x,y
int g_driver=9,g_mode=2, g_error;
printf(«\n error=%d, reason=%s\n», g_error, grapherrormsg(g_error));
Метод Эйлера модифицированный
Для уменьшения погрешности вычислений часто используется модифицированный метод Эйлера. Этот метод имеет так же следующие названия: метод Эйлера-Коши или метод Рунге-Кутта второго порядка точности.
Пусть дано дифференциальное уравнение первого порядка
с начальным условием
Выберем шаг h и введём обозначения:
yi— значение интегральной функции в узлах .
При использовании модифицированного метода Эйлера шаг h делится на два отрезка.
Иллюстрации к решению приведены на рисунке 4.
Рисунок 4 — Метод Эйлера модифицированный
Проведем решение в несколько этапов.
2. Через точку А проведем прямую под углом α, где
4. Через точку С проведем прямую под углом α1, где
5. Через точку А проведем прямую, параллельную последней прямой.
7. После проведения вычислений, аналогичных вычислениям, описанным в методе Эйлера, получим формулу для определения значения yi+1:
(6)
Модифицированный метод Эйлера дает меньшую погрешность. На рисунке 4 это хорошо видно. Так величина ε1 характеризует погрешность метода Эйлера, а ε – погрешность метода Эйлера модифицированного.
Блок-схема процедуры решения дифференциального уравнения методом Эйлера модифицированным приведена на рисунке 5.
Рисунок 5 — Блок-схема процедуры решения дифференциального уравнения методом Эйлера модифицированным
Метод Рунге – Кутт а 4-го порядка
Пусть дано дифференциальное уравнение первого порядка
с начальным условием
Выберем шаг h и введём обозначения:
yi— значение интегральной функции в узлах .
Аналогично описанным выше методам производится решение дифференциального уравнения. Отличие состоит в делении шага на 4 части.
Согласно методу Рунге – Кутта четвёртого порядка, последовательные значения yi искомой функции y определяются по формуле:
, i = 0, 1, 2, …
а числа k 1 ( i ) , k 2 ( i ) , k 3 ( i ) , k 4 ( i ) на каждом шаге вычисляются по формулам:
Это явный четырёхэтапный метод четвёртого порядка точности.
Методы Рунге – Кутта легко программируются и обладают значительной точностью и устойчивостью для широкого круга задач.
На рисунке 6 приведена блок-схема процедуры RUNGE ( X 0, XK , Y 0, N , Y ) для решения задачи Коши описанным выше методом Рунге – Кутта.
|
K2 = h * F(x + h/2, Yi + K1 / 2)
K3 = h * F(x + h/2, Yi + K2 / 2)
K4 = h * F(x + h, Yi + K3)
K = (K1 + 2*K2 + 2*K3 + K4) / 6
Рисунок 6 — Блок-схема процедуры RUNGE
На рисунке 7 приведена блок-схема алгоритма основной программы для решения задачи Коши и получения результатов с фиксированным количеством отрезков разбиения N. В основной программе происходит обращение к процедуре RUNGE ( X 0, XK , Y 0, N , Y ), вычисляющей значения искомой функции yj в точках xj методом Рунге – Кутта.
Исходными данными в данной задаче являются:
X0, XK – начальное и конечное значения независимой переменной;
Y0 – значение y 0 из начального условия y ( x 0 ) = y 0;
N – количество отрезков разбиения.
Результаты работы программы выводятся в виде двух столбцов:
X – массив значений узлов сетки;
Y – массив значений искомого решения в соответствующих узлах сетки.
Ввод X0, XK, Y0, N
i=0…N
X=X0+i*h
Вывод X, Yi
Рисунок 7 — Блок-схема алгоритма основной программы для решения задачи Коши с фиксированным количеством отрезков разбиения N
Решение дифференциальных уравнений в среде MathCad
Рисунок 8 — Пример решения дифференциального уравнения методом
Рунге-Кутта 4 порядка в среде MathCad.
Построение графиков функций в среде Visual Basic
Задача табулирования функций и построения их графиков является одной из основных задач в процессе решения обыкновенных дифференциальных уравнений. Рассмотрим эту задачу более подробно.
Задача.
Построить график функции y=sin(x) на отрезке [a,b]. Шаг табулирования принять равным h.
Для построения графика функции в среде Visual Basic удобно воспользоваться некоторыми графическими компонентами.
Рисунок 9 — Расположение основных компонентов в окне General
Компонент Picture Box ( ) используется в качестве контейнера для построения графика. Он представляет собой матрицу из точек (пикселей), причём имеется возможность управлять цветом каждой отдельной точки. Координаты любой точки определяются парой целых чисел – ее порядковым номером в строке Х и порядковым номером строки внутри объекта Y. Таким образом, координаты левого верхнего угла компонента (0, 0). Число точек в строке и число строк определяются размером компонента.
Рисунок 10 — Координаты объекта PictureBox
На рис. 10 показано расположение осей и координаты угловых точек объекта.
Компонент Line ( ) используется для построения осей и отрезков ломаной графика функции.
Суть построения графика сводится к тому, что функцию необходимо представить в виде таблицы (протабулировать), а затем отметить на шаблоне графика точки и соединить их между собой.
Алгоритм построения графика функции приведен на рисунке 12. Алгоритм может быть модифицирован. В частности, некоторые процедуры могут быть объединены, а порядок действий в некоторых случаях может быть изменен.
Рассмотрим алгоритм более подробно.
До реализации алгоритма необходимо описать подпрограмму- функцию для построения графика. Это необходимо для облегчения модификации программы. Если потребуется построение графика другой функции, достаточно будет только изменить подпрограмму.
Так же до построения графика необходимо создать и отредактировать форму. Пример разработки формы приведен на рисунке 11. На форме надо расположить компоненты для ввода исходных данных, компонент для вывода на печать таблицы, командную кнопку, контейнер для размещения графика (PictureBox). Внутри PictureBox надо нарисовать оси координат с помощью прямых линий и расположить метки для записи границ отрезка значений аргумента функции и экстремумов функции на рассматриваемом отрезке.
Ввод исходных данных осуществляется в рассматриваемой программе при нажатии на командную кнопку. Очень часто ввод данных реализуется с помощью компонента TextBox.
Процедуру табулирования функции удобно осуществлять в цикле с параметром, так как известно количество обсчитываемых точек графика. До выполнения процедуры надо задать количество строк таблицы.
Количество строк рассчитывается по формуле k=n+2, где k – количество строк, а n – количество отрезков табулирования. Число строк должно быть больше количества отрезков на 2, так как необходимо учесть начальную точку (нулевую) и строку для записи заголовков столбцов страницы.
В самой процедуре табулирования можно совместить два действия – табулирование и расчет экстремумов. Такой вариант решения приведен в листинге программы на рисунке13.
Основной сложностью построения графика является переход от математического значения функции и аргумента к экранным координатам, используемым для построения графика. При решении этой проблемы необходимо учитывать противоположное направление осей на математическом графике и на объекте PictureBox и необходимость масштабирования картинки.
Коэффициенты масштабирования графика рассчитываются по следующим формулам:
,
где kx — коэффициент масштабирования по оси ОХ,
NPX – количество пикселей объекта PictureBox, отводимых для построения графика по горизонтали,
a – начальное значение отрезка аргумента функции,
b – конечное значение отрезка аргумента функции.
,
где Ky — коэффициент масштабирования по оси ОY,
NPY – количество пикселей объекта PictureBox, отводимых для построения графика по вертикали,
min – минимальное значение функции,
max – максимальное значение функции.
Перевод математических координат текущей точки в экранные производится по формулам:
zx = Round(ox + (x(i) — a) * kx),
zy = Round(oy — (y(i) — Min) * ky),
где zx, zy – экранные координаты текущей точки,
ox, oy — координаты точки пересечения осей в компоненте pictureBox,
x(i), y(i) – математические координаты текущей точки,
kx, ky – коэффициенты масштабирования.
В формуле расчета экранной координаты ординаты текущей точки используется знак «минус» для учета противоположного направления осей (на экране и на графике).
Листинг программы построения графика функции приведен на рисунке 13.
Примеры форм с результатами работы программы для различных исходных данных приведены на рисунках 14 и 15.
Рисунок 11 — Пример разработки формы
Рисунок 12 — Алгоритм построения графика функции
http://www.bestreferat.ru/referat-238024.html
http://lektsia.com/16×3358.html