49787

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

Курсовая

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

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

Русский

2014-01-08

124 KB

3 чел.

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

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

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

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

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

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

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

ВАРИАНТ №14:

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

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

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

студент гр. ОЕ-71

Паньшин А.А.

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

Доцент Минина Е.Е

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

2008

Введение

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

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

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

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

Цель моей работы- ознакомление, изучение основ системы программирования Microsoft  Visual  Basic и приобретение начальных навыков решение ДУ в Microsoft  Visual  Basic

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

Решить методами Эйлера и Эйлера модифицированного задачу Коши для дифференциального уравнения 1-го порядка 2*x*y*dx-(x+1)=0

на отрезке [0; 0.8] с шагом h=0.05 и начальным условием: Y(0) = 4. Общее решение: y=exp(2*x)*C/(x+1)^2

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

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. Описание используемых методов

Метод Эйлера

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

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

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

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

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

x1 = 0 + 1 · 0.05 = 0.05;

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

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

Δy = y1 y0,

 y1 y0= Δx· tg α0

Δx = x1 – x0 = h => y1 = y0 + h · (f(x0; y0)) = 4 + 0.05  f(0;4) = 4+0.05*0= 4

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

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

(*)

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

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

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

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

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

x1 = 0 + 0.05 · 1 = 0.05;

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

x1/2 = x0 + h/2 = 0 + 0.025 = 0.025

y1/2 = y0 + h/2 · f(x0; y0) = 4 +  0.025· 0= 4

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

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

Tgα1=2*0.025*4/0.025+1=0.1951 рад. α1=0.1977

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

y1 = y1/2 + h/2(f(x1/2;y1/2)) = 4 + 0.025 · 0.1977 = 4.0049

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

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

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

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

Блок-схема метода Эйлера.

Блок-схема методом Эйлера модифицированным.

 

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

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

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

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

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

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

Dim x(50) As Single, y(50) As Single, k(50) As Single, z(50) As Single, p(50) As Single

Private y0 As Single

Private x0 As Single

Private xk As Single

Private C As Single

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

f = 2 * t * q / t + 1

End Function

Private Sub Command2_Click()

x0 = Val(Text1.Text)

xk = Val(Text2.Text)

y(0) = Val(Text4.Text)

h = Val(Text3.Text)

p(0) = y(0)

z(0) = y(0)

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

C = (y(0) * (x0 + 1) ^ 2) / Exp(2 * x0)

MSFlexGrid1.Rows = n + 2

MSFlexGrid1.Cols = 4

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

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

MSFlexGrid1.TextMatrix(0, 2) = "Yэ"

MSFlexGrid1.TextMatrix(0, 3) = "Yэм"

Max = y(0)

Min = y(0)

For i = 1 To n

x(i) = x0 + i * h

p(i) = Round(C * (x(i) * x(i) * x(i)) )

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

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

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(p(i))

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

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

Next i

Picture1.Cls

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

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

Label4.Caption = Str(Min)

Label5.Caption = Str(Max)

Label6.Caption = Str(x0)

Label7.Caption = Str(xk)

For i = 0 To n - 1

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

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

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

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

z5 = Round(5400 - (p(i) - Min) * ky)

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

z7 = Round(5400 - (z(i) - Min) * ky)

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

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

Picture1.Line (z1, z2)-(z3, z4), vbGreen

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

Next i

End Sub

Private Sub Command1_Click()

End

End Sub

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

Заключение

В данной курсовой работе я изучил численные методы решения задачи

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

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


Eiler

i=0,…,N-1

x(i)=x0+h*i

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

end

Eiler mod

=(xk-x0)/N

i=0,…,N-1

x(i)=x0+h*i

