|
||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Результаты «ручного расчета» и длина отрезка, содержащего точкуЛабораторная работа №7 «Одномерная оптимизация» 1. Задание для решения задачи одномерной оптимизации: · функция, для которой необходимо найти минимум · метод решения задачи оптимизации для «ручного расчета» – золотое сечение. · метод решения задачи оптимизации для «расчета на ПК» – дихотомия. 2. Исследование задания: · график функции :
· начальный отрезок неопределенности (отрезок, содержащий точку минимума) выберем по построенному графику - отрезок [3,1;3,5] - начальный отрезок неопределенности; · результат проверки выполнения аналитического условия унимодальности функции на выбранном отрезке:
Функция на отрезке [3,1;3,5] – унимодальная, так как первая производная меняет знак, а вторая производная больше нуля.
Результаты «ручного расчета» и длина отрезка, содержащего точку минимума после трех итераций: Результаты «ручного расчета» трех итераций.
Для метода золотого сечения теоретическая длина отрезка неопределенности после трех итераций равна , что совпадает с полученной длиной отрезка неопределенности.
Задание: Программа:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace _1opt { public partial class Form1: Form { public Form1() { InitializeComponent(); } odnopt k = new odnopt(); private void button1_Click(object sender, EventArgs e) { k.a = Convert.ToDouble(textBox1.Text); k.b = Convert.ToDouble(textBox2.Text); k.unimodal(); textBox4.Text = k.s; }
private void button2_Click_1(object sender, EventArgs e) { k.eps = Convert.ToDouble(textBox3.Text); k.dihot(); textBox5.Text = k.p; } } class odnopt { public double a, b, eps; public string s, p; public double funk(double x) { return Math.Sin(x*x)+1/(2-x); } public double funk1(double x) { return 2*x*Math.Cos(x*x)+1/Math.Pow(x-2, 2); } public double funk2(double x) { return 2*Math.Cos(x*x)-4*x*x*Math.Sin(x*x)-2/Math.Pow(x-2, 3); } public void unimodal() { double y, y1, y2; double h = (b - a) / 10; double t = a; for (int i = 0; i < 10; i++) { y = funk(t); y1 = funk1(t); y2 = funk2(t); s = s + y.ToString("F5") + " " + y1.ToString("F5") + " " + y2.ToString("F5") + " " + "\r\n"; t = t + h; } } public void dihot() { double x1, x2; while (Math.Abs(b - a) > eps) { x1 = ((a + b) / 2) - eps / 4; x2 = ((a + b) / 2) + eps / 4; if (funk(x1) > funk(x2)) { a = x1; } else { b = x2; } } double m = (a + b) / 2; double g = funk(m); p = m.ToString("F5") + " " + g.ToString("F5");
} }
}
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |