Задания к лабам / 3 / 03-Lit / __Ещё4__ / Курс Компьютерные технологии
.htmКурс "Компьютерные технологии" Курс "Информатика. Введение в MatLab"
для студентов 4 курса
факультета Медицинской физики и биоиженерии
Санкт-Петербургского гос. технического университета.
лектор: доц. каф. "Прикладная математика" СПбГТУ
И.Е.Ануфриев
Пример приложения в MatLab для осуществления подбора параметров.
Вид окна приложения.
Программа
function fitprog(action)
global xdata ydata par0 par
switch(action)
case 'ClearBtnClick',
cla;
case 'LoadBtnClick',
%считывание опытных данных из файла
DataFileStr = uigetfile('*.*', 'Open data file for fitting')
if DataFileStr ~= 0
hDataFileEdt = findobj('Tag', 'DataFileEdt');
set(hDataFileEdt, 'String', DataFileStr);
data = load(DataFileStr);
xdata = data(:,1)';
ydata = data(:,2)';
%график данных
hplot = plot(xdata, ydata, '.r');
set( hplot(1), 'MarkerSize', 15);
%рисуем серым цветом ParTxt
hParTxt = findobj('Tag', 'ParTxt');
set(hParTxt, 'String', 'Parameters are:', 'BackgroundColor', ...
[ 0.415686274509804 0.466666666666667 0.933333333333333 ]);
end
case 'PlotGuessBtnClick',
%задание начального приближения для p1, p2, p3, p4
hGuessEdt = findobj(gcbf, 'Tag', 'GuessEdt');
ParStr1 = 'par0=';
ParStr2 = get(hGuessEdt,'String');
ParStr = [ParStr1, ParStr2];
eval(ParStr);
%построение закона от найденных параметров и от начального
%приближения
x = (0:0.01:1);
y0 = fitfun(par0, x);
hold on;
plot(x, y0, '--b' )
axis([0 1 0 7]);
case 'FitBtnClick',
hParEdt = findobj(gcbf, 'Tag', 'ParEdt');
set(hParEdt, 'String', '');
hParTxt = findobj('Tag', 'ParTxt');
set(hParTxt, 'String', 'Parameters are:', 'BackgroundColor', ...
[ 0.415686274509804 0.466666666666667 0.933333333333333 ]);
pause(1);
optimset('lsqcurvefit')
%задание установок для фиттиинга
options=optimset('Display','iter', 'LargeScale', 'off');
%задание начального приближения для p1, p2, p3, p4
hGuessEdt = findobj(gcbf, 'Tag', 'GuessEdt');
%par0 = [1.0 1.0 1.0 1.0];
ParStr1 = 'par0=';
ParStr2 = get(hGuessEdt,'String');
ParStr = [ParStr1, ParStr2];
eval(ParStr);
%задание нижней и верхней границы для решения
hLBEdt = findobj(gcbf, 'Tag', 'LBEdt');
hUBEdt = findobj(gcbf, 'Tag', 'UBEdt');
eval(['LB=', get(hLBEdt, 'String')]);
eval(['UB=', get(hUBEdt, 'String')]);
%вызов функции фиттинга
hFitFun = findobj('Tag', 'FitFunEdt');
FitFunStr = get(hFitFun, 'String')
par = lsqcurvefit(FitFunStr,par0, xdata, ydata, LB, UB, options);
hParTxt = findobj('Tag', 'ParTxt');
set(hParTxt, 'String', 'Parameters are:', 'BackgroundColor', [1 0 0]);
hParEdt = findobj('Tag', 'ParEdt');
ParStr = mat2str(par, 3);
set(hParEdt, 'String', ParStr);
%построение закона от найденных параметров и от начального
%приближения
x = (0:0.01:1);
y = fitfun(par, x);
y0 = fitfun(par0, x);
hold on;
hplot = plot(x, y, '-g')
set(hplot(1), 'LineWidth', 2 )
end
Функция для фиттинга
function y = fitfun(par, x)
y = par(1)*exp(x*par(2))+par(3)*sin(par(4)*x) ;