МО 1 станкин. Воронков МО1. Лабораторная работа 1 Одномерная оптимизация
Скачать 1.61 Mb.
|
МИНОБРНАУКИ РОССИИ федеральное государственное бюджетное образовательное учреждение высшего образования «Московский государственный технологический университет «СТАНКИН» (ФГБОУ ВО «МГТУ «СТАНКИН») Институт информационных технологий Кафедра Прикладной математики ОТЧЕТ О ВЫПОЛНЕНИИ ИНДИВИДУАЛЬНОГО ЗАДАНИЯ ПО ДИСЦИПЛИНЕ «Методы оптимизации» СТУДЕНТА 2 КУРСА бакалавриата ГРУППЫ ИДБ-19-03 (уровень профессионального образования) Воронков Никита Григорьевич НА ТЕМУ Лабораторная работа №1 «Одномерная оптимизация» Вариант № 29 Направление: 09.03.01 «Информатика и вычислительная техника» Профиль подготовки: Отчет сдан «______» ________________2021 г. Оценка ____________________________ Преподаватель Бекмурзаев В.А., доцент, к.т.н. (Ф.И.О., должность, степень, звание.) (подпись) МОСКВА 2021 6.Разработать программный модуль решения задачи индивидуального задания методом половинного деления. using System; namespace z1 { class Program { static double f( double x) { return Math.Pow(x,3) + 3 * x * x - 1; } static void Main( string [] args) { double [] a = new double [100]; double [] b = new double [100]; double [] y = new double [100]; double [] z = new double [100]; double [] x = new double [100]; double [] L2 = new double [100]; double E=0.3; int k = 0; double X; a[0] = -1; b[0] = 3; x[k] = (a[k] + b[k]) / 2; double fx = f(x[k]); L2[k] = b[k] - a[k]; while ( true ) { fx = f(x[k]); y[k] = a[k] + L2[k] / 4; z[k] = b[k] - L2[k] / 4; double fy = f(y[k]); double fz = f(z[k]); if (fy < fx) { a[k + 1] = a[k]; b[k + 1] = x[k]; x[k + 1] = y[k]; } else { if (fz } else { a[k + 1] = y[k]; b[k + 1] = z[k]; x[k + 1] = x[k]; } } L2[k + 1] = b[k + 1] - a[k + 1]; if (L2[k + 1] <= E) { X = x[k+1]; Console.WriteLine( $"x принадлежит [ {a[k+1]} , {b[k+1]} ], x*= {X} , f(x)= {f(X)} " ); break ; } k = k + 1; } } } } 7. Разработать программный модуль решения задачи индивидуального задания методом «золотого» сечения using System; namespace z2 { class Program { const double FI= 0.382; static double f( double x) { return Math.Pow(x, 3) + 3 * x * x - 1; } static void Main( string [] args) { double [] a = new double [100]; double [] b = new double [100]; double [] y = new double [100]; double [] z = new double [100]; double E = 0.3; int k = 0; double X; a[0] = -1; b[0] = 3; y[0] = a[0] + FI * (b[0] - a[0]); z[0] = a[0] + b[0] - y[0]; while ( true ) { if (f(y[k]) < f(z[k])) { a[k + 1] = a[k]; b[k + 1] = z[k]; y[k + 1] = a[k+1] + b[k+1] - y[k]; z[k + 1] = y[k]; } else { a[k + 1] = y[k]; b[k + 1] = b[k]; y[k + 1] = z[k]; z[k + 1] = a[k + 1] + b[k + 1] - z[k]; } double D = Math.Abs(a[k+1]-b[k+1]); if (D <= E) { X = (a[k + 1] + b[k + 1]) / 2; Console.WriteLine( $"x принадлежит [ {a[k + 1]} , {b[k + 1]} ], x*= {X} , f(x)= {f(X)} " ); break ; } k = k + 1; } } } } 8. Разработать программный модуль решения задачи индивидуального задания методом чисел Фибоначчи. using System; namespace z3 { class Program { static double f( double x) { return Math.Pow(x, 3) + 3 * x * x - 1; } static void Main( string [] args) { double [] a = new double [100]; double [] b = new double [100]; double [] y = new double [100]; double [] z = new double [100]; double [] F = new double [100]; double X; double E = 0.3; double l = 0.3; int N=1; a[0] = -1; b[0] = 3; F[0] = 1; F[1] = 1; while (F[N]<(b[0]-a[0])/l) { F[N + 1] = F[N] + F[N - 1]; N = N + 1; } int k = 0; y[0] = a[0] + F[N - 2] * (b[0] - a[0]) / F[N]; z[0] = a[0] + F[N - 1] * (b[0] - a[0]) / F[N]; while ( true ) { if (f(y[k]) < f(z[k])) { a[k + 1] = a[k]; b[k + 1] = z[k]; y[k + 1] = a[k + 1] + F[N - k - 3] * (b[k + 1] - a[k + 1]) / F[N - k - 1]; z[k + 1] = y[k]; } else { a[k + 1] = y[k]; b[k + 1] = b[k]; y[k + 1] = z[k]; z[k + 1] = a[k + 1] + F[N - k - 2] * (b[k + 1] - a[k + 1]) / F[N - k - 1]; } if (k== N-3) { y[N - 1] = y[N - 2]; z[N - 1] = y[N - 1] + E; if (f(y[N - 1]) <= f(z[N - 1])) { a[N - 1] = a[N - 2]; b[N - 1] = z[N - 1]; } else { a[N - 1] = y[N - 1]; b[N - 1] = b[N - 2]; } X = (a[N - 1] + b[N - 1]) / 2; Console.WriteLine( $"x принадлежит [ {a[N - 1]} , {b[N - 1]} ], x*= {X} , f(x)= {f(X)} " ); break ; } k = k + 1; } } } } |