Автор работы: Пользователь скрыл имя, 30 Октября 2013 в 07:31, лабораторная работа
Задание: Решить задачу Коши методом Рунге-Кутта четвертого порядка, разделив интервал на 10 частей.
В ходе лабораторной работы была решена задача Коши методом Рунге-Кутта 4-го порядка с известными начальными условиями. Искомый интервал был разбит на 10 частей и на каждом шаге было найдено значении функции и её производной. Правильность выполнения метода Рунге-Кутта было проверено с помощью вычисления значения функции sin(x).
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное
бюджетное образовательное
высшего профессионального образования
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Институт/Факультет – Институт кибернетики
Направление – Информатика и вычислительная техника
Кафедра – Автоматики и компьютерных систем
ЗАДАЧА КОШИ
Отчет по лабораторной работе № 1
по курсу «Методы оптимизации»
Вариант № 1
Выполнил студент гр. 8ВМ32 _ _______ А. В. Гориченко
Подпись Дата
Проверил доцент каф. ИПС ________ _______ В. И. Рейзлин
Подпись Дата
Томск – 2013
Решить задачу Коши методом Рунге-Кутта четвертого порядка, разделив интервал на 10 частей.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lab1
{
class Program
{
static void Main(string[] args)
{
//Console.WriteLine("\t x\t\ty\t\ty'");
Console.WriteLine("\tx\t\ty\t\
//RungeKutta( 1.2, 2.2, 1, 0.8, 0.1);
RungeKutta( 0, 1, 0, 1, 0.1);
Console.Read();
}
//1-ое уравнение первого порядка
private static double f(double x, double y, double z)
{
return z;
}
//2-ое уравнение первого порядка
private static double g(double x, double y, double z)
{
//return x + 1 - y * 2 + x * z;
return -y;
}
static void vivod(double x,double y,double z ,double sinus)
{
//Вывод результата
//Console.WriteLine("\t{0}\t {1:F4}\t {2:F4}", x, y, z);
Console.WriteLine("\t{0}\t {1:F4}\t {2:F4}\t {3:F10}", x, y, z, Math.Sin(x));
}
static void RungeKutta(double x, double xn, double y, double z, double h)
{
//double y1, z1;
double y1, z1, sinus = Math.Sin(x);
for (; x < xn - h / 2; x += h)
{
vivod(x, y, z,Math.Sin(x));
double K1 = f(x, y, z);
double l1 = g(x, y, z);
double K2 = f(x + h / 2, y + h * K1 / 2, z + h * l1 / 2);
double l2 = g(x + h / 2, y + h * K1 / 2, z + h * l1 / 2);
double K3 = f(x + h / 2, y + h * K2 / 2, z + h * l2 / 2);
double l3 = g(x + h / 2, y + h * K2 / 2, z + h * l2 / 2);
double K4 = f(x + h, y + h * K3, z + h * l3);
double l4 = g(x + h, y + h * K3, z + h * l3);
y1 = y + h * (K1 + 2 * K2 + 2 * K3 + K4) / 6;
z1 = z + h * (l1 + 2 * l2 + 2 * l3 + l4) / 6;
y = y1;
z = z1;
}
}
}
Проверим правильность выполнения метода Рунге-Кутта, вычислив с его помощью значение функции sin(x).
Вывод:
В ходе лабораторной работы была решена задача Коши методом Рунге-Кутта 4-го порядка с известными начальными условиями. Искомый интервал был разбит на 10 частей и на каждом шаге было найдено значении функции и её производной. Правильность выполнения метода Рунге-Кутта было проверено с помощью вычисления значения функции sin(x).
Информация о работе Лабораторная работа по "Методам оптимизации"