Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Сибирский государственный университет телекоммуникаций и информатики Уральский технический институт с

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

Федеральное агентство связи

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

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

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

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

Выполнила: студентка гр. МЕ-71

Долматова. К. А

Проверила: Минина Е.Е.

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

Содержание:

Введение………………………………………………………………….3

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

2. Описание методов решения…………………………………………..5

2. 1. Суть задачи………………………………………………………….5

2. 2. Геометрический смысл задачи…………………………………….5

2. 3. Численные методы решения задачи Коши……………………….6

2.4Метод Эйлера             ……………………………….7-9

2. 5. Метод Рунге-Кутта 4-го порядка………………………………9-10

2. 6. Решение поставленной задачи методами Эйлера и Рунге-Кутта 4го порядка…………………………………………………………….11

2. 6. 1. Метод Эйлера           ……….……………………11

2. 6. 2. Метод Рунге-Кутта 4-го порядка ……………………………12

3. Алгоритм решения задачи…………………………………………...13

3. 1. Алгоритмы подпрограмм.………………………………………....13

3. 1. 1. Подпрограмма метода Эйлера                    ……………………..13

3. 1. 2. Подпрограмма метода Рунге-Кутта 4-го порядка ………..14

3. 1. 3. Подпрограмма общего решения ………..…………………15

3. 2. Алгоритм функции…………………………………………………15

3. 3. Алгоритм программы…………………………………16-18

4. Форма программы………………………………………………19-20

5. Листинг программы………………………………………………21-23

6. Решение задачи в MathCad…………………………………………..24

Заключение………………………………………………………………25

2

Введение.

Курсовая работа является первой самостоятельной работой в процессе  моего обучения. Она ставит своей целью закрепить знания по дисциплине “Информатика”. Тема данной курсовой “Визуализация численных методов. Решение обыкновенных дифференциальных уравнений”.

Дифференциальным называется уравнение, содержащее одну или несколько производных.

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

Для решения таких уравнений лучше всего использовать языки программирования, так как они более точно могут найти решение того или иного уравнения.

Целью данной работы является решение задачи Коши для дифференциального уравнения 1-го порядка.

Основные задачи, которые я для себя поставила это:

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

2.На основе данных методов найти точки для построения графика

3. Написать программу на языке программирования VusuaiBasic;

4. Проверить решение задачи  в MathCad.              

3

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

Решить методами Эйлера и Эйлера модифицированного задачу Коши для дифференциального уравнения 1-го порядка на отрезке [X0; Xk] с шагом h и начальным условием: Y(X0) = Y0.

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

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, используемого в общем решении.

  

Дифференциальное уравнение

X0

Xk

h

Y0

Общее решение

y=-0.05*y

1

2

0.1

2

y=c*exp(- 0.05*x)

4
2. Описание методов решения

2. 1. Суть задачи

Чтобы решить обыкновенное дифференциальное уравнение, необходимо знать значения зависимой переменной и (или) её производных при некоторых значениях независимой переменной. Если эти дополнительные условия задаются при одном значении независимой переменной, то такая задача называется задачей с начальными условиями, или задачей Коши. Часто в задаче Коши в роли независимой переменной выступает время.

Задачу Коши можно сформулировать следующим образом:

Пусть дано дифференциальное уравнение  и начальное условие y(x0) = у0. Требуется найти функцию у(x), удовлетворяющую как указанному уравнению, так и начальному условию.

Численное решение задачи Коши сводится к табулированию искомой функции.

График решения дифференциального уравнения называется интегральной кривой.

2. 2. Геометрический смысл задачи

y’ = f(x,y)  - тангенс угла наклона касательной к графику решения в точке (х, у) к оси 0Х, - угловой коэффициент (рис. 1).

Рисунок 1. Геометрический смысл задачи Коши.

Существование решения:

Если правая часть f(x, y) непрерывна в некоторой области R, определяемой неравенствами

|x-x0| < а; |y-y0| < b,

5

то существует, по меньшей мере, одно решение у = у(х), определённое в окрестности |х – х0| < h, где h - положительное число.

Это решение единственно, если в R выполнено условие Липшица

|f(x,y)-f(x,y)| ≤N|y-y|(x,y),

где N - некоторая постоянная (константа Липшица), зависящая, в общем случае, от а и b. Если f(x, у) имеет ограниченную производную

