49788

Визуализация численных методов. Решение обыкновенных дифференциальных уравнений

Курсовая

Информатика, кибернетика и программирование

Дифференциальными называются уравнения, связывающие независимую переменную, искомую функцию и ее производные. Решением ДУ называется функция, которая при подстановке в уравнение обращает его в тождество. Лишь очень немногие из таких уравнений удается решить без помощи вычислительной техники.

Русский

2014-01-15

10.19 MB

18 чел.

Министерство РФ по связи и информатизации

ГОУ ВПО «Сибирский государственный университет

телекоммуникаций и информатики»

Уральский технический институт связи и информатики (филиал)

Кафедра физики, прикладной математики и информатики

КУРСОВАЯ РАБОТА

по информатике

ВАРИАНТ №11:

«Визуализация численных методов.

Решение обыкновенных дифференциальных уравнений».

Исполнитель:

студентка 1 курса

группы ОЕ-71

Костиневич С.И.

Руководитель:

Минина Е.Е

Екатеринбург

2008

Введение

Существует множество технических систем и технологических процессов, характеристики которых непрерывно  меняются со временем t. Такие явления обычно подчиняются физическим законам, которые формулируются в виде дифференциальных уравнений (ДУ).

Дифференциальными называются уравнения, связывающие независимую переменную, искомую функцию и ее производные. Решением ДУ называется функция, которая при подстановке в уравнение обращает его в тождество. Лишь очень немногие из таких уравнений удается решить без помощи вычислительной техники. Поэтому численные методы решения ДУ играют важную роль в практике инженерных расчетов.

Если искомая функция зависит от одной переменной, то ДУ называют обыкновенным; в противном случае – ДУ в частных производных. В данной курсовой работе рассматриваются методы решения обыкновенных ДУ.

Основные цели и задачи работы:

  •  изучение численных методов решения обыкновенных дифференциальных уравнений;
  •  написание программы на языке Visual Basic;
  •  проверка решения с помощью приложения MathCAD.

1. Постановка задачи

Решить методами Эйлера и Эйлера модифицированного задачу Коши для дифференциального уравнения 1-го порядка y'*x=exp(x)-y на отрезке [1; 2] с шагом h=0.1 и начальным условием: Y(1) = 1. Общее решение: y=[exp(x)+1-c]/x

Ответ должен быть получен в виде таблицы результатов:

X

Y(1)

Y(2)

YT

X0

Y0(1)

Y0(2)

Y(X0)

X1

Y1(1)

Y1(2)

Y(X1)

Xk

Yk(1)

Yk(2)

Y(Xk)

Где: Y(1) - решение, полученное методом Эйлера, Y(2) – решение, полученное методом Эйлера модифицированного, YT – точное решение дифференциального уравнения.

Данные таблицы визуализировать на форме в виде графиков.

Перед вычислением последнего столбца таблицы результатов необходимо из начальных условий вычесть значение коэффициента c, используемого в общем решении.

2. Описание используемых методов

В тех случаях, когда решить уравнение сложно или невозможно, используют численные методы (приближенное решение).

В численных методах обязательно должны быть начальные условия, чтобы исключить константу. Численными методами мы должны построить интегральную кривую, т.е. график решения.

2.1. Метод Эйлера

Иногда  этот  метод  называют   методом  Рунге-Кутта  первого   порядка точности.

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

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

  •  Строим оси координат;
  •  Отмечаем точку A(1; 1) – первую точку интегральной кривой;
  •   Ищем угол наклона касательной к графику в точке A:

  •  Строим касательную AB в точке А под углом α0;
  •  Находим х1 по формуле: xi = х0 + ih, где h – шаг интегрирования

x1 = 1 + 1 · 0,1 = 1,1;

  •  Проводим прямую x = x1 = 1,1  до пересечения с прямой AB, отмечаем точку B(x1; y1);
  •  Ищем  y1:

Из прямоугольного треугольника ABC ,

Δy = y1 y0,

 y1 y0= Δx· tg α0

Δx = x1 – x0 = h => y1 = y0 + h · (f(x0; y0)) = 1 + 0,1  f(1;1) = 1 + 0,1 · 1,718 = 1,172

Следовательно, точка B имеет координаты (1,1; 1,172).

Следующую точку будем искать аналогичным способом по формуле расчета очередной точки интегральной функции:

(*)

Рис1. Решение задачи методом Эйлера.

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

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

2.2.  Метод Эйлера модифицированный

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

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

  •  Строим оси координат;
  •  Отмечаем А(1; 1) – первую точку интегральной кривой;
  •  Ищем угол наклона касательной к графику в точке A:

  •  Строим касательную AB в точке А под углом α0;
  •  Находим х1 по формуле: xi = х0 + ih, где h – шаг интегрирования

x1 = 1 + 1 · 0,1 = 1,1;

  •  Делим шаг интегрирования на два отрезка и отмечаем x1/2= x0 + h/2, проводим прямую из этой точки до прямой AB, отмечаем точку B(x1/2; y1/2);
  •  Ищем координаты В:

x1/2 = x0 + h/2 = 1 + 0,1/2 = 1,05

y1/2 = y0 + h/2 · f(x0; y0) = 1 + 0,1/2 · 1,718 = 1,086

Следовательно, точка B имеет координаты (1,05; 1,086);

Ищем угол наклона касательной к графику в точке B:

α1 = arctg(f(x1/2; y1/2)) = arctg(( 1,718– 1,086)/1,05)) = arctg(1,687) = 59,3°

  •  Строим касательную BC в точке B под углом α1;
  •  Проводим прямую x1 = 1,1 до пересечения с прямой BC, отмечаем точку C с координатами (x1; y1);
  •  Ищем y1 :

y1 = y1/2 + h/2(f(x1/2;y1/2)) = 1,086 + 0,1/2 · 1,687 = 1,169

Следовательно, точка C имеет координаты (1,1; 1,169).

yi+1 = yi + hf(xi + h/2, yi + h/2 ∙ f(xi, yi))

Рис2. Решение задачи методом Эйлера модифицированного

3. Блок-схемы основных процедур.

Блок-схема функции.

Блок-схема процедуры решения ДУ методом Эйлера.

Блок-схема процедуры решения ДУ методом Эйлера модифицированного.

 

Блок-схема графика.

Блок схема программы.

4. Формы программы.

Исходный вид формы программы.

Итоговый вид формы программы.

5. Листинг программы на языке Visual Basic.

Private x0, xk, y0, h, max, min, c As Single

Dim x() As Single, Y() As Single, y1() As Single, y2() As Single

Function F(a, b As Single) As Single

F = (Exp(a) - b) / a

End Function

Private Sub Command1_Click()

x0 = Val(Text1.Text)

xk = Val(Text2.Text)

y0 = Val(Text3.Text)

h = Val(Text4.Text)

N = Round((xk - x0) / h)

c = Exp(x0) + 1 - x0 * y0

MSFlexGrid1.Rows = N + 2

MSFlexGrid1.TextMatrix(0, 0) = "X"

MSFlexGrid1.TextMatrix(0, 1) = "Эйлер"

MSFlexGrid1.TextMatrix(0, 2) = "Эйлер М"

MSFlexGrid1.TextMatrix(0, 3) = "Общее"

ReDim x(N), Y(N), y1(N + 1), y2(N + 1)

x(0) = x0

y1(0) = y0

y2(0) = y0

For i = 0 To N

x(i) = x0 + h * i

y1(i + 1) = y1(i) + h * F(x(i), y1(i))

y2(i + 1) = y2(i) + h * F(x(i) + h / 2, y2(i) + h * F(x(i), y2(i)) / 2)

Y(i) = (Exp(x(i)) + 1 - c) / x(i)

MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))

MSFlexGrid1.TextMatrix(i + 1, 1) = Str(y1(i))

MSFlexGrid1.TextMatrix(i + 1, 2) = Str(y2(i))

MSFlexGrid1.TextMatrix(i + 1, 3) = Str(Y(i))

Next i

min = Y(0)

max = Y(0)

For i = 0 To N

If Y(i) < min Then

min = Y(i)

Else

If Y(i) > max Then

max = Y(i)

End If

End If

Next i

Label7.Caption = Str(max)

Label8.Caption = Str(min)

Label9.Caption = Str(x0)

Label10.Caption = Str(xk)

Picture1.Cls

kx = (5280 - 1320) / (xk - x0)

ky = (4320 - 480) / (max - min)

For i = 0 To N - 1

p1 = 1320 + (x(i) - x0) * kx

p2 = 4320 - (y1(i) - min) * ky

p3 = 4320 - (y2(i) - min) * ky

p4 = 4320 - (Y(i) - min) * ky

p5 = 1320 + (x(i + 1) - x0) * kx

p6 = 4320 - (y1(i + 1) - min) * ky

p7 = 4320 - (y2(i + 1) - min) * ky

p8 = 4320 - (Y(i + 1) - min) * ky

Picture1.Line (p1, p2)-(p5, p6), vbYellow

Picture1.Line (p1, p3)-(p5, p7), vbBlue

Picture1.Line (p1, p4)-(p5, p8), vbRed

Next i

End Sub

6. Решение задачи в MathCAD.

Заключение

По окончании работы я научился работать в  среде программирования Visual Basic 6.0. и MathCad.

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

Содержание

Введение

  1.  Постановка задачи
  2.  Описание используемых методов

Метод Эйлера

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

  1.  Блок-схемы основных процедур
  2.  Формы программы
  3.  Листинг программы на языке Visual Basic
  4.  Решение задачи в MathCAD

Заключение


F(a,b)

F=(exp(a)-b)/a

end

Эйлер

h=(xk-x0)/N

i=0,…,N-1

x(i)=x0+h*i

1(i+1)=y1(i)+h*F(x1(i),y1(i))

end

Эйлер М

h=(xk-x0)/N

i=0,…,N-1

x(i)=x0+h*i

Y2(i+1)=y2(i)+h*F(x(i)+h/2,y2(i)+h*F(x(i), y2(i))/2)

end

Graphic

x0, xk, y0, h

N=Round((xk-x0)/h)

MSFlexGrid1.Rows=n+2

MSFlexGrid1.TextMatrix(0,0)=”X”

MSFlexGrid1.TextMatrix(0,1)=”Эйлер

MSFlexGrid1.TextMatrix(0,2)=”Эйлер М

MSFlexGrid1.TextMatrix(0,3)=”Общее

x(0)=x0

y1(0)=y0

y2(0)=y0

c=exp(x0)+1-x0*y0

x(i)=x0+h*i

y1(i+1)=y1(i)+h*F(x(i),y1(i))

For i=0 to N

1

1

