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

Моделирование измерительных задач в среде MATLAB + Simulink. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В 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
-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]