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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
установим флажок на сохранение данных во внешней перемен­ной MATLAB (соответственно U0 и U), а также формат записи Array, что позволит сохранять данные в виде двух столбцов, со
­держащих соответственно абсциссу и ординату точек графиков. Пример выполнения настройки показан на рис. 40.
Рис. 40. Настройки параметров монитора
Для осуществления преобразования Фурье и выполнения расчетов можно составить программу, оформленную в виде отдельного m-файла.
Ниже приведем типовой текст такой программы:
% macros for simulink model
clear all
sim('sim_mod')
tm=U(:,1);
Um=U(:,2);
Um0=U0(:,2);
gure(1)
plot(tm,Um,'k');
FUm0=fft(Um0);
FUm=fft(Um);
Y=1/1000*(FUm0./FUm-1);
Ym=abs(Y);
N=size(Ym);
N=(N(1)-1)/2;
101
МОДУЛЬ 2
Ym2=Ym(1:N); f=(0:(N-1))/0.5/1000;
gure(2)
plot(f,Ym2,'k'); hold on
% сравнение с теоретической кривой
C0=1e-8; R=100;
L=1e-02;
C=1e-09;
F=40000:1:70000; W=2*pi*F; Y=j*W*C0+1./(R+j*(W*L-1./(W*C)));
YA=abs(Y);
plot(F/1000,YA,'k','LineWidth',2 );
Помимо вычислений, в программе реализовано также срав нение с теоретической кривой зависимости модуля проводимо­сти от частоты, а строка sim('«имя Simulink модели»') позволя­ет запускать Simulink напрямую из m-файла. На рис. 41 пред­ставлен график зависимости модуля проводимости от частоты, полученный в результате моделирования.
-
102
Рис. 41. График зависимости модуля проводимости
от частоты
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
2.4. Обработка результатов измерений
Рассмотрим возможность обработки результатов измерений
методами оптимизации.
В MATLAB существует много методов минимизации как од
­номерных (fminbnd), так и многомерных (fminsearch, lsqnonlin, fminmax, fminunc, fmincon) функций, которые реализуют раз
­личные численные методы [4].
Для отыскания минимума унимодальной функции (функция
одного переменного y = f(x) называется унимодальной на отрез
­ке [a, b], если имеется единственное значение x0 [a, b], такое, что f(x f(x) строго возрастает при x x
) – минимум f(x) на [a, b], f(x) строго убывает при x x0,
0
) на заданном отрезке исполь-
0
зуется функция fminbnd. Алгоритм, реализованный ею, пред­ставляет собой комбинацию метода золотого сечения и обратной параболической интерполяции.
В функции fminsearch используется метод Нелдера–Мида.
Преимуществом этой функции является возможность ее ис
­пользования для негладких и разрывных целевых функций.
Форма обращения к этой функции имеет вид:
x = fminsearch(fun, x
, options, p1, p2,…).
0
В том случае, когда функция является достаточно гладкой, для поиска ее минимума можно воспользоваться процедурой fminunc. Данная функция реализует метод Ньютона.
Функция lsqnonlin применяется в тех случаях, когда целе вая функция имеет вид
12
2
. В этом случае градиент
i
g и гессиан H функции F выражаются через якобиан J век
-
-
тор-функции:
, f2, … fm,|’:
f = |f
1
g = J× f ;
H = J× J + R.
Остаточный член R включает вторые производные от F, но в окрестности минимума им обычно пренебрегают по сравнению с J× J. Это дает возможность не вычислять вторые произво
­дные, что значительно ускоряет работу по сравнению с общим случаем.
103
МОДУЛЬ 2
Система уравнений для отыскания вектора сдвига H × p = –g
при замене H на J’ × J превращается в J× J Ч p = – J× f. Этот способ называется методом Гаусса–Ньютона.
В методе Левенберга–Марквардта матрица J’ × J в левой ча
-
сти системы уравнений заменяется на J’ × J + λ × I, где I – единичная матрица, а λ – некоторое неотрицательное число. Для вектора смещения задается ограничение |p| Δ, где Δ и λ взаимосвязаны.
В функции lsqnonlin применяются оба метода: метод Гаусса–
Ньютона и Левенберга–Марквардта.
В обращении x = lsqnonlin(fun, x
) минимизируется сумма
0
квадратов компонент вектора-столбца, который вырабатывает функция fun (это может быть также матрица). Второй аргумент
– стартовая точка для поиска.
x
0
При использовании функции lsqnonlin, в которой целевая
функция является сверткой вектора, можно задавать ограниче
-
ния. Для функции lsqnonlin доступны только простейшие огра­ничения типа lb x ub. Обращение к функции lsqnonlin в этом случае имеет вид:
x = lsqnonlin(fun, x
Функция lsqnonlin может возвратить довольно много выход
, lb, ub, options, p1, p2, …).
0
­ных параметров: [x, resnorm, residual, e_flag, inform, lambda, jacobian]=lsqnonlin(…).
Кроме ранее встречавшихся выходных аргументов, здесь
представлены:
x –вектор-решение; – resnorm – значение целевой функции в найденной точке; – residual – компоненты функции fun(x) в найденной точке;
– e_flag (e_flag = 1 – решение системы найдено; e_flag = 0 – решение системы не найдено; e_flag = –1 – достигнутый мини­мум не является решением системы);
– inform – содержит три поля: iterations – количество итера
­ций, выполненных при поиске корня; funcCount – количество обращений к функции fun; algorithm – наименование алгорит
­ма, использованного для нахождения корня;
104
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
– lambda – вектор множителей Лагранжа; – jacobian – якобиан функции fun в найденной точке. Функции lsqnonlin идейно близка функция fminimax, в обе
­их скалярная целевая функция не задается непосредственно в обращении, а формируется путем свертки из компонент вектора (или матрицы), передаваемого функции. В lsqnonlin минимизи
­руется сумма квадратов компонент, а в fminimax – максималь­ная компонента. Алгоритм, реализованный в fminimax, мно­гократно использует квадратичное программирование, а также поиск с помощью градиента и гессиана.
Все функции оптимизации, описанные в этом разделе, вклю
­чают в списки своих входных параметров перечень свойств, влияющих на ход итерационных процессов. Эти свойства пред
­ставлены структурой options, поля которой формируются с по­мощью функции optimset. Задание значения любого свойства производится парой параметров функции optimset, первый из которых представляет наименование свойства, а второй – его значение:
options = optimset(‘name1’, val1, ‘name2’, val2, …);
x = fxxx(fun, x
Перед входным параметром options может располагаться не
, …, options, p1, p2, …).
0
­которое количество входных параметров, перечень которых для каждой функции оптимизации индивидуален. Параметры p
,…, располагаемые вслед за структурой options, передаются
p
2
,
1
оптимизируемой функции вместе с независимым аргументом x – fun(x, p1, p2, …). В табл. 5 приведен список параметров, управ­ляющих процессом нахождения минимума функций и исполь­зуемых в данном учебном пособии.
Таблица 5
Список параметров, управляющих процессом нахождения
минимума функций
Параметр Действие
MaxFunEvals
Максимальное количество обращений к функ­ции fun
MaxIter Максимальное количество итераций
105
МОДУЛЬ 2
).
 

