Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Моделирование измерительных задач в среде MATLAB + Simulink. Учебное пособие
.pdf
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
Функция rew, в отличие от mfs, формирует сумму разностей
между эмпирическими измерениями и теоретическими значе
ниями.
• Оптимизация с использованием функции fminsearch:
%vhodnie parametri po izmerennim znachenijam g; method
fminsearch;
tic % контроль времени выполнения программы
s = fopen(‘_le’,’rb’);
a = fread(s,1,’int’);
j = fread(s,1,’int’);
k = fread(s,1,’int’);
h = x((j-a)/k+1);
[g,i] = fread(s,h,’double’);
w = 2*pi*a : 2*pi*k : 2*pi*j;
p = max(g)
n = 1;
while g(n)~=p,
n = n+1;
end;
n %maximum_1
g(n)
wp1 = w(n)/(2*pi)
p1 = g(n)/2;
ep = 2.5e-4;
kj = 1;
while kj<=n&abs(g(kj)-p1)>ep,
kj = kj+1;
end;
kl = length(g);
while kl>=n&abs(g(kl)-p1)>ep,
kl = kl-1;
end;
kl
raz1 = w(kl)-w(kj)
r1 = 1/p;
q = wp1/raz1;
-
111

МОДУЛЬ 2
l1 = (q*r1/wp1)*1e3;
c1 = (1/(4*pi^2*wp1^2*L1))*1e15;
options=optimset(‚MaxFunEvals‘,10000,‘MaxIter‘,10000,‘TolX‘, 1e-
10, ‚Tolfun‘,1e-10);
V = [r1 L1 c1]
[X,FVAL,EXITFLAG,OUTPUT] = fminsearch(‚mfs‘,V,options,g‘,w);
X
OUTPUT
r = X(1);
l = X(2)*1e-3;
c = X(3)*1e-12;
g1 = r ./ (r^2+(w*l-1./(w*c)).^2);
gure(3);
plot (w,g,w,g1,w(kj),g(kj),’*r’,w(kl),g(kl),’*r’);
legend (‘teoretic g’,’praktic g’);
toc % контроль времени выполнения программы
• Оптимизация с использованием функции lsqnonlin:
%vhodnie parametri po izmerennim znachenijam g
%method lsqnonlin;
tic
s = fopen(‘_le’,’rb’);
a = fread(s,1,’int’);
j = fread(s,1,’int’);
k = fread(s,1,’int’);
h = x((j-a)/k+1);
[g,i] = fread(s,h,’double’);
s = fopen(‘_le’,’rb’);
a = fread(s,1,’int’);
j = fread(s,1,’int’);
k = fread(s,1,’int’);
h = x((j-a)/k+1);
[g,i] = fread(s,h,’double’);
w = 2*pi*a : 2*pi*k : 2*pi*j;
p = max(g)
n = 1;
while g(n)~=p,
112

ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
n = n+1;
end;
n %maximum_1
fd = g(n)
wp1 = w(n)/(2*pi)
p1 = g(n)/2
ep = 2.3e-4;
kj = 1;
while kj<=n&abs(g(kj)-p1)>ep,
kj = kj+1;
end;
kl = length(g);
while kl>=n&abs(g(kl)-p1)>ep,
kl = kl-1;
end;
kl
raz1 = w(kl)-w(kj)
q = wp1/raz1;
r1 = 1/p;
l1 = (q*r1/wp1)*1e3;
c1 = (1/(4*pi^2*wp1^2*L1))*1e15;
V0 = [r1 L1 c1]
beg = [0 0 0];
en = [1000 1000 1000];
options = optimset(‚MaxFunEvals‘,10000,‘MaxIter‘,10000,‘TolX‘,
1e-10,‘Tolfun‘,1e-10);
[X,RESNORM,RESIDUAL,EXITFLAG,OUTPUT]= lsqnonlin(‚rew‘,V
0,beg,en,options,g‘,w);
X
OUTPUT
r = X(1);
l = X(2)*1e-3;
c = X(3)*1e-12;
g1 = r ./ (r^2+(w*l-1./(w*c)).^2);
gure (2)
w (kj)
113

