30070

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

Книга

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

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

Русский

2013-08-22

960 KB

45 чел.

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

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

Курсовая работа по информатике на тему:

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

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

                                                                                              

                                                                                      Выполнил:  Киселёв Д.В.

                                                                   студент 1-го курса

                                                                                      группы СЕ-81                                                                                           

                                                                                      Проверила:  Тюпина О.М.

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

Содержание

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

Глава 1. Постановка задачи и математическая модель……………………….. 4

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

Глава 3. Блок – схемы основных процедур……………………………………. 8

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

Глава 5. Формы проекта….……………………………….…………………….13

Глава 6. Решение задачи в MathCad...………………………………………….15

Заключение……………………………………………………………………….19

Глава 1. Введение

Цель работы: изучение основ системы программирования Microsoft Visual Basic.

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

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

Начальные условия: x0=1, xk=1.4, h = 0.05, y0=2.

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

Результаты вычислений должны содержать:

- точное значение уравнения

- приближённое значение уравнения

- график

Глава 2. Постановка задачи.

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

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

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

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

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

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

   

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

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

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

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

где – N некоторая постоянная (константа  Липшитца), зависящая, в общем случае, от a и b/

если f(x,y) имеет ограниченную производную   в R, то можно положить

N = max  при (x,y) R.

 

Глава 1. Численные методы решения задачи Коши.

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

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

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

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

      

                      
      

     

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

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

Одношаговым методом являются метод Эйлера и методы Рунге – Кутта.

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

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

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

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

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

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

y\ = f(x, y)

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

y(x0) = y0

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

xi = x0 + i*h   и   yi = y(xi )

где i = 0,1,2

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

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

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

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

tg(a) = f(xi, yi)                                       (2)

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

Тогда                                              yi+1 = yi + ^y                                             (3)

Из прямоугольного треугольника АВС tg(a) =  ^y / h                                (4)

Приравняем правые части (2) и (4). Получим  ^y / h = f(xi, yi)

Отсюда                                        ^y = h* f(xi, yi)                   

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

yi+1 = yi + h* f(xi, yi)                         (5)

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

F(x, y) – заданная функция – должна быть описана отдельно.

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

X0, XK – начальное и конечное условие независимой переменной;

Y0 – значение  y0 из начального условия  y(x0) = y0;

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

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

Y – массив значений искомого

 

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

 

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

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

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

y\ = f(x, y)

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

y(x0) = y0

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

xi = x0 + i*h   и   yi = y(xi )

где i =  0,1,2…

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

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

 

При использовании модифицированного метода Эйлера шаг h делится на два отрезка.  Иллюстрации к решению приведены на рисунке 1.

Проведём решение в несколько этапов.

  1.  Обозначим точки:

А (x(i),y(i)), C (x(i)+h/2, y(i)+h/2*f (x(i),y(i))) и B (x(i+1),y(i+1)).

  1.  Через точку А проведём прямую под углом α, где

tgα = f (x(i),y(i))

  1.  На этой прямой найдём точку

С (x(i)+h/2, y(i)+h/2*f(x(i),y(i))).

  1.  Через точку С проведём прямую под углом  α1, где  

                                          

tgα1 = f (x(i)+h/2,y(i)+ h/2*f (x(i),y(i)))

  1.  Через точку А проведём прямую, параллельную последней прямой.

  1.  Найдём точку  B (x(i+1),y(i+1)). Будем считать B(x(i+1),y(i+1)) решением дифференциального уравнения при x = x(i+1)

  1.  После проведения вычислений, аналогичных вычислениям, описанным в методе Эйлера, получим формулу для определения значения y(i+1):

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

Модифицированный метод Эйлера дает меньшую погрешность. На рисунке 2. это хорошо видно. Так величина  характеризует погрешность метода Эйлера, а – погрешность метода Эйлера Модифицированного.

F(x, y) – заданная функция – должна быть описана отдельно.

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

X0, XK – начальное и конечное условие независимой переменной;

Y0 – значение  y0 из начального условия  y(x0) = y0;

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

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

Y – массив значений искомого

 

Глава 3. Блок - схема

 

Нет

 

                                                                             Да

                       Нет             

                       Да

Глава 4. Листинг программы на языке Visual Basic

Dim x(50) As Single

Dim y(50) As Single

Dim y1(50) As Single

Dim y2(50) As Single

Private x0 As Single

Private xk As Single

Private y0 As Single

Private h As Single

Function f(c As Single, t As Single) As Single

f = (3 * t) / c

End Function

Private Sub Command1_Click()

x0 = Val(txt1.Text)

xk = Val(txt2.Text)

y0 = Val(txt4.Text)

h = Val(txt3.Text)

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

MSFlexGrid1.Rows = n + 2

MSFlexGrid1.Cols = 4

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

MSFlexGrid1.TextMatrix(0, 1) = "Y1"

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

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

Max = y0

Min = y0

y(0) = y0

y1(0) = y0

y2(0) = y0

For i = 0 To n

x(i) = x0 + i * h

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

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

y2(i + 1) = Round(2 * x(i) ^ 3, 4)

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

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

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))

Next i

Picture1.Cls

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

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

txt5.Text = Trim(Str(Min))

txt6.Text = Trim(Str(Max))

txt7.Text = Trim(Str(x0))

txt8.Text = Trim(Str(xk))

For i = 1 To n

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

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

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

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

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

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

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

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

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

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

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

Next i

End Sub

Глава 5. Решение задачи в MathCad

 

Глава 6. Форма проекта

 


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

h = (XK – X0)/N

i = 0,…,N-1

x = X0 + i*h

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

end

1

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

A

x

y

0

 

B

C

y=y(x)

1

h/2

xi+1

xi

h

EilerM (X0, XK,Y0,N,Y)

end

Yi+1 = Yi + h*F(x+h/2, Yi + h/2*F(xi, yi))

x = X0 + i*h

i = 0,…,N-1

h = (XK – X0)/N

Начало

Конец

h = (XK – X0)/N

i = 0,…,N-1

x = X0 + i*h

Yi+1 = Yi + h*F(x+h/2, Yi + h/2*F(xi, yi))

x0, y0, xk, h

x0, y0

dy = 3*(xi+1) / xi

YiЭ = Yi + h*F(x, Yi)

YiЭ, Yi+1, dy

i = 0 .. N

y(i) =2*(x(i))^3

x(i) =x0+i*h

y1(0) = 0

Min = y0

y(0) = 0

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

i = 0 .. N

Max = y0

h = (XK – X0)/N

x0, y0, xk, h

Начало

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

y(i) = Min

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

x(i) =x0+i*h

i = 0 .. N

y(i) < Min

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

y(i) = Max

i = 1 To n

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

Конец

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

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

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

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

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

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

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

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

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

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

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


 

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

23359. Изучение влияние емкости конденсатора на период колебаний в электрическом контуре 179.5 KB
  Основы теории Рассмотрим процесс возникновения колебаний в идеальном электрическом контуре осцилляторе рис. Таким образом можно сделать вывод что частота гармонических колебаний в идеальном электрическом контуре равна корню квадратному из коэффициента при заряде q формула 2: При этом период колебаний равен формула Томсона: 6 Связь периода колебаний с величинами С и L качественно объясняется следующим образом. С увеличением...
23361. Списки та стрічки в Python 3.02 MB
  3 Дії зі списками 1.4 Методи роботи зі списками 1.1 Дожина списка 1.
23362. Функції в мові Пітон 300.73 KB
  Київ 2013 Завдання: Вивчення засобів роботи і принципів організації функції в мові Пітон.1 Функції параметри аргументи 1.2 Поверненне значення функції 1.
23363. Кортежі і словники 277.75 KB
  1 Загальні відомості 1.1 Загальні відомості 2.
23364. Робота с файлами 133.75 KB
  2 Порядок роботи с файлами 3. Методи роботи с файлом 4. Повний цикл роботи читаннязапису файла Індивідуальне завдання 1. Висновок: В даній лабораторній роботі я навчився працювати зі списками з методами роботи з файлами з режимами роботи с файлами.
23365. Юнікод 163.23 KB
  Робота с кодуванням в мові Пітон.2 Робота с Юнікодом в ручному режимі 2.3 Спрощена робота в Юнікод Індивідуальне завдання 1.
23366. Вивчення основ програмування на мові Python 562.41 KB
  Тексти програм на мові Python. Мета роботи Ознайомлення з основними типами даних в Python. Вивчення основ програмування на мові Python.
23367. Исследование термоэлектрического термометра 436.5 KB
  Произвести измерения термоЭДС на клеммах подключения термопары 1819 для значений указанных преподавателем. Рассчитать основную абсолютную погрешность прибора по формуле: где Eиtt0 – измеренное значение термоЭДС; Eдtt0 – действительное значение термоЭДС определяемое по градуировочной таблице с учетом введения поправки на температуру свободных концов. Рассчитать основную приведенную погрешность термопары по формуле: где Eвt0C и Eнt0C – значения термоЭДС соответствующие верхнему и нижнему пределам измерения температуры...