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

Вычислительные методы

Автор:   •  Май 21, 2018  •  Задача  •  2,007 Слов (9 Страниц)  •  412 Просмотры

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

МЕТОД ПОЛОВИННОГО ДЕЛЕНИЯ

#include <iostream>

#include <cmath>

using namespace std;

float f(float x) // functions mpd - "metod polovinnogo deleniya"

{

return 4 * x - 5;

}

int main()

{

double a, b, c, eps;

//Ввдоим данные

cout << "a: "; cin >> a; //Начало отрезка на котором рассматриваем

cout << "b: "; cin >> b; //Конец отрезка на котором рассматриваем

cout << "eps: "; cin >> eps; //Точность

while (fabs(b - a) > eps) //условие выхода из алгоритма

{

c = (a + b) / 2; // Вычисляем середину отрезка ab

if (f(b) * f(c) <= 0) //Тут мы проверяем знаки и поэтому тут умножение,тип должно быть одного знака

a = c; // Если это так то теперь начало нового отрезка, это середина старого

else

b = c; //Если знаки разыне, то конец отрезка приравниваем середине

}

cout << c << endl; //Вывод ответа

system("pause");

return 0;

}

Визуализация тут можно посмотреть https://www.youtube.com/watch?v=GhW6zk4abxc

МЕТОД КАСАТЕЛЬНЫХ

#include <iostream>

using namespace std;

double f(double x) //возвращает значение функции f(x) = x^2-2

{

return x*x - 2;

}

double f1(float x) //возвращает значение производной

{

return 2 * x;

}

double f2(float x) // возвращает значение второй производной

{

return 2;

}

int main()

{

setlocale(LC_ALL, "Rus");

//ввод данных

double a, b,c,eps;

cout << "a: "; cin >> a; //начало отрезка

cout << "b: "; cin >> b; //конец отрезка

cout << "eps: "; cin >> eps; //точность

if (f(a)*f(b) > 0) // если знаки функции на краях отрезка одинаковые, то здесь нет корня,график не проходит через абциссу(OX)

cout << "\nНет корней на данном интервале\n";

else {

if (f(a)*f2(a) > 0) // Выбираем с какой стороны будем проводить касательную,c конца или начала.

//Вторая производная функции отвечает за выпуклость или вогнутость графика функции, из за этого мы и проверяем.

//f2(x) > 0 , то график - вогнутый f2(x) < 0,то график - выпуклый

c = a;

else

c = b;

do {

c = c - f(c) / f1(c); // само уравнение касательной

} while (fabs(f(c)) >= eps); //выход из нашего алгоритма, пока не будет найдена заданная точность

cout << "x: " << c << endl; //вывод корня

}

system("pause");

Ее вопросы:

Вывести c = c - f(c) / f1(c);

Уравнение касательное имеет вид y=〖f(x_0 )+f〗^' (x_0 )(x-x_0)

y=0

0=〖f(x_0 )+f〗^' (x_0 )(x-x_0)

-〖f(x_0 )=f〗^' (x_0 )(x-x_0)

-〖f(x_0 )/(f^' (x_0 ) )=〗^ x-x_0

-〖f(x_0 )/(f^' (x_0 ) )=〗^ x-x_0

x_0-〖f(x_0 )/(f^' (x_0 ) )=〗^ x

x=x_0-〖f(x_0 )/(f^' (x_0 ) )〗^ где x_0 точка в которой ищем касательную, в коде x_0=c

Показать на графике эту c,

...

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