Автор работы: Пользователь скрыл имя, 18 Октября 2013 в 22:09, лабораторная работа
Вариант 2.
Решить систему уравнений методом Ньютона и его упрощением с точностью ε=10-6:
- исследовать устойчивость и сходимость методов
- сравнить методы между собой
- начальное приближение найти графически.
Лабораторная работа 4
Решение нелинейных уравнений и систем
Вариант 2.
Решить систему уравнений
методом Ньютона и его
- исследовать устойчивость и сходимость методов
- сравнить методы между собой
- начальное приближение найти графически.
Система:
Системы нелинейных уравнений
или, в векторной форме, , решают практически только итерационными методами: пусть известно некоторое приближение к корню , тогда следующее приближение находят по формуле
где – решение системы линейных уравнений
Данный метод решения системы нелинейных уравнений называется методом Ньютона.
Итерации методом Ньютона продолжают до тех пор, пока не будет получено , где – заданная точность решения.
Нулевое приближение в случае двух переменных можно найти графически: построить на плоскости кривые и и найти точки их пересечения. Для трёх и более переменных удовлетворительных способов подбора нулевых приближений нет.
Задание 1 .Решить систему уравнений методом Ньютона с точностью ε=0,000001:
Система:
Перепишем систему в виде:
X=sin(y+1)-1,2
Y=(3+cos(x))/2
Графически находим начальное приближение x(0)=-1; y(0)=2
Метод Ньютона запишем в координатной форме:
,
.
Перепишем систему в следующем виде:
f1(x,y)= sin(y+1)-x -1,2=0
f2(x,y)=2y-cos x-3=0
Найдём частные производные:
(f1)’ x (x,y)= -1;
(f2 )’x(x,y)=sin(x);
------------------------------
(f1)’ y(x,y)= cos(y+1)-;
(f2 )’y(x,y)=2;
Матрица Якоби:
-1 cos(y+1)
sin(x) 2
Окончательный (рабочий) вид системы:
-1∆x(k)+cos(y+1)∆y(k)= -f1(x(k),y(k)),
sin(x(k))∆x(k)+2∆y(k)= -f2(x(k),y(k)
Теперь можно начинать итерации. Для первой итерации требуются значения и (x(0)=-1; y(0)=2) .Их находим, решая систему:
-1∆x(0)-0,9900∆y(0)= 0.0589
-0,8415*∆x(0)+2∆y(0)= -0,4597
∆x(0)=0.1191
∆y(0)=-0,1798
------------------------------
x(1)=x(0)+ ∆x(0)=-1+0.1191=-0,8809;
y(1)=1,8202
∆x(1)=-0.0010
∆y(1)=-0.0024
------------------------------
x(2) =-0,8819
y(2) =1,8178
Δy(2)= -0,0000004
Δx(2)= -0,0000006
------------------------------
x(3) =-0,8819
y(3) =1,8178
Неравенство выполняется, поэтому итерации прекращаем.
ОТВЕТ: x(3) =-0,8819
y(3) =1,8178
x1=-2:0.1:2;
y1=sin(x1-0.6)-1.6;
y2=-3:0.1:3;
x2=(0.9+cos(y2))/3;
plot(x1, y1, 'R', x2, y2)
grid on
%Получим следующие графики:
Листинг 1. Файл F.m.
function z=F(x,y)
z=sin(y+1)-x-1.2;
Листинг 2. Файл G.m.
function z=G(x,y)
z=2*y-cos(x)-3;
Листинг 3. Файл Fy.m.
function z=Fy(x,y)
z=cos(y+1);
Листинг 4. Файл Fx.m.
function z=Fx(x,y)
z=-1;
Листинг 5. Файл Gх_6.m.
function z=Gx(x,y)
z=sin(x);
Листинг 6. Файл Gy_6.m.
function z=Gy(x,y)
z=2;
Создайте файл Nuton.m (листинг 7), содержащий описание функции,
возвращающей решение системы нелинейных уравнений методом Ньютона.
function Nuton(f,g,fx,fy,gx,gy,x0,y0,
x1 = x0 +(feval(g,x0,y0)*feval(fy,x0,
feval(f,x0,y0)*feval(gy,x0,y0)
y1=y0+(feval(f,x0,y0)*feval(
k = 1;
while abs(x1-x0)>eps & abs(y1-y0)>eps
x0=x1;
y0=y1;
x1=x0+(feval(g,x0,y0)*feval(
feval(f,x0,y0)*feval(gy,x0,y0)
y1=y0+(feval(f,x0,y0)*feval(
x0,y0)-feval(fy,x0,y0)*feval(
k=k+1;
end;
x=x1
y=y1
k
Найдите решение системы:
Nuton('F','G','Fx','Fy','Gx','
#include <iostream>
using namespace std;
#define eps 0.00001
double function1(double x, double y)
{
return sin(y + y) - 1.122*x - 0.498;
}
double function2(double x, double y)
{
return x*x + y*y - 1;
}
double func11(double x, double y)
{
return cos(x + y) - 1.122;
}
double func12(double x, double y)
{
return cos(x + y);
}
double func21(double x, double y)
{
return 2*x;
}
double func22(double x, double y)
{
return 2*y;
}
void obr_matr(double a[2][2])
{
double det, aa;
det = a[0][0]*a[1][1] - a[0][1]*a[1][0];
aa = a[0][0];
a[0][0] = a[1][1]/det;
a[1][1] = aa/det;
aa = a[0][1];
a[0][1] = -a[1][0]/det;
a[1][0] = -aa/det;
}
void nuton(double x, double y)
{
int i = 1;
double a[2][2], dx, dy, b[2], norm;
do
{
a[0][0] = func11(x, y);
a[0][1] = func12(x, y);
a[1][0] = func21(x, y);
a[1][1] = func22(x, y);
ober_matr(a);
dx = -a[0][0]*function1(x, y) + -a[0][1]*function2(x, y);
dy = -a[1][0]*function1(x, y) + -a[1][1]*function2(x, y);
x = x + dx;
y = y + dy;
b[0] = function1(x, y);
b[1] = function2(x, y);
norm = sqrt(b[0]*b[0]+b[1]*b[1]);
i++;
}
while (norm >= eps);
cout << x << endl << y << endl;
}
void main()
{
double x, y;
cout << "x = ";
cin >> x ;
cout << "y = ";
cin >> y;
nuton(x, y);
cout << endl;
system("PAUSE");
}
Задание 2. Решить систему уравнений упрощённым методом НЬЮТОНА
с точностью ε=0,000001:
Система:
Перепишем систему в виде:
X=sin(y+1)-1,2
Y=(3+cos(x))/2
Графически находим начальное приближение x(0)=-1; y(0)=2
Перепишем систему в следующем виде:
f1(x,y)= sin(y+1)-x -1,2=0
f2(x,y)=2y-cos x-3=0
Найдём частные производные:
(f1)’ x (x,y)= -1;
(f2 )’x(x,y)=sin(x);
------------------------------
(f1)’ y(x,y)= cos(y+1)-;
(f2 )’y(x,y)=2;
Матрица Якоби:
-1 cos(y+1)
sin(x) 2
Имеем СЛАУ:
-1∆x(k)+cos(y+1)∆y(k)= -f1(x(k),y(k)),
sin(x(k))∆x(k)+2∆y(k)= -f2(x(k),y(k)
Коэффициенты вычисляем 1 раз на 1 итерации :
-1∆x(k)-0.9900∆y(k)= -sin(y(k)+1)+x(k) +1.2,
-0.8415*∆x(k)+2∆y(k)= -2y(k)+cos x(k)+3
1 шаг полностью
совпадает с классическим
∆x(0)=0.1191
∆y(0)=-0,1798
x(1)=x(0)+ ∆x(0)=-1+0.1191=-0,8809;
y(1)=1,8202
2 шаг:
Δy(1)= -0,0024
Δx(1)= -0,0009
x(2)=x(1)+ ∆x(1)= -0,8818;
y(2)= 1,8179
3 шаг:
Δy(2)= -0,000008
Δx(2)= -0,000091
x(3)=x(2)+ ∆x(2)= -0,881880;
y(3)= 1,817847
4 шаг:
Δy(3)= 0,00000214
Δx(3)= 0,00000246
x(4) =-0,881883
y(4) =1,817849
5 шаг:
Δy(4)==0,00000009
Δx(4)=0,000000003
x(5) =-0,881883
y(5) =1,8178495
Неравенство выполняется, поэтому итерации прекращаем.
ОТВЕТ: x =-0,8819
y =1,8178
x1=-2:0.1:2;
y1=sin(x1-0.6)-1.6;
y2=-3:0.1:3;
x2=(0.9+cos(y2))/3;
plot(x1, y1, 'R', x2, y2)
grid on
%Получим следующие графики:
Листинг 1. Файл F.m.
function z=F(x,y)
z=sin(y+1)-x-1.2;
Листинг 2. Файл G.m.
function z=G(x,y)
z=2*y-cos(x)-3;
Листинг 3. Файл Fy.m.
function z=Fy(x,y)
z=cos(y+1);
Листинг 4. Файл Fx.m.
function z=Fx(x,y)
z=-1;
Листинг 5. Файл Gх_6.m.
function z=Gx(x,y)
z=sin(x);
Листинг 6. Файл Gy_6.m.
function z=Gy(x,y)
z=2;
Создайте файл Nuton.m (листинг 7), содержащий описание функции,
возвращающей решение системы нелинейных уравнений методом Ньютона.
function Nuton(f,g,fx,fy,gx,gy,x0,y0,
x1 = x0 +(feval(g,x0,y0)*feval(fy,x0,
feval(f,x0,y0)*feval(gy,x0,y0)
y1=y0+(feval(f,x0,y0)*feval(
k = 1;
while abs(x1-x0)>eps & abs(y1-y0)>eps
x0=x1;
y0=y1;
x1=x0+(feval(g,x0,y0)*feval(
feval(f,x0,y0)*feval(gy,x0,y0)
y1=y0+(feval(f,x0,y0)*feval(
x0,y0)-feval(fy,x0,y0)*feval(
k=k+1;
end;
x=x1
y=y1
k
Найдите решение системы:
Nuton('F','G','Fx','Fy','Gx','
Задание 3 . сравнение 2 методов
1) условия сходимости метода Ньютона зависят
а) от значений первых и вторых производных функций невязок по
искомым параметрам;
б) от близости предыдущего, а в конечном итоге начального
приближения к решению. При этом погрешность последующего приближения
связана с погрешностью предыдущего решения квадратичной зависимостью. В
этом смысле говорят о квадратичной сходимости метода Ньютона.
2) по мере приближения к решению сходимость резко ускоряется.
3) при задании начального приближения достаточно далеко от решения
итерационный процесс метода Ньютона может быть расходящимся.