Решение задач численными методами

Численное решение задачи Коши для обыкновенного дифференциального уравнения первого и второго порядка методом Эйлера и Рунге-Кутты и краевой задачи для ОДУ второго порядка с применением пакета MathCad, электронной таблицы Excel и программы Visual Basic.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.02.2016
Размер файла 476,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К курсовой работе по дисциплине "Информатика"

Тема Решение задач численными методами

Введение

Обычным дифференциальным уравнением n-го порядка называется выражение:

(1)

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

Решением дифференциального уравнения (1) называется функция y(x), которая при подстановке в уравнение (1) обращает его в тождество.

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

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

Если таким условием являются численно-заданные значения функции y(x) и её производные при одном и том же заданном значении аргумента, т.е.:

(2)

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

Уравнение типа:

(3)

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

Начальным условием для такого уравнения является задание значения функции в некотором значении аргумента:

(4)

Любое дифференциальное уравнение n-го порядка (1) может быть представлено системой n дифференциальных уравнений первого порядка:

(5)

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

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

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

Для расчетов используются пакет Mathsoft MathCAD и электронная таблица Microsoft Excel. Так же оба метода реализуются в программе, написанной на языке Microsoft Visual Basic.

дифференциальный эйлер mathcad

1. Решение задачи Коши для ОДУ первого порядка

1.1 Аналитическое решение

Для неоднородного уравнения первого порядка воспользуемся готовой формулой для задачи Коши:

Решение:

1.2 Решение в Mathcad

Численное решение задачи Коши для ОДУ первого порядка.

Задание. Найти решение задачи Коши

с помощью метода Рунге-Кутты, разбив промежуток на 10 и 20 равных частей.

Построить графики полученных численных и аналитического решений.

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

Начальное условие

Численное решение задачи Коши для системы ОДУ 1-го порядка (и одного ОДУ 1-го порядка) методом Рунге-Кутты находится с помощью стандартной функции rkfixed (y0,a,b,N,D)

y0 - вектор начальных условий для системы ОДУ 1-го порядка;

a, b - левый и правый конец промежутка, на котором ищется решение;

N - число разбиений промежутка [a;b];

D - вектор правых частей системы ОДУ 1-го порядка.

Для уравнения 1-го порядка вектор начальных условий и вектор правых частей имеют одну компоненту.

Функция возвращает матрицу, столбцами которой являются значения

1) независимой переменной x;

2) 1-й искомой функции;

и т.д.

Для уравнения 1-го порядка - одна искомая функция y.

Численное решение:

численное решение

аналитическое решение

значения x:

решение y:

Рис. 1

1.3 Решение в Excel

Численное решение задачи Коши для ОДУ первого порядка.

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

Построить графики полученных численных и аналитического решений.

a = 1,414214

b = 2,414214

y(2^0,5) = 1

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

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

i = 0,1,2,…,n-1 n= 10

где x[i] = x[0] + i*h

x[0] = a x[n] = b h=(b-a)/n = 0,1

Таблица 1

Метод Рунге-Кутты:

y[i+1] = y[i] + h*(k1+2*k2+2*k3+k4)/6

i = 0,1,2,…,n-1 n= 10

где k1 = f( x[i], y[i] )

k2 = f( x[i]+h/2, y[i]+h*k1/2 )

k3 = f( x[i]+h/2, y[i]+h*k2/2 )

k4 = f( x[i]+h, y[i]+h*k3 )

x[i] = x[0] + i*h

x[0] = a x[n] = b h=(b-a)/n = 0,1

Таблица 2

Рис. 2

1.4 Решение в Visual Basic

Окно программы:

Исходный код программы:

Private Function fun(X, Y)

y0 = -Y * X / (X ^ 2 + 1) + X

fun = y0

End Function

Private Sub Command1_Click()

pr = 0

a = 2 ^ 0.5

b = 2 ^ 0.5 + 1

Y = 1

y00 = Y

n = Val(Text1.Text)

If n = 0 Then n = 10

If Option1.Value = True Then GoTo 1

If Option2.Value = True Then GoTo 2

If Option3.Value = True Then GoTo 3

Print #1, "Вычисление по схеме Эйлера"

Print #1,

Print #1, " i", " Xi", " Y1i", " f1()"

Print #1,

Print #1,

i = 0

X = a

f1 = fun(X, Y)

Y = Format(Y, "0.0000")

X = Format(X, "0.0000")

f1 = Format(f1, "0.0000")

Print #1, i, X, Y, f1, f2

h = (b - a) / n

For X = (a + h) To b Step h

i = i + 1

Y = Y + h * f1

f1 = fun(X, Y)

Y = Format(Y, "0.0000")

X = Format(X, "0.0000")

f1 = Format(f1, "0.0000")