fy(x, y) в R, то можно положить N = мах |fy(х, у)| при (х, y) принадлежащим R.

2. 3. Численные методы решения задачи Коши

При использовании численных методов выполняется замена отрезка [х0, X] - области непрерывного изменения аргумента х множеством . состоящего из конечного числа точек х0 < х1 < ... < xn = Х - сеткой.

При этом xi называют узлами сетки.

Во многих методах используются равномерные сетки с шагом:

Задача Коши, определённая ранее на непрерывном отрезке [х0, X], заменяется её дискретным аналогом - системой уравнений, решая которую можно последовательно найти значения y1, y2,…,yn - приближённые значения функции в узлах сетки.

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

Одношаговые методы, в которых для нахождения следующей точки на
кривой у =
f(x) требуется информация лишь об одном предыдущем шаге.
Одношаговыми являются метод Эйлера и методы Рунге - Кутта.

Методы прогноза и коррекции (многошаговые), в которых для отыскания следующей точки кривой у = f(x) требуется информация более чем об одной из  предыдущих точек.   Чтобы  получить достаточно точное  численное значение, часто прибегают к итерации. К числу таких методов относятся методы Милна, Адамса - Башфорта и Хемминга.

Явные методы, в которых функция Ф не зависит от yn+1.

Неявные методы, в которых функция Ф зависит от yn+1.

6

2. 4. Метод Эйлера.

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

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

Пусть дано дифференциальное уравнение первого порядка:

Y’ = f(x, y)

с начальным условием

y(x0) = y0

Выберем шаг h и введём обозначения:

xi = х0 + ih  и yi = y(xi),   где   i = 0, 1, 2, ...,

xi - узлы сетки,

yi - значение интегральной функции в узлах.

Иллюстрации к решению приведены на рисунке 2.

Проведем прямую АВ через точку (xi, yi) под углом α. При этом tg α = f(xi, yi)

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

Тогда yi+1 = yi + Δy

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

Приравняем правые части tg α = f(xi, yi) и . Получим

Отсюда Δу = hf(xi, yi).

Подставим в это выражение формулу yi+1 = yi + Δy, а затем преобразуем его. В результате получаем формулу расчета очередной точки интегральной функции:

.

7

Рисунок 2. Метод Эйлера.

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

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

F(x, у) - заданная функция – должна

быть описана отдельно.

Входные параметры:

Х0, XK—начальное и конечное

значения независимой переменной;

Y0 – значение y0 из начального условия

y(x0) = y0;

8

N - количество отрезков разбиения;

Выходные параметры:

У - массив значений искомого решения

в узлах сетки.

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

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

2.5 Метод Рунге-Кутта 4 порядка

Пусть дано дифференциальное уравнение первого порядка   с начальным условием y(x0)=y0.   Выберем шаг h и введем обозначения:

xi = x0 + ih  и yi = y(xi),   где   i = 0, 1, 2, ... .

Аналогично описанному выше методу производится решение

дифференциального уравнения. Отличие состоит в делении шага на 4 части.

         Согласно методу Рунге-Кутта четвертого порядка, последовательные значения yi   искомой функции y определяются по формуле:

yi+1 = yi +∆yi                где i = 0, 1, 2 ...

             ∆y=(k1+2*k2+2*k3+k4)/6                           

                    

a числа k1, k2 ,k3, k4 на каждом шаге вычисляются по формулам:

k1  = h*f(xi, yi )

k2  = f (xi +h/2, yi +k1 /2)*h

k3  = F(xi +h/2, yi +k2 /2)*h

k4  = F(xi +h, yi +k3 )*h

Это явный четырехэтапный метод 4 порядка точности.

9

Блок-схема процедуры решения дифференциального уравнения методом Рунге-Кутта приведена на рисунке 6.

F(x, у) - заданная функция - должна

быть описана отдельно.

Входные параметры:
Х0,
XК - начальное и конечное

значения независимой

переменной;

Y0 – значение y0 из начального условия

y(x0)=y0;

N - количество отрезков разбиения;

Выходные параметры:

Y - массив значений искомого решения

в узлах сетки.

10

2.6 Решение поставленной задачи методами Эйлера и Рунге-Кутта 4го порядка

