Вы находитесь на странице: 1из 9

Министерство Образования, Культуры и Исследований

Технический Университет Молдовы


Факультет Вычислительной техники, Информатики и Микроэлектроники
Департамент Информатики и Системной Инженерии

Лабораторная работа №1
Тема: «REZOLVAREA NUMERICĂ A ECUAŢIILOR ALGEBRICE ŞI
TRANSCENDENTE.»
Предмет: Metode si modele de calcul

Выполнил: Гончарова Ольга


Группа: IA-192

КИШИНЕВ 2020
Цель работы:
1. Отделить все реальные корни уравнения f (x)=0, где y=f (x)является реальной функцией
реальной переменной.
2. Определить реальный корень данного уравнения с помощью метода полувыведения
интервала с ошибкой ниже ꜫ=10-2.
3. Указать полученный корень с точностью ꜫ=10-6. С помощью методов:
- метод последовательных аппроксимаций(приближений)
- метод касательных (Ньютон)
- метод секанций.
4. Сравнить результаты с учетом количества итераций, оценки функций и производных

Задание: a) (2-x)*ex -0,5


b) x 3 -12x+3

Решение:
Разделение корней графическим методом:
ex
1. а)(2-x) -0.5
Уравнение представим в виде: (2-x)ex=0.5, разделим на 2 функции:
y1=(2-x)ex,y2= 0.5
Построим график функции (2-x)ex-0.5 :

У данного уравнения есть два корня: r ∈(0.097,1.903)


Абсцисса точки пересечения графиков r1 лежит на интервале: [-1;1]
Абсцисса точки пересечения графиков r2 лежит на интервале: [1;3]

1. b) x3-12x+3
Уравнение представим в виде: x3=12x-3, разделим на 2 функции:
y1=x3,y2= 12x-3
Построим график функции x3-12x+3:

У данного уравнения есть три корня: r ∈(3.332, 0.251 ,−3,583)

Абсцисса точки пересечения графиков r1 лежит на интервале: [-4;-3]


Абсцисса точки пересечения графиков r2 лежит на интервале: [-1;2]
Абсцисса точки пересечения графиков r3 лежит на интервале: [2;4]

2) Разделение корней аналитическим методом:


ex
2. а) (2-x) -0.5
Найдем производную уравнения: f’(x)= (2-x)^ex-0.5=-e(2-x)-1+ex(x+(-2+x)log(2-x))

Данный метод не подходит для отделения корней функции!! (2-x)ex-0.5


Разделим уравнение на две части и найдем корни графическим методом: (2-x)ex=0.5

Составим таблицу. В первую строку поместим в порядке возрастания концы интервалов и точки
экстремумов, во второй знаки функции в этой точке.
x -∞ -√1 √3 +∞
F(x)

2. b) x3-12x+3
Найдем производную уравнения: f’(x)=3x2-12=>3x2=12=>x2=12/3=>x2=4=>x=+-√4=>x=-+2
x -∞ -10 -2 2 10 +∞
F(x) - - + - + +
f(-2)=(-2)3-12*(-2)+3=19
f(2)=23-12*2+3=-13
f(-10)=(-10)3-12*(-10)+3=-877
f(10)=103-12*10+3= 883

x -10 -4 -2 2 4 +10
F(x) - - + - + +

f(-4)=(-4)3-12*(-4)+3=-13
f(4)=43-12*4+3=19

x -4 -2 0 2 4
F(x) - + + - +

f(0)=03-12*0+3=3
x -4 -2 0 1 2 4
F(x) - + + - - +

f(1)=13-12*1+3=-8
Первый корень находится в интервале: [ -4; -2]
Второй корень находится в интервале: [0; 1]
Третий корень находится в интервале: [2; 4]
3) Метод последовательных приближений

a) (2-x)ex-0.5
Рассмотрим интервал [-1;1]

f’(x)= (2-x)^ex-0.5=-e(2-x)-1+ex(x+(-2+x)log(2-x))

Найдём наибольшее значение функции f’:


Max| f(x)’|=f(1)’=-e(2-1)-1+e1(1+(-2+1)log(2-1)=2,718

Найдём лямбду : λ=¿1/2,718=0,367

Найдем середину отрезка:


[-1; 1]=-1+1-(-1)/2=-1+1=0
Возьмём в качестве x0 середину отрезка: x0=0

Выполним программу:
Данный метод не подходит для решения этого уравнения!!!
b)x3-12x+3
Рассмотрим первый интервал: [ -4; -3]

f’(x)=3x2-12

Найдём наибольшее значение функции f’:


Max| f(x)’|=f(-3)’=3*(-3)2-12=15

Найдём лямбду : λ=¿1/15=0,066

Найдем середину отрезка:


[-4;-3]=-4+(-3)-(-4)/2=-3,5
Возьмём в качестве x0 середину отрезка: x0=-3,5

Выполним программу:

Рассмотрим второй интервал: [0; 1]

f’(x)=3x2-12

Найдём наибольшее значение функции f’:


Max| f(x)’|=f(1)’=3*(1)2-12=-9

Найдём лямбду : λ=¿1/(-9)=-0,111

Найдем середину отрезка:


[0;1]=0+1-0/2=0,5
Возьмём в качестве x0 середину отрезка: x0=0,5

Выполним программу:
Рассмотрим третий интервал: [2; 4]

f’(x)=3x2-12

Найдём наибольшее значение функции f’:


Max| f(x)’|=f(4)’=3*(4)2-12=36

Найдём лямбду : λ=¿1/36=0,027

Найдем середину отрезка:


[2;4]=2+(4-2)/2=3
Возьмём в качестве x0 середину отрезка: x0=3

Выполним программу:

Исходный код программы:


#include <conio.h>
#include <math.h>
#include <iostream>
#include <locale>

using namespace std;


double f(double x)
{
return x*x*x-12*x+3;
}
double fi(double x, double L)
{
// условие сходимости
return x-L*f(x);
}

int main()

setlocale(LC_CTYPE, "rus");

// количество итераций

int n = 0;

// x - начальное приближение

// L - константа (лямбда)

// eps - погрешность

double x = 3, y, b, L = 0.027, eps = 0.000001;


do

{
// вычисляем следующих х
y = fi(x, L);

// модуль |x-y|

// условие завершения итерационного процесса

b = fabs(x-y);

// запоминаем полученный х

x = y;

// увеличиваем число итераций

n += 1;

while (b>=eps); //сравниваем полученный результат с погрешностью

cout<<"Найденный корень: x = "<< x << "\n";

cout<<"Количество итераций: n = "<< n <<"\n";

cout<<"Итерация завершена: b = "<< b << " < " << eps <<

"\n";

cout<<"Значение функции в данном корне: f("<< x << ") = " << f(x);

return 0;

}
Вывод: