Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Лабораторная работа по "Вычислительной математике"

Автор:   •  Март 2, 2023  •  Лабораторная работа  •  1,322 Слов (6 Страниц)  •  166 Просмотры

Страница 1 из 6

ГУАП

КАФЕДРА №

ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №

по курсу: ВЫЧИСЛИТЕЛЬНАЯ МАТЕМАТИКА

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

подпись, дата

инициалы, фамилия

Санкт-Петербург 2023

Цель работы:

а) освоение методов решения нелинейных уравнений;

б) совершенствование навыков по алгоритмизации и программированию вычислительных задач.

Постановка задачи:

Вариант для реализации решения – 2.

[pic 1]

Математическая часть: [pic 2]

[pic 3][pic 4]

[pic 5]

Аналитические расчеты:[pic 6]

Рисунок 1 – Ручной счет с помощью онлайн калькулятора (где x1 – это значение ф(x), а x – аргумент ф(x))

[pic 7]

Рисунок 2 – График начальной функции y(x)

Рисунок 3 – График функций y=x и y=ф(x)[pic 8]

Рисунок 4 – Метод итераций[pic 9]

Блок-схемы алгоритмов:

[pic 10]

Рисунок 5 – Блок-схема алгоритм функции FindSolution

[pic 11]

Рисунок 6 – Блок-схема алгоритм функции main

[pic 12]

Рисунок 7 – Блок-схема алгоритм процедуры InputOutput

[pic 13]

Рисунок 8 – Блок-схема алгоритм функции GetValueFromConsole

Код программы:

Таблица 1 – Код программы

#include <iostream>

#define _USE_MATH_DEFINES

#include <math.h>

using namespace std;

double GetValueFromConsole(string str);

double FindSolution(double x, double a, double b, double c, double e);

void InputOutput();

int main()

{

        InputOutput();

}

void InputOutput()

{

        setlocale(LC_ALL, "Russian");

        string inputConsole = "";

        cout << "Enter value 0 (exit) or the other (continue): ";

        cin >> inputConsole;

        while (inputConsole != "0")

        {

                cout << "\n";

                cout << fixed;

                cout.precision(4);

                cout << "Function is: f(x) = a * x + b * sin(x) + c" << "\n\n";

                double a = GetValueFromConsole("a");

                double b = GetValueFromConsole("b");

                double c = GetValueFromConsole("c");

                double e = GetValueFromConsole("e");

                double x0 = GetValueFromConsole("x0");

                double root = FindSolution(x0, a, b, c, e);

                double fx = a * root + b * sin(root) + c;

                cout << "Approximate root is: " << root << " | Accuracy epsilon = "                                          << e << " | f(root) = " <<

                             fx << "\n\n";

                cout << "Enter value 0 (exit) or the other (continue): ";

                cin >> inputConsole;

        }

}

double GetValueFromConsole(string str)

{

        double i;

        cout << "Enter " << str << ": ";

        cin >> i;

        while (cin.fail())

        {

                cout << "\nWrite " << str << " again. Incorrect input!\n\n";

                cin.clear();

                cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

                cout << "Enter " << str << " again:";

                cin >> i;

        }

        cout << "\n";

        return i;

}

double FindSolution(double x, double a, double b, double c, double e)

{

        double arg;

        double fx;

        int i = 0;

        cout << "Function ф(x) = (-b * sin(x) - c) / a" << "\n\n";

        cout << "--------------------------" << "\n\n";

        do

        {

                i++;

                arg = x;

                cout << "Iteration: " << i << " | Argument: " << arg;

                x = (-b * sin(x) - c) / a;

                fx = a * x + b * sin(x) + c;

                cout << " | Value: " << x << " | f(value) = " << fx << "\n\n";

        }

        while (abs(arg - x) > e && i < 1000);

        cout << "--------------------------" << "\n\n";

        if (i < 1000)

        {

                cout << "All iterations: " << i << "\n\n";

        }

        else

        {

                cout << "All iterations: " << i << "\n\n" << "Unfortunately, the solution require very much iterations, so the root is not exact\n\n";

        }

        return x;

}

...

Скачать:   txt (6.5 Kb)   pdf (574.7 Kb)   docx (471.4 Kb)  
Продолжить читать еще 5 страниц(ы) »
Доступно только на Essays.club