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

  • ОТЧЁТ по лабораторной работе № 1

  • ЦЕЛЬ РАБОТЫ

  • БЛОК-СХЕМА

  • ТЕСТИРОВАНИЕ

  • МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ И ТРАНСЦЕНДЕНТНЫХ УРАВНЕНИЙ. Отчёт по лабораторной работе


    Скачать 0.52 Mb.
    НазваниеОтчёт по лабораторной работе
    АнкорМЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ И ТРАНСЦЕНДЕНТНЫХ УРАВНЕНИЙ
    Дата21.11.2022
    Размер0.52 Mb.
    Формат файлаdocx
    Имя файлаlaba№1-Kusyak.docx
    ТипПрограмма
    #804381

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

    ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

    ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

    ВЫСШЕГО ОБРАЗОВАНИЯ

    «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

    ________________________________________________________________



    ОТЧЁТ

    по лабораторной работе №1

    «МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ И ТРАНСЦЕНДЕНТНЫХ УРАВНЕНИЙ»


    по дисциплине:

    «Программирование»


    Выполнил:
    Кусяк М.Д.


    Группа АТ-04

    Проверил:
    Кухто А.В.


    Новосибирск

    2021

    ЦЕЛЬ РАБОТЫ:

    7 вариант. Найти все корни уравнения на заданном интервале. Для этого необходимо вычислить таблицу значений функции на заданном интервале с шагом h, определить отрезки, на концах которых функция меняет знак и на каждом отрезке уточнить корень с точностью до eps при помощи различных методов для каждого отрезка.

    ХОД РАБОТЫ:

    Программа состоит из функции int main (), в которой вычисляется 1 корень данного уравнения. Сначала выводится таблица значений с шагом h = 0,05. В массив сохраняются точки, в которых функция меняет знак (y(x) * y(x1) < 0). По этим точкам определяются отрезки, на концах которых функция меняет знак. Далее на отрезке уточняется корень уравнения методом половинного деления.

    БЛОК-СХЕМА:

    Метод половинного деления



    Метод хорд



    ЛИСТИНГ:
    #include

    #include

    #include

    #include

    #include
    double function(double x)

    {

    double y;

    y = 2*x*x*x-9*x*x-60*x+1;

    return y;

    }

    int main()

    {

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    const float eps = 0.001;

    double a, b, x, x1, y, y1, xmin = -4, xmax = 1, h = 0.05;

    float roots[10];

    int n = 0, n1;

    y = function(xmin);

    for (float i = xmin; i <= xmax; i = i + h)

    {

    y1 = function(i);

    if ((y * y1) < 0)

    {

    printf("Конец отрезка ");

    roots[n] = i; n++;

    }

    y = y1;

    printf("x = %10.2llf y = %10.3llf\n", i, y);

    }

    x = roots[0] - h; a = roots[0] - h; b = roots[0]; n = 0;

    while (fabs(function(x)) >= eps)

    {

    x = (a + b) / 2;

    if (function(x) * function(a) < 0)

    {

    b = x; n++;

    }

    else

    {

    a = x; n++;

    }
    }

    printf("Корень x1 = %10.3llf количество итераций : %5d\n", x, n);

    x1 = roots[1] - h; a = roots[1] - h; b = roots[1]; n1 = 0;

    while (fabs(function(b) - function(a)) >= eps)

    {

    x1 = (function(b) * a - function(a) * b) / (function(b) - function(a));

    if ((function(a) * function(x1)) > 0)

    {

    a = x1; n1++;

    }

    else

    {

    b = x1; n1++;

    }
    }
    printf("Корень x2 = %10.3llf количество итераций : %5d\n", x1, n1);

    _getch();
    }

    ТЕСТИРОВАНИЕ:




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