Окончание табл. 5
Параметр Действие
TolFun
TolX
Прекращение итераций при достижении точ­ности по значению функции
Прекращение итераций при достижении ми­нимального шага по X
Как правило, нельзя рекомендовать какой-либо один метод, который можно использовать для решения всех без исключения задач, возникающих на практике.
Решение задачи аппроксимации однорезонансной кривой
Разберем конкретный практический пример, опираясь на схему, приведенную на рис. 27. Активная составляющая прово димости для этой схемы:
(ω
G
RL
R
2
ω

ω
2
1
C
Зависимость активной составляющей проводимости от часто­ты является однорезонансной кривой, т. е. кривой f(x), пред­ставленной на рис. 42.
-
Рис. 42. Однорезонансная кривая
106
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
Пусть с помощью серии экспериментальных измерений ак-
тивной части проводимости были получены некоторые данные, которые, соответственно, наиболее точно описываются с помо
-
щью резонансных функций. Обозначим ωi – точки, в которых сняты измерения, а G(ω
) – результаты измерений, где i = 1,
i
2, ..., n. Построим математическую модель, которая позволит проводить эксперименты для определенных параметров R, L, C с целью накопления экспериментальных данных.
Рассмотрим текст программ, с помощью которых строится
модель однорезонансной функции. Ввод параметров функции может быть осуществлен как с клавиатуры (первый пример), так и посредством чтения из текстового файла (второй пример).
На интервале [a, b] с шагом k формируется вектор ω, каждо
-
му значению которого ставится в соответствии значение G(ω). Вследствие влияния на любую систему внешних воздействий невозможно получить результаты опытов без погрешностей, по
­этому с целью приближения к реально получаемым экспери­ментальным данным внесем некоторую ошибку (er) в измере­ния. Предположим, что ошибка измерений составляет 5 %. Для этого сконструируем вектор pogr, с помощью которого построим «эмпирические» данные:
%matematicheskaja model experimentov
c = input(‘c = ‘); r = input(‘r = ‘);
l = input(‘L = ‘); disp(‘введите интервал [a,b] и шаг k’);
a = input(‘a = ‘); b = input(‘b = ‘); k = input(‚k = ‚); er = input(‚error = ‚); w = 2*pi*a : 2*pi*k : 2*pi*b; g = r ./ (r.^2+(w*l-1./(w*c)).^2); pogr = (rand(1,length(g))-0.5)*2*er; new = g+g.*pogr;
gure(1); plot(w,g,w,new)
legend(‘teor. izmerenia’,’empirich.izmerenia’)
107
МОДУЛЬ 2
 

s = fopen(‘_le’,’wb’);
c = fwrite(s,a,’int’);
j = fwrite(s,b,’int’);
d = fwrite(s,k,’int’); u = fwrite(s,new,’double’); fclose(s);
%matematicheskaja model experimentov
[c,r,l,a,b,k,er] = textread (‘matlab1.txt’,’%f%n%n%n%n%n%n%n’); w = 2*pi*a : 2*pi*k : 2*pi*b; g = r ./ (r.^2+(w*l-1./(w*c)).^2); pogr = (rand(1,length(g))-0.5)*2*er; new = g+g.*pogr;
gure (1);
plot (w,g,w,new) legend (‘teor. izmerenia’,’empirich.izmerenia’)
s = fopen(‘_le’,’wb’);
c = fwrite(s,a,’int’);
j = fwrite(s,b,’int’);
d = fwrite(s,k,’int’); u = fwrite(s,new,’double’); fclose(s);
Результатом работы программы является вектор «экспери
-
ментально полученных» значений new. На рис. 43 приведены графики измерений new(ω) и G(ω), полученных с погрешностью 5 и 0 %.
Эмпирические измерения хранятся в файле, что упрощает
дальнейшую работу с данными.
Построенная математическая модель позволяет решить за
­дачу аппроксимации экспериментальных данных однорезонанс­ной кривой. Для решения задачи аппроксимации был выбран метод наименьших квадратов.
Остаток между зарегистрированным значением y
и теорети-
i
ческим значением
108
y
i
2
RL

R
ω
i
2
1
C
ω
i
ПРИМЕРЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В MATLAB + SIMULINK
   






показывает, насколько точно выбранная модель описывает име­ющиеся данные.
Рис. 43. Результат работы программы
Необходимо подобрать параметры функции так, чтобы сум-
ма квадратов была равна нулю, т. е. чтобы экспериментальные данные совпадали с теоретической кривой. Таким образом, не
-
обходимо минимизировать сумму квадратов
2
y
i
i
RL
R
2

ω
i
ω
,
2
1
C
i
что является задачей оптимизации.
При исследовании методов оптимизации были определены
наиболее подходящие для нахождения оптимальных параметров функции. Методы линейного программирования требуют, чтобы критерии оптимальности и ограничения на переменные были ли нейными. Методы динамического программирования решают за­дачи, которые характеризуются многостадийными процессами.
Так как целевая функция нелинейная, не является элемен
тарной, то наиболее подходящими для решения поставлен-
-
-
109
МОДУЛЬ 2
   






ной задачи являются методы нелинейного программирования. В среде MATLAB из них реализованы метод нулевого порядка (метод Нелдера–Мида) и методы второго порядка (метод Ньюто на–Гаусса и усовершенствованный метод Ньютона – метод Ле­венберга–Марквардта).
Ниже приведены программы оптимизации параметров функ
ции
2
-
-
g R LC y
(,,) ,
i
i
2
R wL
R

1
i
wC
i
2
с использованием процедуры fminsearch, реализующей метод Нелдера–Мида, и lsqnonlin, объединяющей реализацию методов Ньютона–Гаусса и Левенберга–Марквардта.
Функция минимизации fminsearch требует, чтобы оптимизи
­руемая функция имела вид: f = Σ(Gэ – Gт)2, где Gэ – вектор эм­пирических данных, Gт – теоретически полученные значения. Функция mfs строит зависимость, формирующую сумму ква
­дратов разностей между эмпирическими измерениями и теоре­тическими значениями:
function opt = mfs(V,g,w) r = V(1); l = V(2)*1e-3; c = V(3)*1e-12;
ot = (g-r./(r^2+(w*L-1./(w*c)).^2)).^2;
opt = sum(ot,2);
Для функции lsqnonlin необходимо создать целевую функ
­цию в виде f = Σ(Gэ – Gт), так как этот метод сам строит необ­ходимую нам функцию в виде f = Σ(Gэ – Gт)2и оптимизирует ее:
function opt = rew(V,g,w) r = V(1); l = V(2)*1e-3; c = V(3)*1e-12;
opt = g-r./(r^2+(w*L-1./(w*c)).^2);
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]