Главная страница
Навигация по странице:

  • Прикладной математики

  • МО 1 станкин. Воронков МО1. Лабораторная работа 1 Одномерная оптимизация


    Скачать 1.61 Mb.
    НазваниеЛабораторная работа 1 Одномерная оптимизация
    АнкорМО 1 станкин
    Дата17.03.2021
    Размер1.61 Mb.
    Формат файлаpdf
    Имя файлаВоронков МО1.pdf
    ТипЛабораторная работа
    #185761

    МИНОБРНАУКИ РОССИИ
    федеральное государственное бюджетное образовательное учреждение
    высшего образования
    «Московский государственный технологический университет «СТАНКИН»
    (ФГБОУ ВО «МГТУ «СТАНКИН»)
    Институт
    информационных
    технологий
    Кафедра
    Прикладной математики
    ОТЧЕТ О ВЫПОЛНЕНИИ
    ИНДИВИДУАЛЬНОГО ЗАДАНИЯ ПО ДИСЦИПЛИНЕ
    «Методы оптимизации»
    СТУДЕНТА
    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 { a[k + 1] = x[k]; b[k + 1] = b[k]; x[k + 1] = z[k];
    } 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;
    }
    }
    }
    }


    написать администратору сайта