МОДУЛЬ 2
plot (w,g,w,g1,w(kj),g(kj),’*r’,w(kl),g(kl),’*r’)
legend (‘teoretic g’,’praktic g’)
toc
В табл. 6 приведены результаты работы процедуры, реализу
ющей оптимизацию параметров однорезонансной функции при
ошибке измерений 0%. Критериями сравнения работы методов
в данной работе являются время работы программы, точность
полученных результатов, а также количество итераций и ис
пользуемых обращений к функции.
Таблица 6
Результаты работы процедуры fminsearch для
однорезонансной функции при ошибке измерений 0 %
Fminsearch,
погрешность
измерения
0 %
1,E-05 0,1560 0,1560 0,1560 0,1410 0,1560 0,1560 0,1560 0,1560 0,1510
1,E-10 0,1560 0,1720 0,1770 0,1720 0,1710 0,1720 0,1720 0,1720 0,1720
1,E-15 0,1400 0,1880 0,2500 0,7030 1,2650 1,7970 2,3280 2,9530 3,4220
TolX,
1,E-20 0,1570 0,2080 0,2660 0,7030 1,2500 1,8130 2,3600 2,8910 3,4530
TolFunc
1,E-25 0,1560 0,1980 0,2810 0,7030 1,2500 1,7970 2,3590 2,8910 3,4530
100 500 1000 5000 10000 15000 20000 25000 30000
MaxFuncEvalf
При увеличении допустимого количества вычислений целевой функции с небольшой требуемой точностью результатов порядка 1е-5 время работы остается постоянным. Однако уже при
точности более 1е-10 время расчета начинает расти с увеличе
нием параметра MaxFuncEvalf. Таким ообразом, с увеличением
максимального количества обращений к функции mfs увеличи
вается и точность вычислений.
Для сравнения точности вычислений, времени работы мето
дов, количества итераций и обращений к функции ниже приведена табл. 7. При ошибке измерений 5 % рассматриваемые
методы совершают наименьшее количество итераций, обраще
ний к функции, находят решение за наименьшее время. Время
нахождения решений с помощью метода lsqnonlin больше вре
мени, которое требуется для нахождения решения по методу
fminsearch.
Функция lsqnonlin требует в 6–50 раз меньшее количество
итераций и обращений к функции rew, однако fminsearch на
-
114

ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
ходит решение с большей точностью и за меньшее время, чем
lsqnonlin.
Таблица 7
Сравнение fminsearch и lsqnonlin для однорезонансной кривой
Функция Ошибка (%) FunCount Iterations Time Max error
fminsearch
lsqnonlin
0 331 174 0,1720 0
5 282 133 0,1560 0,8440
10 300 146 0,1880 0,3106
0 17 4 0,2500 0,4530
5 13 3 0,2500 0,8711
10 49 12 0,2500 1,7970
Таким образом, если ограничивающим фактором нахожде-
ния решения является быстродействие и точность решений, то
рационально воспользоваться методом деформируемого много
угольника (функция fminsearch). Однако при требовании наименьших затрат для решения задачи лучше применить методы
второго порядка (функция lsqnonlin).
Решение задачи аппроксимации двухрезонансной
кривой
На рис. 44 показан примерный вид двухрезонансной кривой
f(x).
Рис. 44. Примерный вид двухрезонансной кривой
115

МОДУЛЬ 2
Текст соответствующего m-файла для аппроксимации двухре-
зонансной кривой:
%vichodnie parametri po r,l,c,c0
clear all;
clc;
[c1,c2,r1,r2,L1,L2,a,b,k,er] = textread(‘matla.
txt’,’%n%n%n%n%n%n%n%n%n%n’);
wp1 = sqrt(1/(L1*c1))/(2*pi)
wp2 = sqrt(1/(L2*c2))/(2*pi)
w = 2*pi*a : 2*pi*k : 2*pi*b;
g = r1 ./ (r1^2+(w*L1-1./(w*c1)).^2) + r2 ./ (r2^2+(w*L2-1./(w*c2)).^2);
pogr = (rand(1,length(g))-0.5)*2*er;
new = g+g.*pogr;
pogr1 = (rand(1,length(y))-0.5)*2*er;
gure (1);
plot (w,g,w,new)
legend (‘teor. aktiw. sostawl.’,’empirich.aktiwn. sostawl.’)
s = fopen(‘_le2’,’wb’);
c = fwrite(s,a,’int’);
j = fwrite(s,b,’int’);
d = fwrite(s,k,’int’);
u = fwrite(s,new,’double’);
fclose (s);
Ниже приведены процедуры оптимизации параметров функ
ции
2
-
g R LC y
(,,) ,
i
i
2
R wL
R
1
i
wC
i
2
описывающей многорезонансную кривую с помощью тех же методов, что и для однорезонансной кривой.
• Оптимизация параметров с использованием функции
fminsearch:
%vhodnie parametri po izmerennim znachenijam g;
116

ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
%method fminsearch;
tic
s = fopen(‘_le2’,’rb’);
a = fread(s,1,’int’);
j = fread(s,1,’int’);
k = fread(s,1,’int’);
h = x((j-a)/k+1);
[g,i] = fread(s,h,’double’);
[y,d] = fread(s,h,’double’);
w = 2*pi*a : 2*pi*k : 2*pi*j;
ep = 1e-4;
s = maxi(g);
wp1 = w(s(2)) / (2*pi)
p1 = g(s(2))/2;
ep = 5e-4;
kj = 1;
while kj<=s(2)&abs(g(kj)-p1)>ep,
kj = kj+1;
end;
raz1 = 2*(w(s(2))-w(kj));
%________________________
wp2 = w(s(1)) / (2*pi)
p2 = g(s(1))/2;
ep = 5e-4;
ki = length(g);
while ki>=s(1)&abs(g(ki)-p2)>ep,
ki = ki-1;
end;
raz2 = 2*(w(ki)-w(s(1)));
%________________________
%kontur_1
r1 = 1/g(s(2))
q1 = wp1 / raz1;
l1 = (q1*r1/wp1)*1e3
c1 = (1/(4*pi^2*wp1^2*L1))*1e15
%________________________
117