2.6.1 Расчет первой точки методом Эйлера

1.Строим оси координат

2.Отмечаем начальную точку интегральной  кривой А(х0,у0)

3.Ищем угол наклона касательной к графику в точке А(1;2)

y’(x0) = f(x0;y0)

α0 = arctg(f(x0;y0))

α0 = arctg((-0.05*2)) = arctg(-0.1)

4.Строим касательную  l0 в т. А под углом

5.Находим х1 по формуле:

x1=x0+i*h

x1=1+1*0.1=1.1

6. Проводим прямую х=хi=0.2 до пересечения отмеченной точки В(xi,yi) c прямой l0

7.Ищем у у т.В

x=xi-x0=h

f(x0,y0)=(yi-y0)*hyi=y0+h*(f(x0,y0))=2+0.1*1=2.1 т.В имеет координаты (1.1,2.1)

11

2.6.2 Расчет первой точки методом Рунге-Кутта 4го порядка

1. Строим оси координат;

2. Отмечаем А(1; 2) – первую точку интегральной кривой;

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

     

4. Строим касательную l0 в точке А под углом α0;

5. Находим х1 по формуле:

    x1=x0+i*h

    x1=1+1*0.1=1.1

Находим по формулам:

   K1=0.1*(1,2)=-0.05*2=-0.1

   K2=0.1*((1+0.1)/2;2+(-0.1))=1.05*1.9=0.1995

   K3=0.1*(1+0.1/2;2+0.1995)=0.2301

   K4=0.1(1+0.1/2;2+0.2301)=0.2341

   y=k=(-0.1+2*0.1995+2*0.2301+0.2341)/6=0.242

   т.В(0.1;0,242)

12

3. Алгоритм решения задачи

3. 1. Алгоритмы подпрограмм

3. 1. 1 Подпрограмма метода Эйлера

 

13

3.1.2 Подпрограмма метода Рунге-Кутта 4 порядка

14

3. 1. 3. Подпрограмма общего решения

 

3. 2. Алгоритм функции

 

15

3. 3. Алгоритм программы

16

                           

17

 

18

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

19

 

20

5. Листинг программы

Dim x() As Single

Dim y() As Single

Dim g() As Single

Dim t() As Single

Private n, i As Integer

Private xk, x0, kx, ky As Single

Private k, k1, k2, k3, k4 As Single

Private h, max, min, y0 As Single

Private Function f(a, b As Single) As Single

f = -0.05 * b * a

End Function

Private Function v(x As Single) As Single

v = (y0 / Exp(-0.05 * x0)) * Exp(-0.05 * x)

End Function

Private Sub Eiler()

ReDim x(n)

ReDim y(n)

y(0) = y0

For i = 0 To n

x(i) = x0 + h * i

Next i

For i = 0 To n - 1

y(i + 1) = y(i) + h * f(x(i), y(i))

MSFlexGrid1.TextMatrix(1, 0) = Str(x0)

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

MSFlexGrid1.TextMatrix(1, 1) = Str(y0)

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

Next i

End Sub

Private Sub Rynge_Kytt()

ReDim g(n)

g(0) = y0

For i = 0 To n

x(i) = x0 + h * i

Next i

For i = 0 To n - 1

k1 = h * f(x(i), g(i))

k2 = h * f(x(i) + h / 2, g(i) + k1 / 2)

k3 = h * f(x(i) + h / 2, g(i) + k2 / 2)

k4 = h * f(x(i) + h, g(i) + k3)

k = (k1 + 2 * k2 + 2 * k3 + k4) / 6

g(i + 1) = g(i) + k

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

MSFlexGrid1.TextMatrix(1, 2) = Str(g(0))                         

                 

                                                                                               

Next i

End Sub

Private Sub Obshee()

ReDim t(n)

For i = 0 To n

t(0) = y0

x(i) = x0 + h * i

t(i) = v(x(i))

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

Next i

End Sub

Private Sub Command1_Click()

x0 = Val(Text1.Text)

xk = Val(Text2.Text)

h = Val(Text3.Text)

y0 = Val(Text4.Text)

n = (xk - x0) / h

MSFlexGrid1.Rows = n + 2

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

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

MSFlexGrid1.TextMatrix(0, 2) = "Рунге-Кутт"

MSFlexGrid1.TextMatrix(0, 3) = "Общее решение"

Label6.Caption = Str(x0)

Label5.Caption = Str(xk)

Eiler

Rynge_Kytt

Obshee

max = y0

min = y0

For i = 0 To n

If y(i) > max Then

max = y(i)

End If

If y(i) < min Then

min = y(i)

End If

If g(i) > max Then

max = g(i)

End If

22

If g(i) < min Then

min = g(i)

End If

If t(i) > max Then

max = t(i)

End If

If t(i) < min Then

min = t(i)

End If

Next i

Label4.Caption = Str(max)

Label7.Caption = Str(min)

kx = (6600 - 960) / (xk - x0)

ky = (5160 - 240) / (max - min)

Picture1.Cls

For i = 1 To n - 1

X1 = 960 + Round(kx * (x(i - 1) - x0))

X2 = 960 + Round(kx * (x(i) - x0))

Y1 = 5160 - Round(ky * (y(i - 1) - min))

Y2 = 5160 - Round(ky * (y(i) - min))

Picture1.Line (X1, Y1)-(X2, Y2), RGB(9999, 0, 0)

X1 = 960 + Round(kx * (x(i - 1) - x0))

X2 = 960 + Round(kx * (x(i) - x0))

Y1 = 5160 - Round(ky * (g(i - 1) - min))

Y2 = 5160 - Round(ky * (g(i) - min))

Picture1.Line (X1, Y1)-(X2, Y2), RGB(0, 9999, 0)

X1 = 960 + Round(kx * (x(i - 1) - x0))

X2 = 960 + Round(kx * (x(i) - x0))

Y1 = 5160 - Round(ky * (t(i - 1) - min))

Y2 = 5160 - Round(ky * (t(i) - min))

Picture1.Line (X1, Y1)-(X2, Y2), RGB(0, 0, 9999)

Next i

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Form_Load()

End Sub

23

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

24

Заключение

По написанию данной  курсовой работы можно сделать некоторые выводы. В ней я описала методы  Эйлера  и Рунге-Кутта четвертого порядка, с  помощью которых была решена задача Коши первого порядка.

Были задействованы такие программы, как Visual Basic и Math Cad, использовались построения блок-схем основных процедур, разработка программного кода(Листинг программы).

Также мы закрепили знания по изученным нам уже ранее программам.

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

25


α

tg(α) = f(x,y)

x = X0 + i ∙ h

i = 0, …, N - 1

h = (Xk – X0)/N

Eiler(X0, Xk, Y0, N, Y)

α

xi+1

хi

O

x

yi

h

yi+1

y=y(x)

B

e

A

y

Yi+1 = Yi + h ∙ F(x, Yi)

End

End

Yi+1= Yi+k

k=(k1+2*k2+2*k3+k4)/6

k4= h*F(x+h, Yi +k3)

=

k3= h*F(x+h/2, Yi +k2/2)

k2=h*F(x+h/2, Yi +k1/2)

            k1=h*F(x,Yi)

x = X0 + i ∙ h

i = 0, …, N-1

h = (Xk – X0)/N

Rynge4(X0, Xk, Y0, N, Y)

Конец

MSFlexGrid1.TextMatrix(1, 0) = Str(x0)

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

MSFlexGrid1.TextMatrix(1, 1) = Str(y0)

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

Конец

y(i + 1) = y(i) + h * f(x(i),y(i))

i = 0, …, n-1

x(i) = x0 + h * i

i = 0, …, n

ReDim x(n )

ReDim y(n )

y(0) = y0

Eiler

Конец

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

MSFlexGrid1.TextMatrix(1, 2) = Str(g(0))

k1 = h * f(x(i), g(i))

k2 = h * f(x(i) + h / 2, g(i) + k1 / 2)

k3 = h * f(x(i) + h / 2, g(i) + k2 / 2)

k4 = h * f(x(i) + h, g(i) + k3)

k = (k1 + 2 * k2 + 2 * k3 + k4) / 6

g(i + 1) = g(i) + k

i = 0, …, n-1

x(i) = x0 + h * i

i = 0, …, n

ReDim g(n)

g(0) = y0

Rynge_Kytt

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

Конец

x(i) = x0 + h * i

t(i) = v(x(i))

i = 0, …, n

