1курс,2семестр лабы для зачета / лаба5
.docxГУО «БГУИР»
Факультет радиотехники и электроники
Кафедра микро и наноэлектроники
Отчет по
Лабораторной работе №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;
}