30062

Изучение основ системы программирования Microsoft Visual Basic и приобретение начальных навыков разработки программного обеспечения для операционных систем Windows

Книга

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

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

Русский

2013-08-22

204.5 KB

3 чел.

PAGE  6

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

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

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

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

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

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

ВИЗУАЛИЗАЦИЯ ЧИСЛЕННЫХ МЕТОДОВ.

РЕШЕНИЕ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ

Выполнил: студент гр. АЕ-61

                                                                                                 Потапов Е. Д.

                                                                                Руководитель: Минина Е.Е.

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

Содержание

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

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

  1.1  Математическая модель..............................................................................4

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

3  Метод Рунге-Кутта 4го порядка …………………………………………..…7

4  Блок схема…. ……………………………………………………………..….. 8

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

6  Проверка в Math Cad………………………………………………………….13

7  Исходная форма………………………………………………………………14

8  Конечная форма……………………………………………………………....15

9  Заключение……………………………………………………………………16

Введение

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

Целью моей работы является изучение основ системы программирования Microsoft  Visual  Basic и приобретение начальных навыков разработки программного обеспечения для операционных систем  Windows.

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

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

1.1  Математическая модель

Дано: y(x+1)=y + 2

y(x0) = y0

y0 = 0

x0 = 0

xk = 0.8

h=0.1

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

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

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

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

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

y(x0) = y0.

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

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

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

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

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

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

tgα = f(xi,yi) (1).

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

Тогда yi+1 = yiy (2).

Из прямоугольного треугольника АВС  (3).

Приравняем правые части (1) и (3). Получим .

Отсюда

Подставим в это выражение формулу (2), а затем преобразуем его. В результате получаем формулу расчета очередной точки интегральной функции:

    (4).

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

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

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

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

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

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

y(x0) = y0.

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

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

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

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

где

,         i = 0, 1, 2, …

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

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

Методы Рунге – Кутта легко программируются и обладают значительной точностью и устойчивостью для широкого круга задач.

 B 

β C D 

γ  δ E

 Рисунок 2.

A α Метод Рунге-

                                                                  Кутта

 

                                               4   Блок схема

 


 

-

+

-

+

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

Dim x(11) As Single, y(11) As Single, y1(11) As Single, y2(11) As Single

Private x0 As Single, y0 As Single, xk As Single, h As Single

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

f = (b + 2) / (a + 1)

End Function

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) = "y"

MSFlexGrid1.TextMatrix(0, 2) = "y1"

MSFlexGrid1.TextMatrix(0, 3) = "y2"

x(0) = x0

y1(0) = y0

y2(0) = y0

Max = y0

Min = y0

For i = 0 To n

x(i) = x0 + i * h

y(i) = Round((x(i) + 1) * 2 - 2, 4)

y1(i + 1) = Round(y1(i) + f(x(i), y1(i)) * h, 4)

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

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

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

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

y2(i + 1) = Round(y2(i) + (k1 + 2 * k2 + 2 * k3 + k4) / 6, 4)

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

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

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

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

If y(i) > Max Then Max = y(i)

If y(i) < Min Then Min = y(i)

If y1(i) > Max Then Max = y1(i)

If y1(i) < Min Then Min = y1(i)

If y2(i) > Max Then Max = y2(i)

If y2(i) < Min Then Min = y2(i)

Next i

For i = 0 To n - 1

kx = (Picture1.Width - 1200) / (xk - x0)

ky = (Picture1.Height - 1000) / (Max - Min)

Label4.Caption = Str(Min)

Label5.Caption = Str(Max)

Label6.Caption = Str(x0)

Label7.Caption = Str(xk)

z1 = Round(720 + (x(i) - x0) * kx)

z2 = Round(5400 - (y(i) - Min) * ky)

z3 = Round(5400 - (y1(i) - Min) * ky)

z4 = Round(5400 - (y2(i) - Min) * ky)

z5 = Round(720 + (x(i + 1) - x0) * kx)

z6 = Round(5400 - (y(i + 1) - Min) * ky)

z7 = Round(5400 - (y1(i + 1) - Min) * ky)

z8 = Round(5400 - (y2(i + 1) - Min) * ky)

Picture1.Line (z1, z2)-(z5, z6), vbRed

Picture1.Line (z1, z3)-(z5, z7), vbBlue

Picture1.Line (z1, z4)-(z5, z8)

Next i

End Sub

Private Sub Command2_Click()

End

End Sub

                                

  1.  
    Проверка
     в MathCad.


7 Исходная форма


8 Конечная форма

                                            


9
Заключение.

Я изучил основы системы программирования Microsoft Visual Basic и приобрел начальные навыки  в разработке программного обеспечения для операционных систем  Windows.

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

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


Line (z1, q3)-(z5, z7)

4

i = 0 … n-1

4

+

 Max = y(i)

x

xi+1

xi

y=y(x)

y

y(i)<min

O

A

B

α

h

yi

yi+1

ε

B

C

 Min = y(i)

Шаблон графика

kx = (Picture1.Width - 1200) / (xk - x0)

ky = (Picture1.Height - 1000) / (Max - Min)

1 111111i

y(i)>Max

      x(i), y(i), y1(i),y2(i)

Y1(i+1)=y1(i)+ f(x(i), y1(i))*h                              

k4= h*f(x(i)+h/2, y2(i)+ k3)

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

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

1

    Начало

x0, xk, y0, h

n = (xk – x0)/h

y(i) = exp(x)(lnx+c)

y2(i+1)=y2(i)+(k1+2*k2+2*k3+k4)/6

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

Max = f(x0,y0)

Min = f(x0,y0)

y2(0) = y0

                                                   i = 0 … n-1

x(i) = x0 + i*h

y1(0) = y0

z8= 5400 - (y2(i + 1) - Min) * ky

z7= 5400 - (y1(i + 1) - Min) * ky

z6= 5400 - (y(i + 1) - Min) * ky

z5 = 720 + (x(i + 1) - x0) * kx

Line (z1, z2)-(z5, z6)

z4 = 5400 - (y2(i) - Min) * ky

z3 = 5400 - (y1(i) - Min) * ky

z2 = 5400 - (y (i) - Min) * ky

z1 = 720 + (x(i) - x0) * kx

     Конец

          Line (z1, z4)-(z5, z8)

1

1

2

3

2

3


 

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

61818. Правило образования вопросительной формы в Present Continuous(Present Progressive) 25.33 KB
  Цель урока: Формирование навыков грамматических структур в речи Задачи урока: Обучающие познакомить с правилом образования вопросительных предложений в Present Continuous(Progressive)...
61819. Искусство оригами. Ветка сакуры 154.5 KB
  Развивать: наблюдательность, малую мускулатуру рук, пространственное воображение – умение читать чертежи, умение следовать устным инструкциям, память, внимание в процессе изготовления модели, творческое воображение, фантазию, чувство вкуса при создании композиции, кругозор учащихся