Print #1, i, X, Y, f1

Next X

Print #1,

Print #1,

GoTo 4

h = (b - a) / n

Print #1, "Вычисление по схеме Рунге-Кутта"

Print #1,

Print #1, " i", " Xi", " Y1i", " K1", " K2", " K3", " K4"

Print #1,

i = 0

X = a

Y = y00

k1 = fun(X, Y)

k2x = X + h / 2

k2y = Y + (h / 2) * k1

k2 = fun(k2x, k2y)

k3x = X + h / 2

k3y = Y + (h / 2) * k2

k3 = fun(k3x, k3y)

k4x = X + h

k4y = Y + h * k3

k4 = fun(k4x, k4y)

Y = Format(Y, "0.0000")

X = Format(X, "0.0000")

k1 = Format(k1, "0.0000")

k2 = Format(k2, "0.0000")

k3 = Format(k3, "0.0000")

k4 = Format(k4, "0.0000")

k1 = fun(X, Y)

Print #1, i, X, Y, k1, k2, k3, k4

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

For X = (a + h) To b Step h

k1 = fun(X, Y)

k2x = X + h / 2

k2y = Y + (h / 2) * k1

k2 = fun(k2x, k2y)

k3x = X + h / 2

k3y = Y + (h / 2) * k2

k3 = fun(k3x, k3y)

k4x = X + h

k4y = Y + h * k3

k4 = fun(k4x, k4y)

Y = Format(Y, "0.0000")

X = Format(X, "0.0000")

k1 = Format(k1, "0.0000")

k2 = Format(k2, "0.0000")

k3 = Format(k3, "0.0000")

k4 = Format(k4, "0.0000")

i = i + 1

Print #1, i, X, Y, k1, k2, k3, k4

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

Next X

GoTo 4

Print #1, "Аналитический метод"

Print #1,

Print #1, " i", " Xi", " Yi"

Print #1,

Print #1,

i = 0

X = a

h = (b - a) / n

For X = a To b - h Step h

Y = (X ^ 2) / 3 + 1 / 3

Y = Format(Y, "0.0000")

X = Format(X, "0.0000")

Print #1, i, X, Y

i = i + 1

Next X

X = b

Y = (X ^ 2) / 3 + 1 / 3

Y = Format(Y, "0.0000")

X = Format(X, "0.0000")

Print #1, i + 1, X, Y

Print #1,

End Sub

Private Sub Form_Load()

Open "c:\coshi1.out" For Output As #1

End Sub

Private Sub Form_Unload(Cancel As Integer)

Close #1

End Sub

Распечатка файла Coshi1.out:

Таблица 3 Вычисление по схеме Эйлера

Таблица 4 Вычисление по схеме Рунге-Кутта

Таблица 5 Аналитический метод

дифференциальный эйлер mathcad

2. Решение задачи Коши для ОДУ второго порядка

2.1 Решение в MathCad

Найти решение задачи Коши

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

Начальное условие

После введения новых неизвестных функций = = y' исходная задача сводится к задачи Коши для системы двух обыкновенных дифференциальных уравнений первого порядка

Численное решение задачи Коши для системы ОДУ 1-го порядка (и одного ОДУ 1-го порядка) методом Рунге-Кутты находится с помощью стандартной функции rkfixed(y0,a,b,N,D)

y0 - вектор начальных условий для системы ОДУ 1-го порядка;

a, b - левый и правый конец промежутка, на котором ищется решение;

N - число разбиений промежутка [a;b];

D - вектор правых частей системы ОДУ 1-го порядка.

Функция возвращает матрицу, столбцами которой являются значения

1) независимой переменной x;

2) 1-й искомой функции;

3) 2-й искомой функции;

и т.д.

Численное решение:

y1(x) и y2(x) - значение первой и второй искомых функций

значения x:

решение y:

Рис. 6

2.2 Решение в Excel

Задание. Найти приближенное решение задачи Коши.

a = 0,4

b = 1,4

y` = 1,4

y = 1,2

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

Решение. Путем введения новых не известных функций y1 = y, y2=y0 задача Коши для обыкновенного дифференциального уравнения второго порядка сводится к задаче Коши для системы двух дифференциальных уравнений первого порядка

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

имеет вид:

Вычисления по схеме Эйлера помещаем в таблицу

Таблица 6

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

где

k11 = f( x[i], y1[i], y2[i] );

k12 = f( x[i]+h/2, y1[i]+h/2*k11, y2[i]+h/2*k21 );

k13 = f( x[i]+h/2, y1[i]+h/2*k12, y2[i]+h/2*k22 );

k14 = f( x[i]+h, y1[i]+h*k13, y2[i]+h*k23 );

k21 = g( x[i], y1[i], y2[i] );

k22 = g( x[i]+h/2, y1[i]+h/2*k11, y2[i]+h/2*k21 );

k23 = g( x[i]+h/2, y1[i]+h/2*k12, y2[i]+h/2*k22 );

k24 = g( x[i]+h, y1[i]+h*k13, y2[i]+h*k23 );

Вычисления по схеме Рунге-Кутты оформляем в виде таблицы

Таблица 7

Рис. 6

2.3 Решение в Visual Basic

Окно программы:

Исходный код программы:

Private Function fun(x, y1, y2)

y = 0.5 * x * y2 - y1 + 2

fun = y

End Function

Private Sub Command1_Click()

pr = 0

a = 0.4

b = 1.4

y1 = 1.2

y2 = 1.4

n = Val(Text1.Text)

If n = 0 Then n = 10

If Option1.Value = True Then GoTo 1

If Option2.Value = True Then GoTo 2

Print #1, "Вычисление по схеме Эйлера"

Print #1,

Print #1, " i", " Xi", " Y1i", " Y2i", " f1()"; " f2()"

Print #1,

i = 0: x = a

f1 = y2: f2 = fun(x, y1, y2)

y1 = Format(y1, "0.0000")

y2 = Format(y2, "0.0000")

f1 = Format(f1, "0.0000")

f2 = Format(f2, "0.0000")

Print #1, i, x, y1, y2, f1, f2

h = (b - a) / n

For x = (a + h) To b Step h

i = i + 1

y1 = y1 + h * f1

y2 = y2 + h * f2

f1 = y2

f2 = fun(x, y1, y2)

y1 = Format(y1, "0.0000")

y2 = Format(y2, "0.0000")

f1 = Format(f1, "0.0000")

f2 = Format(f2, "0.0000")

Print #1, i, x, y1, y2, f1, f2

Next x

y1 = y1 + h * f1

y2 = y2 + h * f2

y1 = Format(y1, "0.0000")

y2 = Format(y2, "0.0000")

f1 = Format(f1, "0.0000")

f2 = Format(f2, "0.0000")

Print #1, i + 1, x, y1, y2

Print #1,

Print #1,

GoTo 3

h = (b - a) / n

Print #1, "Вычисление по схеме Рунге-Кутта"

Print #1,

Print #1, " i", " Xi", " Y1i", " Y2i", " K11", " K12", " K13", " K14", " K21", " K22", " K23", " K24"

Print #1,

i = 0

a = 0.4

b = 1.4

y1 = 1.2

y2 = 1.4

x = a

k11 = y2

k21 = fun(x, y1, y2)

k12 = y2 + h / 2 * k21

k22x = x + h / 2

k22y1 = y1 + (h / 2) * k11

k22y2 = y2 + (h / 2) * k21

k22 = fun(k22x, k22y1, k22y2)

k13 = y2 + h / 2 * k22

k23x = x + h / 2

k23y1 = y1 + (h / 2) * k12

k23y2 = y2 + (h / 2) * k22

k23 = fun(k23x, k23y1, k23y2)

k14 = y2 + h * k23

k24x = x + h

k24y1 = y1 + h * k13

k24y2 = y2 + h * k23

k24 = fun(k24x, k24y1, k24y2)

y1 = Format(y1, "0.0000")

y2 = Format(y2, "0.0000")

k11 = Format(k11, "0.0000")

k12 = Format(k12, "0.0000")

k13 = Format(k13, "0.0000")

k14 = Format(k14, "0.0000")

k21 = Format(k21, "0.0000")

k22 = Format(k22, "0.0000")

k23 = Format(k23, "0.0000")

k24 = Format(k24, "0.0000")

Print #1, i, x, y1, y2, k11, k12, k13, k14, k21, k22, k23, k24

y1 = y1 + h / 6 * (k11 + 2 * k12 + 2 * k13 + k14)

y2 = y2 + h / 6 * (k21 + 2 * k22 + 2 * k23 + k24)

k11 = y2

h = (b - a) / n

For x = (a + h) To b Step h

i = i + 1

k11 = y2

k21 = fun(x, y1, y2)

k12 = y2 + h / 2 * k21

k22x = x + h / 2

k22y1 = y1 + (h / 2) * k11

k22y2 = y2 + (h / 2) * k21

k22 = fun(k22x, k22y1, k22y2)

k13 = y2 + h / 2 * k22

k23x = x + h / 2

k23y1 = y1 + (h / 2) * k12

k23y2 = y2 + (h / 2) * k22

k23 = fun(k23x, k23y1, k23y2)

k14 = y2 + h * k23

k24x = x + h

k24y1 = y1 + h * k13

k24y2 = y2 + h * k23

k24 = fun(k24x, k24y1, k24y2)

y1 = Format(y1, "0.0000")

y2 = Format(y2, "0.0000")

k11 = Format(k11, "0.0000")

k12 = Format(k12, "0.0000")

k13 = Format(k13, "0.0000")

k14 = Format(k14, "0.0000")

k21 = Format(k21, "0.0000")

k22 = Format(k22, "0.0000")

k23 = Format(k23, "0.0000")

k24 = Format(k24, "0.0000")

Print #1, i, x, y1, y2, k11, k12, k13, k14, k21, k22, k23, k24

y1 = y1 + h / 6 * (k11 + 2 * k12 + 2 * k13 + k14)

y2 = y2 + h / 6 * (k21 + 2 * k22 + 2 * k23 + k24)

Next x

y1 = Format(y1, "0.0000")

y2 = Format(y2, "0.0000")

Print #1, i, x, y1, y2

End Sub

Private Sub Form_Load()

Open "c:\coshi2.out" For Output As #1

End Sub

Private Sub Form_Unload(Cancel As Integer)

Close #1

End Sub

Распечатка файла Coshi1.out:

Вычисление по схеме Эйлера

Таблица 8

3. Численное решение краевой задачи для ОДУ второго порядка

Найти численное решение краевой задачи

с помощью метода конечных разностей при разбиении исходного промежутка на 10, 20 и 40 равных частей.

Разбиение на 10 частей

Разбиение на 20 частей

Разбиение на 40 частей

Рис. 8

Заключение

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

Список литературы

1. Кудрявцев Е.М., "ДМК", Mathcad 8. Символьное и численное решение задач., "ДМК", 2010 г., 320 с.

2. Шафрин Ю.А. Основы компьютерной технологии. - М.: АБВ, 2009. - 656с.

3. Дьяконов В. Mathcad 2001: специальный справочник, СПб, 2011г., 459 с.

Размещено на Allbest.ru


Подобные документы

  • Численный метод для решения однородного дифференциального уравнения первого порядка методом Эйлера. Решение систем дифференциальных уравнений методом Рунге–Кутта. Решение краевой задачи. Уравнения параболического типа, а также Лапласа и Пуассона.

    курсовая работа [163,5 K], добавлен 27.05.2013

  • Математическое описание задачи решения обыкновенного дифференциального уравнения численным явным методом Рунге-Кутта, разработка схемы алгоритма и написание программы в среде программирования Microsoft Visual Studio 2010. Тестирование работы программы.

    курсовая работа [1,1 M], добавлен 22.01.2014

  • Программа вычисления интеграла методом прямоугольников. Решение задачи Коши для дифференциальных уравнений. Модифицированный метод Эйлера. Методы решения краевой задачи для обыкновенного дифференциального уравнения. Задачи линейного программирования.

    методичка [85,2 K], добавлен 18.12.2014

  • Решение задачи Коши для дифференциального уравнения методом Рунге-Кутта и Адамса с автоматическим выбором шага и заданным шагом. Интерполирование табличной функции. Численное решение системы линейных алгебраических уравнений методами простой итерации.

    методичка [35,8 K], добавлен 15.03.2009

  • Обзор методов решения в Excel. Рекурентные формулы метода Эйлера. Метод Рунге-Кутта четвертого порядка для решения уравнения первого порядка. Метод Эйлера с шагом h/2. Решение дифференциальных уравнений с помощью Mathcad. Модифицированный метод Эйлера.

    курсовая работа [580,1 K], добавлен 18.01.2011

  • Решение дифференциального уравнения N-го порядка методом интегрирования при помощи характеристического уравнения, методом интегрирования и операторным методом для значений аргументов при заданных начальных условиях и нулевых уравнения 4–го порядка.

    практическая работа [806,9 K], добавлен 05.12.2009

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

    курсовая работа [691,4 K], добавлен 17.05.2011

  • Ручной расчет поставленной задачи методов Эйлера и Эйлера-Коши. Алгоритмы решения обоих методов, их программная реализация, решение тестовых примеров на заданную задачу. Расчеты заданного интеграла на языке программирования Turbo Pascal, их результаты.

    курсовая работа [404,7 K], добавлен 15.06.2013

  • Математическая модель задачи для исследования характера движения тела. Решение задачи Коши для системы дифференциальных уравнений первого и второго порядка. Использование метода Эйлера. Схема алгоритма, таблица идентификаторов, программа на языке Pascal.

    курсовая работа [137,9 K], добавлен 07.03.2013

  • Численное и графическое моделирование динамических процессов в механической системе вибрационного типа. Обработка исходных данных и получение необходимых значений в MathCAD Professional. Решение задачи Коши модифицированным методом Эйлера в Excel.

    курсовая работа [3,7 M], добавлен 27.08.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.