Система нелинейных уравнений (СНУ). В общем случае систему нелинейных уравнений можно записать как: или Решением СНУ является такой вектор при подстановке которого в систему последняя обращается в тождество.
Методы простых итераций. Прямой подход получения эквивалентной системы нелинейных уравнений. Преобразуем систему нелинейных уравнений к эквивалентному виду Выберем некоторое начальное приближение Последующие приближения найдем по формулам Произвольное приближение (итерационную формулу) запишем как: На каждой итерации вычисляем вектор и проверяем условие окончания итерационного процесса где 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
|
| ||||||||||
| |||||||||||
|