Yi=y(i-2)+h*F(x(i-2)+h/2,y(i-2)+h/2*F(x(i-2), y(i-2))

end

end

F=2*g*m/g+1

F(g,m)

Graphic

x0, xk, y0, h

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

MSFlexGrid1.Rows=n+2

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

MSFlexGrid1.TextMatrix(0,1)=”YЭ

MSFlexGrid1.TextMatrix(0,2)=”YЭМ

MSFlexGrid1.TextMatrix(0,3)=”P”

x(0)=x0

y(0)=y0

c=y0*(x0+1)^2/exp(2*x0)

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

For i=0 to N

x(i)=x0+h*i

Z(0)=y0

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

Y(i)=exp(2*x(i)) *C/(x(i)+1)^2

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 = (Picture1.Width - 1200) / (xk - x0)

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

нет

да

нетт

да

p(0)=y0

For i=0 to N-1

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

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

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

p4=5400-(Y(i+1)-min)*ky

p5=5400+(p(i)-min)*ky

p6=5400-(p(i+1)-min)*ky

p7=5400-(z(i)-min)*ky

P8=5400-(z(i+1)-min)*ky

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

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

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

end

Programma

x0, xk, y0, h

h=(xk-x0)/N

c=y(0)*(x0+1)^2/exp(2*x0)

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(2*x(i)) *C/(x(i)+1)^2

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

end


 

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

20164. Создание удаленных представлений 827 KB
  При создании системы обработки данных не всегда удается обеспечить их хранение в едином формате. Часто возникает необходимость использования данных из уже работающих приложений ктороые написаны не на VFP. Удаленное представление работает на основе соединения которое используя технологию Open Database Connectivity ODBC описывает условия передачи данных.1 Окно диалога Select connection or Available DataSource В списке перечислены соединения определенные в текущей базе данных.
20165. ИСПОЛЬЗОВАНИЕ КОМПОНЕНТ OLE 68 KB
  1 был введен новый метод передачи информации в виде объектов между 16разрядными приложениями основанный на модели Object Linking and Embedding OLE 1. Протокол OLE 2. OLE 2.
20166. ХАРАКТЕРИСТИКА ПАКЕТА VISUAL FOXPRO 94.5 KB
  Теперь Visual FoxPro уже не стоит немного особняком от остальных продуктов Microsoft как это было в версиях 2. Более того Visual FoxPro полностью интегрируется с остальными приложениями Microsoft Office с помощью OLE Automation. Программа написанная на Visual FoxPro сможет полноценно общаться с Microsoft Word Microsoft Excel и любыми другими приложениями поддерживающими OLE 2.
20168. Использование функций WinAPI 32.5 KB
  DECLARE DLL Регистрирует функцию во внешней 32разрядной библиотеке динамических связей Windows . Чтобы удалить зарегистрированные функции из памяти выдайте команду CLEAR ALL или CLEAR DLLS.
20169. Компоненты Visual FoxPro 96 KB
  Этими компонентами являются таблицы представления данных формы отчеты запросы программы и библиотеки. С помощью мастера вы можете создать форму поместив в нее поля исходной таблицы расположенные в соответствии с одним из заранее созданных шаблонов. Отчеты используются для отображения информации содержащейся в базе данных. С помощью конструктора отчетов вы можете разработать собственный отчет включающий группировку данных групповые и вычисляемые поля и оформить их соответствующим образом.
20170. Создание объектов на основе базовых классов 63 KB
  Для создания экземпляра выбранного класса достаточно перенести пиктограмму выбранного класса в форму и разместить ее в требуемом месте формы. Созданный объект будет обладать всеми характеристиками базового класса. Синтаксис этой функции: CREATEOBJECT имя класса [ параметр 1 параметр 2 . Каждый из объектов созданных на основе базовых классов наследует свойства базового класса.
20171. Базовые классы VFP 73 KB
  Класс содержит информацию о том как должен выглядеть объект и определяет выполняемые им действия. Объект является экземпляром класса который наследует характеристики класса. При создании объектов приложения вы можете использовать базовые классы Visual FoxProа также создавать новые специальные классы.
20172. Методы, связанные с командой READ 57.5 KB
  В Visual FoxPro форма выводится на экран методом Show а для обновления данных нужно использовать метод Refresh следующим образом: Form1. Поля записываются только при перемещении показателя текущей записи 2Optimistic записи блокируются только при попытке записи данных. Другими словами представления позволяют пользователям сосредоточить внимание и возможно логически реструктурировать только ту часть базы данных которая их интересует и игнорировать остальные данные. Для скрытых данных обеспечивается автоматическая защита.