y2(i+1)=y2(i)+h*F(x(i)+h/2,y2(i)++h*F(x(i),y2(i))/2

Y(i)=(Exp(x(i))+1-c)/x(i)

min=Y(0)

For i=0 to N

Y(i)<min

min=y(i)

max=Y(0)

For i=0 to N

Y(i)>max

max=Y(i)

kx=(5280-1320)/(xk-x0)

ky=(4320-480)/(max-min)

нет

да

нетт

да

2

2

For i=0 to N-1

p1=1320+(x(i)-x0)*kx

p2=4320-(y1(i)-min)*ky

p3=4320-(y2(i)-min)*ky

p4=4320-(Y(i)-min)*ky

p5=1320+(x(i+1)-x0)*kx

p6=4320-(y1(i+1)-min)*ky

p7=4320-(y2(i+1)-min)*ky

P8=4320-(Y(i+1)-min)*ky

Picture1.Line(p1,p2)-(p5,p6),vbYellow

Picture1.Line(p1,p3)-(p5,p7),vbBlue

Picture1.Line(p1,p4)-(p5,p8),vbRed

end

Programma

x0, xk, y0, h

h=(xk-x0)/N

c=Exp(x0)+1-x0*y0

i=0,…,N

x(i)=x0+h*i

y1(i+1)=y1(i)+h*F(x(i),y1(i))

Y2(i+1)=y2(i)+h*F(x(i)+h/2,    y2(i)+h*F(x(i),y2(i))/2)

Y(i)=(Exp(x(i))+1-c)/x(i)

x(i),y1(i),y2(i),Y(i)

end


 

А также другие работы, которые могут Вас заинтересовать

26359. Государственный переворот 18 брюмера 1799 г. Итоги революции 18.89 KB
  Сийес распустил слух об опасном якобинском заговоре и устроил так что те депутаты совета старейшин на которых он не рассчитывал или которых боялся не попали на заседание в котором предполагалось принять задуманные заговорщиками решения. Собравшиеся депутаты единогласно вотировали перенесение законодательного корпуса в СенКлу где оба совета должны были собраться на другой день не ранее полудня. Бонапарт окружённый генералами и офицерами немедленно отправился на заседание совета где произнес короткую речь с обещанием поддерживать...
26360. Бранденбургско-прусское государство во вт.пол. XVII- первой трети XVIII в. 29.76 KB
  XVII первой трети XVIII в. Социальноэкономическое и политическое развитие Германии в XVIII в. Борьба Пруссии и Австрии за гегемонию в Центральной Европе Господство крепостного права Мекленбург Бранденбург Померания Восточная Пруссия Силезия оставались в XVIII в. Сгон крестьян с земли принимает все более широкие размеры со второй половины XVIII в.
26361. Фридрих II и просвещённый абсолютизм в Пруссии 27.52 KB
  Фридрих II и просвещённый абсолютизм в Пруссии. Фри́дрих II или Фридрих Великий известный также как по прозвищу Старый Фриц нем. Фридрих родился в Берлине 24 января 1712 года при крещении получил имя КарлФридрих. Его отец король Пруссии Фридрих Вильгельм I из династии Гогенцоллернов мать София Доротея Ганноверская дочь короля Англии Георга I.
26362. Просвещенный абсолютизм в Австрии. Реформы Марии-Терезии и Иосифа II 15.02 KB
  Реформы МарииТерезии и Иосифа II. Правление Иосифа II 178090 Сын Марии Терезии Иосиф II ставший соправителем своей матери после 1765 часто вступал с ней в споры по вопросам государственной политики. Демонстрируя просвещенность и добрую волю Иосиф II провозгласил равенство всех подданных перед судом и при сборе налогов. Хотя Иосиф II объявил себя защитником католичества он вел энергичную борьбу с властью папы Римского.
26363. Итальянские войны 1494-1559 г 25.59 KB
  Французские войска вторглись в Италию подчинили Флоренцию и практически не встречая сопротивления в 1495 году заняли Неаполь. 6 июля 1495 года французские войска встретились с армией Венецианской лиги в сражении при Форново и не сумев добиться победы ушли во Францию. В 1496 году испанские войска очистили территорию Италии от французских гарнизонов остававшихся в крепостях а французский гарнизон в Неаполе капитулировал. В 1501 году французские войска вторглись на территорию Неаполя а испанский экспедиционный корпус высадился в Калабрии.
26364. Тридцатилетняя война 1618-1648 г 29.02 KB
  Тридцатилетняя война 16181648 г. Тридцатилетняя война 1618 1648 первый в истории Европы военный конфликт затронувший в той или иной степени практически все европейские страны в том числе и Россию за исключением Швейцарии. Война началась как религиозное столкновение между протестантами и католиками Германии но затем переросла в борьбу против гегемонии Габсбургов в Европе. Последняя значимая религиозная война в Европе породившая вестфальскую систему международных отношений.
26365. Война за испанское наследство 34.66 KB
  Когда же Людовик XIV начал более агрессивно расширять свои территории некоторые европейские державы главным образом Англия и Голландская республика выступили на стороне Священной Римской империи чтобы воспрепятствовать усилению Франции. Другие государства присоединились к союзу против Франции и Испании чтобы попытаться заполучить новые территории или же защитить уже имеющиеся. В результате Филипп V остался королём Испании но лишился права наследовать французский престол что разорвало династический союз корон Франции и Испании. В...
26366. Война за австрийское наследство 17.67 KB
  Претензии сторон После смерти императора Карла VI 20 октября 1740 года его старшая дочь Мария Терезия вступила согласно постановлению Прагматической санкции во владение всеми землями австрийской монархии но её наследственные права стали оспариваться с разных сторон а одновременно с тем заявлены были и разные другие притязания. Прусский король Фридрих II Великий прежде всех воспользовался этим случаем чтобы заявить древние права своего дома на силезские герцогства Лигниц Волау Бриг и Егерндорф и в декабре 1740 года вступил в Силезию....
26367. Семилетняя война 1756-1763 г. и европейская дипломатия вт.пол. XVIII в 62.81 KB
  Первая 1740 1742 и вторая 1744 1748 Силезские войны являются составной частью Войны за австрийское наследство. Североамериканский театр войны называют франкоиндейской войной. Причины войны Первые выстрелы Семилетней войны раздались задолго до её официального объявления и не в Европе а за океаном. Фридрих считая войну с Австрией неизбежной и сознавая ограниченность своих ресурсов сделал ставку на английское золото а также на традиционное влияние Англии на Россию рассчитывая удержать Россию от участия в предстоящей войне и избежать...