|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Решения задачи оптимизации с помощью «расчета на ПК». Метод золотого сечения
Метод золотого сечения. Программный код: Option Strict On Option Explicit On Imports System.Math Public Class Form1 Function f(ByVal x As Double) As Double Return -5 * x * Sin(x + 1) + 2 * Cos(x) 'описание процедуры-функции End Function Sub zolot(ByVal a As Double, ByVal b As Double, ByVal Eps As Double, _ ByRef t As String, ByRef Xmin As Double, ByRef Ymin As Double) Dim k1, k2, x1, x2, F1, F2 As Double Dim n As Integer n = 0 k1 = (3 - Sqrt(5)) / 2 k2 = (Sqrt(5) - 1) / 2 x1 = a + k1 * (b - a) x2 = a + k2 * (b - a) F1 = f(x1) F2 = f(x2) t = Format(n, "00") & Space(5) & Format(a, "0.00000") & Space(5) & Format(b, "0.00000") & _ Space(5) & Format(x1, "0.00000") & Space(5) & Format(x2, "0.00000") & _ Space(5) & Format(F1, "0.00000") & Space(5) & Format(F2, "0.00000") & _ Space(5) & Format(b - a, "0.00000") & vbNewLine Do Until b - a < Eps 'условие останова n = n + 1 If F1 < F2 Then b = x2: x2 = x1: F2 = F1 x1 = a + k1 * (b - a): F1 = f(x1) Else a = x1: x1 = x2: F1 = F2 x2 = a + k2 * (b - a): F2 = f(x2) End If t = t & Format(n, "00") & Space(5) & Format(a, "0.00000") & Space(5) & Format(b, "0.00000") & _ Space(5) & Format(x1, "0.00000") & Space(5) & Format(x2, "0.00000") & _ Space(5) & Format(F1, "0.00000") & Space(5) & Format(F2, "0.00000") & _ Space(5) & Format(b - a, "0.00000") & vbNewLine Loop Xmin = CDbl(Format((a + b) / 2, "0.00000")) ' конечное значение Xmin Ymin = CDbl(Format(f(Xmin), "0.00000")) 'конечное значение f(Xmin) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a, b, Eps, Xmin, Ymin As Double Dim t As String a = CDbl(TextBox1.Text) b = CDbl(TextBox2.Text) Eps = CDbl(TextBox3.Text) zolot(a, b, Eps, t, Xmin, Ymin) TextBox4.Text = t TextBox5.Text = CStr(Xmin) TextBox6.Text = CStr(Ymin) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub End Class
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |