Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задания к лабам / 3 / 03-Lit / __Ещё4__ / Курс Компьютерные технологии

.htm
Скачиваний:
70
Добавлен:
16.04.2013
Размер:
10.42 Кб
Скачать

Курс "Компьютерные технологии" Курс "Информатика. Введение в 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) ;