. Исходную систему линейных уравнений решить методом Жордана-Гаусса.
Решение. Метод Крылова основан на свойстве квадратной матрицы обращать в
нуль свой характеристический многочлен.
Согласно теореме Гамильтона-Кали, всякая квадратная матрица является
корнем своего характеристического многочлена и, следовательно, обращает
его в нуль.
Пусть
– (1)
характеристический многочлен.
, получим
. (2)
Возьмем произвольный ненулевой вектор
. (3)
:
(4)
Положим
, (5)
т.е.
(6)
Учитывая (5), выражение (4) запишем в виде
, (7)
или в виде
являются коэффициентами характеристического многочлена (1).
характеристического многочлена, то метод Крылова дает возможность
найти соответствующие собственные векторы по следующей формуле:
(8)
определяются по схеме Горнера
(9)
методом Крылова.
Выберем в качестве начального следующий вектор:
Вычислим
Составим матричное уравнение
Полученную систему уравнений решим методом Жордана-Гаусса.
.
имеет вид
необходимо решить полученное характеристическое уравнение третьей
степени
Данное кубическое уравнение невозможно решить стандартными средствами.
Воспользуемся для этой цели числовыми методами, а точнее методами
приближенного вычисления.
2.1 Исследование функции.
Вычислим первую и вторую производные данной функции
Необходимо выбрать интервал, на котором будем находить решение.
Для отделения корней существует несколько способов. Наиболее популярные
из них – графический и аналитический.
В литературе рассматриваются эти способы по отдельности. По заданию
курсовой работы требуется отделить корни каждым из этих способов. Рискну
нарушить это требование, и объединить эти два способа в один. То есть
исследовать функцию аналитически и по результатам исследования построить
приблизительный график функции.
.
Приравняв первую производную к нулю, мы можем получить критические точки
данной функции (точки минимумов и максимумов, или же точки, в которых
функция не определена).
Стоит отметить, что для вычисления квадратного корня, также применимы
числовые методы, на которых и основаны микрокалькуляторы и программы для
ЭВМ. Данные методы основаны на логарифмировании корня и последующего
вычисления.
вычисляется при помощи числового ряда
. Изменив знак равенства на знак неравенства (), можем найти
промежутки возрастания и убывания функции.
.
Приравняв вторую производную к нулю, мы можем найти точку перегиба и,
соответственно, найти интервал, на котором функция выпуклая и вогнутая.
.
.
Далее рассмотрим оставшиеся два интервала.
– значение функции отрицательно, а в первой критической точке
положительно, то будем сужать этот промежуток. В данном случае применим
метод половинного деления.
.
и до бесконечности.
На основании произведенного анализа построим график исходной функции.
2.2 Метод хорд.
Сразу необходимо заметить, что существуют два случая (варианта) при
решении методом хорд.
.
В этом случае итерационный процесс осуществляем по формуле
.
В этом случае итерационный процесс осуществляем по формуле
Для оценки точности приближение можно воспользоваться формулой
,
– точное значение корня.
.
.
Так как первая и вторые производные в точке, от которой мы начинаем
работать имеют различные знаки, то работаем по второму варианту.
Результаты вычисления приведены в таблице.
.
Так как первая и вторые производные в точке, от которой мы начинаем
работать имеют различные знаки, то работаем по второму варианту.
Результаты вычисления приведены в таблице.
.
Так как первая и вторые производные в точке, от которой мы начинаем
работать имеют одинаковые знаки, то работаем по первому варианту.
Результаты вычисления приведены в таблице.
.
2.3 Метод касательных (метод Ньютона).
В век повальной компьютеризации не есть хорошо считать при помощи
логарифмической линейки. Поэтому, разработаем алгоритм и прикладную
программу для решения кубических уравнений методом Ньютона.
Ниже приведена блок-схема алгоритма и листинг программы, реализующей
данный алгоритм на языке С++. Также привожу текст, которая выдает данная
программа при решении исходного уравнения.
//метод Ньютона длЯ решениЯ кубических уравнений
#include #include double a[4]={0}, b[3]={0}, c[2]={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); double Calc_Second(double); main(void) { Hello(); Input(); Derivative(); Calculation(); return 0; } void Hello(void) { cout>a[i]; } cout>minim; cout>maxim; while(minim==maxim||minim>maxim) { cout>minim; cout>maxim; } cout>prec; } void Derivative() { b[0]=a[0]*3; b[1]=a[1]*2; b[2]=a[2]; c[0]=b[0]*2; c[1]=b[1]; cout0) x=minim; else x=maxim; if (Calc_First(minim)>Calc_First(maxim)) m=abs(Calc_First(maxim)); else m=abs(Calc_First(minim)); coutprec) { x=(x-(Calc_Fun(x)/Calc_First(x))); coutU&
b
U
EII&
(
*
P
R
T
V
b
?
?
?
O
O
Oe
U
Ue
TH
??????????????E? ???? ??
????????Й?Й???????E? ???? ?Й?Й??
yuyuyuyiiiiiii
oooo
” A
ooooooo
ooooo
ooooo
FfaW
ooooo
ooooo
Ff?]
ooooo
ooooo
wkd
j
j
j
j?
j?
N
W(W,W@WTWrW’W?W¬WIWyyoeeeeeeeeeeeeeeeeeeeeeeee
^"^&^oooooooooooooooooooooooooooo
cGcgcsc—c!coooooooooooooooooooooooooooo
eBe_eneqee?eEeEeoeeoe(foooooooooooooooooooooooooooo
„`„
?????
3| 4| 0.4444444444|
| 3.222222222| 0.159122085| 0.01768023167|
| 3.231855174| 0.000341137633|3.790418145e-05|
-------------------------------------------------
Программа длЯ решениЯ кубических уравнений методом касательных (метод
Ньютона).
Кубическое уравнение имеет вид
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
Исходное уравнение имеет вид :
1x^3+(-6)x^2+(-9)x+(58)=0
ПерваЯ производнаЯ имеет вид :
f'(x)=3x^2+(-12)x+(-9)
ВтораЯ производнаЯ имеет вид :
f''(x)=6x+(-12)
-------------------------------------------------
| Xn | f(Xn) | |f(Xn)|/m |
-------------------------------------------------
| 6| 4| 0.6666666667|
| 5.851851852| 0.2601229487| 0.04335382479|
| 5.840787634| 0.001413241032| 0.000235540172|
| 5.840726862|4.255405933e-08|7.092343222e-09|
-------------------------------------------------
2.4 Метод итераций. Как и для предыдущего метода, привожу блок-схему
алгоритма решения и листинг программы, реализующей этот алгоритм на
языке программирования С++.
//метод итераций длЯ решениЯ кубических уравнений
#include #include 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>a[i]; } cout>minim; cout>maxim; while(minim==maxim||minim>maxim) { cout>minim; cout>maxim; } cout>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; coutfabs(Calc_First(maxim))) m=x=x_old=minim; else m=x=x_old=maxim; m=fabs(1/Calc_First(m)); cout0) { do { x_old=x; x=x_old-m*Calc_Fun(x_old); coutprec); } else { do { x_old=x; x=x_old+m*Calc_Fun(x_old); coutprec); } cout3. Используя полученные значения, определим собственные значения
исходной матрицы.
определим по формуле
Для нашей матрицы, данная формула примет следующий вид
определяются по схеме Горнера:
имеем:
имеем:
имеем:
Далее можем найти собственные векторы:
, и определим ее собственные векторы методом непосредственного
развертывания.
Характеристический многочлен для данной матрицы имеет вид:
.
.
.
Выписываем эти миноры и складываем их:
.
И, в заключение, находим
Таким образом, характеристическое уравнение имеет вид
Данное уравнение идентично уравнению, полученному при помощи метода
Крылова. Нет смысла заново его решать. Воспользуемся уже вычисленными
корнями (их средним значением).
.
, или
и подставим его в первое уравнение системы
.
будет:
.
:
Как видно, мы получил идентичный, до третьего знака, результат.
.
, или
и подставим его в первое уравнение системы
.
будет:
.
:
Как видно, мы получил идентичный, до третьего знака, результат.
.
, или
и подставим его в первое уравнение системы
.
будет:
.
:
Как видно, мы получил идентичный, до третьего знака, результат.
Нашли опечатку? Выделите и нажмите CTRL+Enter