Исследование метода продолжения решения по параметру для нелинейных САУ
2.1 Общие сведения и требования к ПО и описание логической структуры
ПО состоит из следующих файлов: mpr. m, prog. m, funf. m, funj. m. Программы, реализующие метод, разработаны в среде МаtLab, предназначенной для выполнения математических операций. Программа состоит из программы-функции mpr. m, которая описывает метод, программы с данными - основная программа prog. m и двух подпрограмм-функций funf. m - для нахождения корней системы уравнений; funj. m - для нахождения матрицы Якоби. Рассмотрим их подробнее.
Функциональное назначение
Программа предназначена для решения систем нелинейных алгебраических уравнений в среде МаtLab методом продолжения решения по параметру.
Используемые переменные:
t - время выполнения итерационного процесса;
x - вектор начального приближения к решению;
n - размерность вектора;
m - номер итерационного процесса;
it - счетчик итераций.
Входные параметры:
funf - формальное имя программы, которое дает возможность вычислить корни нелинейных САУ.
funj - формальное имя программы, которое дает возможность вычислить матрицу Якоби.
x0 - начальное приближение собственного вектора;
dt - приращение времени;
edop - заданная допустимая ошибка;
trace - установка режима вывода на экран;
Выходные параметры:
tout - выходное значение времени;
xout - конечное значение x;
dxout - конечное значение вектора ошибки.
Тексты программ:
Mpr. m
function [xout,dxout,tout] =mpr (funf,funj,x0,dt,edop,trace)
t=dt; x=x0; tout=t; xout=x0; n=size (x0);
dxout=zeros (1,n); m=0; it=0;
f0=feval (funf,x0);
while (t<=1)
ndx=1;
nh=1;
nv= [ndx; nh];
while (max (nv) >edop)
J=feval (funj,x0);
F=feval (funf,x0);
h= (-F) *t;
dx=Jh;
x=x+dx;
m=m+1;
ndx=norm (dx);
nh=norm (h);
nv= [ndx; nh];
if (m > 10)
t=t-dt;
dt=dt/2;
t=t+dt;
x=x0;
m=0;
end;
end;
x0=x;
tout= [tout; t];
xout= [xout; x];
dxout= [dxout; dx];
if (m < 4)
dt=dt*2;
end;
t=dt+t;
it=it+1;
end;
disp (it =); %количество итераций
disp (it);
disp (t =); %время выполнения итерационного процесса
disp (t);
pause;
xout - конечное значение x;
dxout - конечное значение вектора ошибки.
m - номер итерации.
Prog. m
trace=1;
dt=0.1;
x0=0;
edop=0.1;
[xout,dxout,m] = mpr (funf,funj,x0,dt,edop,trace);
plot (m,xout); %График значений x
pause;
plot (m,dxout); %График ошибки
pause;
Funf. m
function [f] =funf (x)
f= [0.0001*exp (30*x) +x-6];
end
Funj. m
function [j] =funj (x)
j= [30*0.0001*exp (30*x) +1];
end