Скачиваний:
17
Добавлен:
01.06.2020
Размер:
514.22 Кб
Скачать

ГУО «БГУИР»

Факультет радиотехники и электроники

Кафедра микро и наноэлектроники

Отчет по

Лабораторной работе №5

Методы решения нелинейных уравнений

Подготовил:

Студент гр.943201

Королюк Н.В

Проверила:

Семижон Е.А.

Минск 2020

Цель: изучить численные алгоритмы нахождения корней нелинейных уравнений.

Вариант №11

Код: #include <iostream>

#include <cmath>

#include <fstream>

#include <iomanip>

using namespace std;

double eps = 0.0001;

double countF(double x)

{

return pow(x, 3) + 6 * pow(x, 2) - (0.02 * pow(eps,x))-14;

}

double MP(double x0, double h1)

{

double x1, x2, x3, r, d, p, q, D, cc;

double z[3] = { 0,0,0 };

double y[4] = { 0,0,0,0 };

double zm[3] = { 0,0,0 };

int it, s;

x1 = x0 - h1;

x2 = x0;

x3 = x0 + h1;

y[1] = countF(x1);

y[2] = countF(x2);

y[3] = countF(x3);

it = 0;

do

{

it = it + 1;

z[1] = x1 - x3;

z[2] = x2 - x3;

r = y[3];

d = z[1] * z[2] * (z[1] - z[2]);

p = ((y[1] - y[3]) * z[2] - (y[2] - y[3]) / z[1]) / d;

q = -((y[1] - y[3]) * pow(z[2], 2) - (y[2] - y[3]) * pow(z[1], 2)) / d;

cc = fabs(pow(q, 2) - 4 * p * r);

D = pow(cc, 0.5);

zm[1] = (-q + D) / (p * 2);

zm[2] = (-q - D) / (p * 2);

if (fabs(zm[1]) < fabs(zm[2]))

zm[0] = fabs(zm[1]);

else

zm[0] = fabs(zm[2]);

x1 = x2;

x2 = x3;

y[1] = y[2];

y[2] = y[3];

x3 = x3 + zm[0];

y[3] = countF(x3);

s = 0;

if (fabs(zm[0]) < eps)

s = 1;

if (it > 100)

s = 1;

} while (s != 1);

return x3;

}

double a = 4;

double b = 8;

int m = 50;

int temp;

double x, y, h, xa, z;

int main()

{

h = (b - a) / m;

x = a;

while (x <= b)

{

y = countF(x);

cout << fixed << x << "\t" << y << endl;

x = x + h;

}

do

{

cout << endl << "Enter x0: ";

cin >> xa;

cout << endl;

z = MP(xa, h);

cout << "Solution: " << z << endl;

temp = 0;

cout << "Find more radicals? " << endl << "'0'-YES" << endl << "'1'-NO" << endl;

cin >> temp;

} while (temp != 1);

return 0;

}

Соседние файлы в папке 1курс,2семестр лабы для зачета