Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ(1-9) ЧИСЛЕННЫЕ МЕТОДЫ.doc
Скачиваний:
370
Добавлен:
29.05.2015
Размер:
8.35 Mб
Скачать

4.4. Решение систем нелинейных уравнений средствами пакета matlab

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

,

которая может быть записана в векторном виде

,

где

,

,

средствами пакета MATLAB.

Для этого необходимо выполнить следующую последовательность действий:

1. Создать файла fm.m, содержащий описание функции, возвращающей значения функции .

% листинг файла fm.m

function z=fm(x)

z(1,1)=x(1).^2+x(2)^2-4;

z(2,1)=x(2)-x(1)^2-1;

2. Задать вектор начального приближения

>> z(1,1)=1;

>> z(2,1)=1;

3. Обратиться к встроенной функции fsolve( ), возвращающей решение системы нелинейных уравнений

>> x = fsolve('fm',z,optimset('fsolve'))

Optimization terminated successfully:

Relative function value changing by less than OPTIONS.TolFun

% Процесс оптимизации завершен

% Относительная величина изменения функции меньше, чем переменная

% OPTIONS.TolFun

x =

0.8895

1.7913

4. Проверка полученного решения

>> fm(x)

ans =

1.0e-008 *

0.5162

-0.4888

Для одновременного вывода координат вектора решения уравнения и соответствующего значения вектор-функции следует выполнить команду:

>> [x fval] = fsolve('fm',z,optimset('fsolve'))

Optimization terminated successfully:

Relative function value changing by less than OPTIONS.TolFun

x =

0.8895

1.7913

fval =

1.0e-008 *

0.5162

-0.4888

Для вывода на экран монитора значений вектора-решения и соответствующего значения функции следует выполнить команду:

>> [x fval exitflag] = fsolve('fm',z,optimset('Display','Iter'));

Norm of First-order

Iteration Func-count f(X) step optimality cg-iterations

1 4 5 1 5 0

2 7 1 1 4 1

3 10 0.0026 0.223607 0.17 1

4 13 4.53078e-008 0.013546 0.00055 1

5 16 5.05378e-017 7.18274e-005 1.79e-008 1

Optimization terminated successfully:

Relative function value changing by less than OPTIONS.TolFun

В ряде случаев оказывается более удобным использовать метод Ньютона, в котором, как описано в разделе 4.2, необходимо знать в данной точке и значения функции, и значения якобиана, что позволяет реализовать итерационный процесс. Реализация метода Ньютона в пакете MATLAB реализуется следующей последовательностью действий.

1. Создать файла Fm1.m, содержащий описание функции, возвращающую одновременно значения функции и значения якобиана

% листинг файла Fm1.m

function [z,J]=fm(x)

z(1,1)=x(1).^2+x(2)^2-4;

z(2,1)=x(2)-x(1)^2-1;

J(1,1)=2*x(1);

J(1,2)=2*x(2);

J(2,1)=-2*x(1);

J(2,2)=1;

2. Включить режим использования метода Ньютона и отображения итерационного процесса на экране

>> options=optimset('Jacobian','on','Display','Iter');

3. Обратиться к встроенной функции fsolve( ), возвращающей решение системы нелинейных уравнений

>> [x fval exitflag] = fsolve('fm1',z,options);

Norm of First-order