ReDim t(n)

t(0) = y0

Obshee

Конец

v = v = (y0 / Exp(-0.05 * x0)) * Exp(-0.05 * x)

V(x)

Конец

f = -0.05*y

f(x,y)

y(i)<min

g(i)=max

g(i) > max

y(i)=min

y(i)=max

y(i) > max

i = 0, … n

Eiler

Rynge_Kytt

Obshee

MSFlexGrid1.Rows = n + 2

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

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

MSFlexGrid1.TextMatrix(0, 2) = "Рунге-Кутта"

MSFlexGrid1.TextMatrix(0, 3) = "Общее решение"

Label6.Caption = Str(x0)

Label5.Caption = Str(xk)

n = (xk - x0) / h

max = y0

min = y0

y0, x0,xk,h

Начало

X1 = 960 + Round(kx * (x(i - 1) - x0))

X2 = 960 + Round(kx * (x(i) - x0))

Y1 = 5160 - Round(ky * (t(i - 1) - min))

Y2 = 5160 - Round(ky * (t(i) - min))

X1 = 960 + Round(kx * (x(i - 1) - x0))

X2 = 960 + Round(kx * (x(i) - x0))

Y1 = 5160 - Round(ky * (g(i - 1) - min))

Y2 = 5160 - Round(ky * (g(i) - min))

X1 = 960 + Round(kx * (x(i - 1) - x0))

X2 = 960 + Round(kx * (x(i) - x0))

Y1 = 5160 - Round(ky * (y(i - 1) - min))

Y2 = 5160 - Round(ky * (y(i) - min))

i = 1, …, n-1

kx = (6600 - 960) / (xk - x0)

ky = (5160 - 240) / (max - min)

Label4.Caption = Str(max)

Label7.Caption = Str(min)

g(i)<min

(i)=min

t(i)=min

t(i) <min

t(i)=max

t(i) > max

Конец

Picture1.Line (X1, Y1)-(X2, Y2), RGB(100, 200, 200)

Picture1.Line (X1, Y1)-(X2, Y2), RGB(400, 300, 300)

Picture1.Line (X1, Y1)-(X2, Y2), RGB(500, 100, 100)

MSFlexGrid1

Picture 1

Label10

Label5

Label6

Label7

Label9

Label4

Command1

Command2

Label1

Label2

Label3

Label8

Text1

Text2

Text3

Text4




1. Утверждаю- Директор РЦНО В
2. і Активтерді~ м~ліктену к~зі орналас~ан жері арнауы мен категориялары бойынша жіктелуі ~азынашылы~ ж~йе
3. вариант ответа или вписывая свой вариант в свободную графу
4. социология Утверждено
5. тематичні вирази за варіантами які наведені в таблиці 2
6. Reform dvocte nd founder of the Essentil Schools Movement Red the following text nd give the title to it then copy out the min ides from the text
7.  Мета роботи Вивчити принцип роботи та будову компактного вимірювального перетворювача SITRNS TF2 з термоме
8. Ивановская государственная текстильная академия ИГТА Кафедра менеджмента КУРСОВА
9. Психодиагностика носит практикоориентированный характер
10. ПОСТОВАЯ СЛУЖБА Правовое положение
11. 1 раз в 7 дней график проведения генеральных уборок утверждённый заведующим отделением; дезинфицирующи
12. Судебноконституционное прав и процесс как отрасль российского права- понятие предмет и структура
13. ТЕМА ТИПОВЫХ ПРИЧИН ОТКЛОНЕНИЙ ФАКТИЧЕСКИХ ПОКАЗАТЕЛЕЙ ОТ БЮДЖЕТНЫХ Функциональ
14. Выпуск продукции в целом по ценам реализации без учета НДС и др
15. й и 9й кавалерийских дивизий румынского кавалерийского корпуса преодолев сопротивление частей Анапского с
16. Задание 1. Проанализируйте акцентуации характера определите какому типу акцентуаций соответствуют типы отн.
17. Слова языка ФФ Фортунатова
18. I Темперамент и характер Потребности интересы и идеалы вообще установки и тенденции личности
19. влетела мама и достав чемодан сказала Собирайся дорогая ты едешь в летний лагерь
20. Феникс Приглашает Вас на авторский тренинг Возвращение радости детства