Лабораторная работа по "Методам оптимизации"

Автор работы: Пользователь скрыл имя, 30 Октября 2013 в 07:31, лабораторная работа

Описание работы

Задание: Решить задачу Коши методом Рунге-Кутта четвертого порядка, разделив интервал на 10 частей.
В ходе лабораторной работы была решена задача Коши методом Рунге-Кутта 4-го порядка с известными начальными условиями. Искомый интервал был разбит на 10 частей и на каждом шаге было найдено значении функции и её производной. Правильность выполнения метода Рунге-Кутта было проверено с помощью вычисления значения функции sin(x).

Файлы: 1 файл

1l.doc

— 64.50 Кб (Скачать файл)

МИНИСТЕРСТВО ОБРАЗОВАНИЯ  И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное  бюджетное образовательное учреждение

высшего профессионального  образования

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ  УНИВЕРСИТЕТ

 

Институт/Факультет     –  Институт кибернетики

Направление – Информатика и вычислительная техника

  

Кафедра        –   Автоматики и компьютерных систем

   

 

 

 

ЗАДАЧА КОШИ

 

Отчет по лабораторной работе № 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\ty'\t\tsin(x)");

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

 


Информация о работе Лабораторная работа по "Методам оптимизации"