Смекни!
smekni.com

по численным методам (стр. 4 из 5)

//метод итераций длЯ решениЯ кубических уравнений

#include<math.h>

#include<iostream.h>

double a[4]={0},

b[3]={0},

prec=0.00000;

double minim=0, maxim=0;

void Hello(void);

void Input();

void Derivative();

void Calculation();

double Calc_Fun(double);

double Calc_First(double);

main(void)

{

Hello();

Input();

Derivative();

Calculation();

return 0;

}

void Hello(void)

{

cout<<"Программа длЯ решениЯ кубических уравнений методом итераций.&bsol;n&bsol;n";

}

void Input()

{

cout<<"Кубическое уравнение имеет вид"<<endl

<<"a1*x^3+a2*x^2+a3*x+a4=0"<<endl<<endl;

for (int i=0;i<4;i++)

{

cout<<"Введите значение коэффициента a["<<i+1<<"] : ";

cin>>a[i];

}

cout<<endl<<"Необходимо указать интервал поиска решениЯ."<<endl

<<"Введите нижнюю границу поиска : ";

cin>>minim;

cout<<"Введите верхнюю границу поиска : ";

cin>>maxim;

while(minim==maxim||minim>maxim)

{

cout<<"&bsol;nНижнЯЯ граница должна быть меньше верхней и не может быть ей

равна." <<endl

<<"Повторите ввод нижней границы : ";

cin>>minim;

cout<<"Повторите ввод верхней границы : ";

cin>>maxim;

}

cout<<"Введите допустимую погрешность : ";

cin>>prec;

}

void Derivative()

{

b[0]=a[0]*3;

b[1]=a[1]*2;

b[2]=a[2];

}

void Calculation()

{

double x=0, x_old=0, m=0;

cout<<"-------------------------------------------------"<<endl

<<"| Xn | f(Xn) | X(n+1)-Xn |"<<endl

<<"-------------------------------------------------"<<endl;

if(fabs(Calc_First(minim))>fabs(Calc_First(maxim))) m=x=x_old=minim;

else m=x=x_old=maxim;

m=fabs(1/Calc_First(m));

cout<<"|";

cout.width(15);cout.precision(10);

cout<<x;

cout<<"|";

cout.width(15);cout.precision(10);

cout<<Calc_Fun(x);

cout<<"| |&bsol;n";

if(Calc_First(x)>0)

{

do

{

x_old=x;

x=x_old-m*Calc_Fun(x_old);

cout<<"|";

cout.width(15);cout.precision(10);

cout<<x;

cout<<"|";

cout.width(15);cout.precision(10);

cout<<Calc_Fun(x);

cout<<"|";

cout.width(15);cout.precision(10);

cout<<fabs( Calc_Fun(x) - Calc_Fun(x_old) );

cout<<"|&bsol;n";

}

while(( fabs( Calc_Fun(x) - Calc_Fun(x_old) ) )>prec);

}

else

{

do

{

x_old=x;

x=x_old+m*Calc_Fun(x_old);

cout<<"|";

cout.width(15);cout.precision(10);

cout<<x;

cout<<"|";

cout.width(15);cout.precision(10);

cout<<Calc_Fun(x);

cout<<"|";

cout.width(15);cout.precision(10);

cout<<fabs( Calc_Fun(x) - Calc_Fun(x_old) );

cout<<"|&bsol;n";

}

while(( fabs( Calc_Fun(x) - Calc_Fun(x_old) ) )>prec);

}

cout<<"-------------------------------------------------";

}

double Calc_Fun(double x)

{

return (a[0]*x*x*x+a[1]*x*x+a[2]*x+a[3]);

}

double Calc_First(double x)

{

return (b[0]*x*x+b[1]*x+b[2]);

}


Программа длЯ решениЯ кубических уравнений методом итераций.

Кубическое уравнение имеет вид

a1*x^3+a2*x^2+a3*x+a4=0

Введите значение коэффициента a[1] : 1

Введите значение коэффициента a[2] : -6

Введите значение коэффициента a[3] : -9

Введите значение коэффициента a[4] : 58

Необходимо указать интервал поиска решениЯ.

Введите нижнюю границу поиска : -4

Введите верхнюю границу поиска : -3

Введите допустимую погрешность : 0.00005

-------------------------------------------------

| Xn | f(Xn) | X(n+1)-Xn |

-------------------------------------------------

| -4| -66| |

| -3.24137931| -9.922506048| 56.07749395|

| -3.127327517| -3.12093462| 6.801571427|

| -3.091454705| -1.064778438| 2.056156183|

| -3.079215872| -0.372281515| 0.6924969227|

| -3.074936774| -0.131239433| 0.241042082|

| -3.073428275| -0.04639844126| 0.08484099175|

| -3.07289496| -0.01642029825| 0.02997814301|

| -3.072706221|-0.005813178631| 0.01060711962|

| -3.072639403|-0.002058264249| 0.003754914382|

| -3.072615744|-0.000728799396| 0.001329464852|

| -3.072607367|-0.000258060628|0.0004707387678|

| -3.072604401|-9.137721784e-0|0.0001666834108|

| -3.072603351|-3.235601088e-0|5.902120696e-05|

| -3.072602979|-1.145703711e-0|2.089897377e-05|

-------------------------------------------------

Программа длЯ решениЯ кубических уравнений методом итераций.

Кубическое уравнение имеет вид

a1*x^3+a2*x^2+a3*x+a4=0

Введите значение коэффициента a[1] : 1

Введите значение коэффициента a[2] : -6

Введите значение коэффициента a[3] : -9

Введите значение коэффициента a[4] : 58

Необходимо указать интервал поиска решениЯ.

Введите нижнюю границу поиска : 3

Введите верхнюю границу поиска : 4

Введите допустимую погрешность : 0.00005

-------------------------------------------------

| Xn | f(Xn) | X(n+1)-Xn |

-------------------------------------------------

| 3| 4| |

| 3.222222222| 0.159122085| 3.840877915|

| 3.231062338| 0.01338370012| 0.1457383849|

| 3.231805877| 0.001151957391| 0.01223174272|

| 3.231869875|9.934183961e-05| 0.001052615552|

| 3.231875394|8.568402322e-06|9.077343728e-05|

| 3.23187587|7.390497921e-07| 7.82935253e-06|

-------------------------------------------------


Программа длЯ решениЯ кубических уравнений методом итераций.

Кубическое уравнение имеет вид

a1*x^3+a2*x^2+a3*x+a4=0

Введите значение коэффициента a[1] : 1

Введите значение коэффициента a[2] : -6

Введите значение коэффициента a[3] : -9

Введите значение коэффициента a[4] : 58

Необходимо указать интервал поиска решениЯ.

Введите нижнюю границу поиска : 5

Введите верхнюю границу поиска : 6

Введите допустимую погрешность : 0.00005

-------------------------------------------------

| Xn | f(Xn) | X(n+1)-Xn |

-------------------------------------------------

| 6| 4| |

| 5.851851852| 0.2601229487| 3.739877051|

| 5.842217669| 0.0346921878| 0.2254307609|

| 5.840932773| 0.004788677115| 0.02990351069|

| 5.840755414|0.0006639855431| 0.004124691572|

| 5.840730822|9.212373716e-05|0.0005718618059|

| 5.84072741|1.278267885e-05|7.934105832e-05|

| 5.840726937|1.773688694e-06|1.100899016e-05|

-------------------------------------------------


Решив уравнение

, получили корень

Метод

Корень № 1

Корень № 2

Корень № 3

Хорд -3,072638 3,231881 5,840724
Касательных (Ньютона) -3,072616 3,231855 5,840726
Итераций -3,072602 3,231875 5,840726

Для дальнейших расчетов будем использовать среднее арифметическое значение полученных корней.


3. Используя полученные значения, определим собственные значения исходной матрицы.

Собственные вектора матрицы А=

определим по формуле

Для нашей матрицы, данная формула примет следующий вид

Коэффициенты

определяются по схеме Горнера:

Для

имеем:

Для

имеем:

Для

имеем:

Далее можем найти собственные векторы:


4. Для контроля полученных значений, развернем исходную матрицу А=
, и определим ее собственные векторы методом непосредственного развертывания.

Характеристический многочлен для данной матрицы имеет вид:

.

Находим

.

Число диагональных миноров второго порядка у матрицы второго порядка

.

Выписываем эти миноры и складываем их:

.

И, в заключение, находим

Таким образом, характеристическое уравнение имеет вид

Данное уравнение идентично уравнению, полученному при помощи метода Крылова. Нет смысла заново его решать. Воспользуемся уже вычисленными корнями (их средним значением).

Определим собственный вектор

, соответствующий
.