Int main(void)
{ int i,n;
long curx;
cout<<"Enter N: ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"Enter X"<<setw(2)<<i<<": ";
cin>>curx;
cout<<"Min digit ="<<setw(2)<<mindig(labs(curx))<<endl;
}
return 0;
}
Контрольный расчет.
Лабораторная работа №7
Тема «Применение функций для решения нелинейных уравнений»
Цель работы: Изучение функций в языке С++, локальные и глобальные переменные. Знакомство с основными методами решения нелинейных уравнений.
Задание. Для заданного нелинейного уравнения выполнить следующие действия:
Найти интервал изоляции одного из корней.
Написать программу на языке С++ для вычисления корней нелинейного уравнения согласно своего варианта, погрешность расчета принять е=0,0001. В программе реализовать два указанных в варианте метода (1– метод половинного деления, 2- метод хорд, 3- метод касательных, 4- метод простой итерации). Для каждого метода написать функцию, реализующую этот метод. При запуске программы должен выводиться запрос, каким способом будет решаться нелинейное уравнение. Результатом работы программы будет значение корня на введенном интервале и количество итераций.
В отчете предоставить описание заданных методов, блок-схемы 2-х функций, реализующих методы решения, блок-схему основной функции и текст программы. Также в отчете должен быть нарисован график заданной функции с интервалом изоляции корня.
Вариант 3.
-
№
Уравнение
Методы
3
x2-20sin(x)=0
3,4
Описание заданных методов.
Метод касательных.
При решении
нелинейного уравнения методом касательных
задаются начальное значение аргумента
x0
и точность ε. Затем в точке(x0,F(x0))
проводим касательную к графику F(x) и
определяем точку пересечения касательной
с осью абсцисс x1.
В точке (x1,F(x1))
снова строим касательную, находим
следующее приближение искомого решения
x2
и т.д. Указанную процедуру повторяем
пока |F(xi)|
> ε. Для определения точки пересечения
(i+1) касательной с осью абсцисс воспользуемся
следующей формулой
.
Условие сходимости метода касательных
F(x0)∙F''(x0)>0.
Метод простой итерации.
При решении нелинейного уравнения методом итераций воспользуемся записью уравнения в виде x=f(x). Задаются начальное значение аргумента x0 и точность ε. Первое приближение решения x1 находим из выражения x1=f(x0), второе - x2=f(x1) и т.д. В общем случае i+1 приближение найдем по формуле xi+1 =f(xi). Указанную процедуру повторяем пока |f(xi)|>ε. Условие сходимости метода итераций |f'(x)|<1.
И
золяция
корня.
Корни функции лежат вблизи точек х=0 и х=3.
Блок-схема метода касательных.
Блок-схема метода простой итерации.
Блок-схема основной функции.
Листинг программы.
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
float funct(float x)
{
return (x*x-20*sinf(x));
}
int bystep(void)
{
int k;
float xk,eps;
cout<<"Vvedite nachalnoe pribligenie x0: ";
cin>>xk;
cout<<"Vvedite pogreshnost eps: ";
cin>>eps;
k=1;
do
{xk=funct(xk);//простая итерация
k++;
}while((fabs(funct(xk))>eps)&&(k<10000));//условие заершения
if (k<10000)
cout<<"Null function="<<xk<<", Kol-vo shagov= "<<k<<endl;
else
cout<<"Metod ireraciy ne shoditsa"<<endl;
return 0;
};
int kasat(void)
{
int k;
float xk,eps;
cout<<"Vvedite nachalnoe pribligenie x0: ";
cin>>xk;
cout<<"Vvedite pogreshnost eps: ";
cin>>eps;
k=1;
do
{xk=xk-funct(xk)/(2*xk-20*cosf(xk));//приближение по методу
k++;
}while((fabs(funct(xk))>eps)&&(k<10000));
if (k<10000)
cout<<"Null function="<<xk<<", Kol-vo shagov= "<<k<<endl;
else
cout<<"Metod kasatelnix ne shoditsa"<<endl;
return 0;
};