МОДУЛЬ 2
%kontur_2
r2 = 1/g(s(1));
q2 = wp2 / raz2;
l2 = (q2*r2/wp2)*1e3
c2 = (1/(4*pi^2*wp2^2*L2))*1e15
%________________________
V0 = [r1 L1 c1 r2 L2 c2]
options=optimset(‘MaxFunEvals’,20000,’MaxIter’,10000, ‘TolX’,1e-
10,’Tolfun’,1e-10);
[X,FVAL,EXITFLAG,OUTPUT]=fminsearch(‘mfs2’,V0,options,g’,w);
X
OUTPUT
r1 = X(1);
l1 = X(2)*1e-3;
c1 = X(3)*1e-12;
r2 = X(4);
l2 = X(5)*1e-3;
c2 = X(6)*1e-12;
g1 = r1 ./ (r1^2+(w*l1-1./(w*c1)).^2) + r2 ./ (r2^2+(w*l2-1./(w*c2)).^2);
gure (2)
plot (w,g,w,g1,w(kj),g(kj),’*r’,w(ki),g(ki),’*r’)
legend (‘teoretic g’,’praktic g’)
toc
• Оптимизация параметров с использованием функции
lsqnonlin:
%vhodnie parametri po izmerennim znachenijam g
%method lsqnonlin;
tic
s = fopen(‘_le2’,’rb’);
a = fread(s,1,’int’);
j = fread(s,1,’int’);
k = fread(s,1,’int’);
h = x((j-a)/k+1);
[g,i] = fread(s,h,’double’);
[y,d] = fread(s,h,’double’);
w = 2*pi*a : 2*pi*k : 2*pi*j;
118

ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
ep = 1e-4;
s = maxi (g);
wp1 = w(s(2)) / (2*pi)
p1 = g(s(2))/2;
ep = 5e-4;
kj = 1;
while kj<=s(2)&abs(g(kj)-p1)>ep,
kj = kj+1;
end;
raz1 = 2*(w(s(2))-w(kj));
%________________________
wp2 = w(s(1)) / (2*pi)
p2 = g(s(1))/2;
ep = 5e-4;
ki = length(g);
while ki>=s(1)&abs(g(ki)-p2)>ep,
ki = ki-1;
end;
raz2 = 2*(w(ki)-w(s(1)));
%________________________
%kontur_1
r1 = 1/g(s(2))
q1 = wp1 / raz1;
l1 = (q1*r1/wp1)*1e3
c1 = (1/(4*pi^2*wp1^2*L1))*1e15
%________________________
%kontur_2
r2 = 1/g(s(1));
q2 = wp2 / raz2;
l2 = (q2*r2/wp2)*1e3
c2 = (1/(4*pi^2*wp2^2*L2))*1e15
%________________________
V0 = [r1 L1 c1 r2 L2 c2]
beg = [0 0 0 0 0 0];
en = [1000 1000 1000 1000 1000 1000];
options=optimset(‚MaxFunEvals‘,20000,‘MaxIter‘,10000, ‚TolX‘,1e-
119

МОДУЛЬ 2
10,‘Tolfun‘,1e-10);
[X,RESNORM,RESIDUAL,EXITFLAG,OUTPUT]=lsqnonlin(‚rew2‘,V
0,beg, en,options,g‘,w);
X
OUTPUT
r1 = X(1);
l1 = X(2)*1e-3;
c1 = X(3)*1e-12;
r2 = X(4);
l2 = X(5)*1e-3;
c2 = X(6)*1e-12;
g1 = r1 ./ (r1^2+(w*l1-1./(w*c1)).^2) + r2 ./ (r2^2+(w*l2-1./(w*c2)).^2);
%________________________
gure (2)
plot (w,g,w,g1,w(kj),g(kj),’*r’,w(ki),g(ki),’*r’)
legend (‘teoretic g’,’praktic g’)
toc
Некоторые результаты работы описываемой процедуры при
ведены в табл. 8. По сравнению с процедурой оптимизации параметров для однорезонансной кривой данной процедуре требуется в 1,5–3 раза больше времени. Количество требуемых итераций для поиска параметров двухрезонансной кривой – в 3–30
раз больше, чем для однорезонансной.
Таблица 8
Сравнение fminsearch и lsqnonlin для двухрезонансной
кривой
Функция Ошибка
fminsearch
lsqnonlin
(%)
0 1282 802 0,5470 0
5 1338 796 0,5930 1,2592
10 1084 615 0,5000 5,0285
0 442 63 0,8590 1,8077
5 589 84 0,8130 1,1247
10 1030 147 0,1410 5,1480
FunCount Iterations Time Max error
-
То же самое можно сказать и о максимальном количестве
обращений к оптимизируемой функции. Это объясняется уве
личением оптимизируемых параметров: если для однорезонанс-
120
-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
