На бирже курсовых и дипломных проектов можно найти образцы готовых работ или получить помощь в написании уникальных курсовых работ, дипломов, лабораторных работ, контрольных работ, диссертаций, рефератов. Так же вы мажете самостоятельно повысить уникальность своей работы для прохождения проверки на плагиат всего за несколько минут.

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


Курсовик Математическое объяснение метода Эйлера, исправленный и модифицированный методы. Блок-схемы алгоритмов, описание, текст и результаты работы программы. Решение обыкновенных дифференциальных (нелинейных) уравнений первого порядка с начальными данными.

Информация:

Тип работы: Курсовик. Предмет: Математика. Добавлен: 12.06.2010. Сдан: 2010. Уникальность по antiplagiat.ru: --.

Описание (план):


2
Министерство образования Республики Беларусь
Учреждение образования
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра вычислительной математики и программирования
Пояснительная записка
к курсовому проекту
на тему:
«Решение дифференциальных уравнений по методу Эйлера»


Минск 2004
СОДЕРЖАНИЕ:
1. Введение
2. Математическое объяснение метода
2.1 Метод Эйлера
2.2 Исправленный метод Эйлера
2.3 Модифицированный метод Эйлера
3. Блок-схема алгоритма программы
4. Описание программы
Список использованной литературы
Приложение 1 (Текст программы)
Приложение 2 (Результаты работы программы)
1. Введение
Уравнение, содержащие производную функции одной переменной, возникают во многих областях прикладной математики. Вообще говоря, любая физическая ситуация, где рассматривается степень изменения одной переменной по отношению к другой переменной, описывается дифференциальным уравнением, а такие ситуации встречаются довольно часто.
Решение обыкновенных дифференциальных уравнений (нелинейных) первого порядка с начальными данными (задача Коши) - классическая область применения численных методов. Имеется много разностных методов, часть из которых возникла в домашинную эпоху и оказалось пригодным для современных ЭВМ.
В этой программе использовался метод Эйлера, один из самых старых и широко известных методов численного интегрирования дифференциальных уравнений. Этот метод имеет довольно большую ошибку; кроме того, он очень часто оказывается неустойчивым - малая начальная ошибка быстро увеличивается с ростом Х. Поэтому чаще используют более точные методы, такие как: исправленный метод Эйлера и модифицированный метод Эйлера. Нужно, однако, заметить, что метод Эйлера является методом Рунге - Кутта первого порядка.
2. Математическое объяснение метода
2.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…).
При этом искомая интегральная кривая у=у(х), проходящая через точку М00, у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)
Метод Эйлера легко распространяется на системы дифференциальных уравнений и на дифференциальные уравнения высших порядков. Последние должны быть предварительно приведены к системе дифференциальных уравнений первого порядка.
2.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)
2
Рисунок 2.
2.3 Модифицированный метод Эйлера
Этот метод более точен. Рассмотрим дифференциальное уравнение (1) с начальным условием y(x0)=y0. Разобьем наш участок интегрирования на n равных частей. На малом участке [x0,x0+h] интегральную кривую заменим прямой линией. Получаем точку Мккк). (рис. 3)
Y
Nk/ y=y(x)

Мк Мк/
Yk+1
Yk

хк хк1/2 xk+h=xk1 X
Рисунок 3.
Через Мк проводим касательную: 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.
3. Блок-схема алгоритма
где A -- начальное значение x, B -- конечное значение x, F(x) -- значение функции в точке xn, N -- количество промежутков, st - выбор операции, C1,C2,C3 - константы для формул, nom - сохраняет номер используемой функции.
На рисунке представлена блок-схема процесса решения дифференциального уравнения методом Эйлера
Подсчитывая каждый раз новое значение уравнения F(x), получаем последовательность значений xn yn, n=1,2,…
По этим значениям строим график.
4. Описание программы
Программа весьма проста. В ней много предусмотрено моментов неправильного ввода данных, о которых программа предупреждает пользователя и сразу же просит повторно ввести данные.
С самого начала программа предоставляет пользователю меню выполняемых функций, которые выделяются при помощи стрелок ^ и v выбор клавишей Enter:
Formyla -> Enter
-> Open in fails
Reshenie
Graphic
Exit
После запуска программы нужно выбрать 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. Текст программы.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <graphics.h>
#include <math.h>
#include <bios.h>
//---------------------------------------------------------------------------
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)
{
if(p==1) printf("%.2f*y'=%.2f*y+%.2f*x+%.2f*x*y",C1,C2,C3,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==7) printf("(%.2f+%f+%.2f+%.2f)*y'=%.2f*y+(%.2f-x)+lg(%.2f*x)*y",C1,C2,C3,C4,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)
{
double Y;
if(p==1) Y=h*(C2*y+C3*x+C4*x*y)/C1+y;
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;
return(Y);
}
//---------------------------------------------------------------------------
void main(void)
{
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 h,H; // шаг
double A= и т.д.................


Перейти к полному тексту работы



Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.