Решение систем нелинейных уравнений

Система нелинейных уравнений (СНУ). В общем случае систему нелинейных уравнений можно записать как:  или  Решением СНУ является такой вектор  при подстановке которого в систему последняя обращается в тождество.

Методы простых итераций. Прямой подход получения эквивалентной системы нелинейных уравнений. Преобразуем систему нелинейных уравнений к эквивалентному виду  Выберем некоторое начальное приближение  Последующие приближения найдем по формулам  Произвольное приближение (итерационную формулу) запишем как:  На каждой итерации вычисляем вектор  и проверяем условие окончания итерационного процесса  где e заданная точность.

Общий подход получения эквивалентной системы нелинейных уравнений  Если не удаётся преобразовать исходную СНУ к эквивалентному виду, который будет сходится, то можно воспользоваться общим приемом.  Итерационную формулу запишем  где матрицу  можно представить диагональной, а подбором значений элементов, можно добиться сходимость итерационного процесса.

Программа. Система нелинейных уравнений. Простые итерации

function DATA

global x0 eps;

x0=[0.5;0.5];

eps=0.01;

end

 

function [ fx ] = f(x)

fx=[sqrt((x(2)+2)/3);sqrt(2*x(1)-1)];

end

 

function [ fx ] = fp(x)

fx=[2*x(1)-x(2)^2-1;3*x(1)^2-x(2)-2];

end

 

function [ x,fx ] = fun_Syst_NelUr_Prost_Iter(x0,eps)

x=x0;

for i=1:100

xnew=f(x);

dx=xnew-x;

if norm(dx)<=eps

  i

  break;

else

  x=xnew;

end %if

end %for i

fx=fp(x);

end % function

 

function GLAV_Syst_NelUr_Prost_Iter

global x0 eps x fx;

DATA;

[ x,fx ] = fun_Syst_NelUr_Prost_Iter(x0,eps);

REPORT;

end

 

function REPORT

global x0 eps x fx;

disp('System of Non-Linear Equiations Simply Iterations');

disp(' ');

disp(['eps = ' num2str(eps,'%10.5f') ]);

disp('Results');

disp(' ');

disp(' x0       x       fx '); 

disp(' ______________________________')

i=0;

for i=1:length(x)

x00=x0(i);

xx=x(i);

ffx=fx(i);

disp(sprintf('%10.3f\t%10.3f\t %10.3f',x00,xx,ffx));

end %for

end

Метод Ньютона-Рафсона. Пусть известно некоторое приближение  к решению  Запишем исходную систему в виде  где  Разложим функцию в ряд Тейлора и ограничимся линейными членами.  

Это система линейных уравнений относительно

Матрица Якоби  Тогда  а новое приближение к решению СНУ будет иметь вид:  или  Условием окончания итерационного процесса является выполнения неравенства

Оператор МАТЛАБа [x,fun]=fsolve(@f,[x1 x2]);

Программа система нелинейных уравнений Ньютон-Рафсон

function DATA

global x0 eps;

x0=[0.5;0.5];

eps=0.01;

end

 

function [ fx ] = f(x)

fx=[2*x(1)-x(2)^2-1;3*x(1)^2-x(2)-2];

end

 

function [ J ] = Jac(x)

J=[2, -2*x(2);6*x(1),-1];

end

 

function [ x,fx ] = fun_Syst_NelUr_Newt_Rafs(x0,eps)

x=x0;

for i=1:100

fx=f(x);

J=Jac(x);

Jobr=J^(-1);

h=Jobr*fx;

if norm(h)<=eps

i

break;

else

x=x-h;

end %if

end %for i

end % function

 

function GLAV_Syst_NelUr_Newt_Rafs

global x0 eps x fx;

DATA;

[ x,fx ] = fun_Syst_NelUr_Newt_Rafs(x0,eps);

REPORT;

end

 

function REPORT

global x0 eps x fx;

disp('System of Non-Linear Equiations Newton Rafson');

disp(' ');

disp(['eps = ' num2str(eps,'%10.5f') ]);

disp('Results');

disp(' ');

disp(' x0       x       fx '); 

disp(' ______________________________')

i=0;

for i=1:length(x)

x00=x0(i);

xx=x(i);

ffx=fx(i);

disp(sprintf('%10.3f\t%10.3f\t %10.3f',x00,xx,ffx));

end %for

end

 

begin
nutraf(f,Jacob,x,ep)
x0,ep
[x,fx,it]=nutraf(@f,@Jacob,x0,ep)
x,fx,it
end

function J=Jacob(x)
J=[2,-2*x(2);6*x(1),-1] 
end

function F=f(x)
F=[2*x(1)-x(2)^2-1;3*x(1)^2-x(2)-2]
end

function [x,fx,it]=nutraf(f,Jacob,x,ep)
f(x), Jacob(x)
ndx=2*ep; it=0
ndx>ep
invJacob=inv(Jacob(x))
dx=invJacob*f(x)
ndx=norm(dx,’fro’)
x=x-dx; it=it+1
fx=f(x)
end


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: