evalSurf

Вычислите поверхности усиления в определенных проектных точках

Описание

пример

GV = evalSurf(GS,X) вычисляет поверхность усиления в списке точек, заданных в массиве X. Точка является комбинацией значений переменных планирования. Таким образом X - N массив M, где N - число точек, в которых можно вычислить коэффициент усиления, и M - количество переменных планирования в GS.

пример

GV = evalSurf(GS,X1,...,XM) вычисляет поверхность усиления над прямоугольной сеткой, сгенерированной векторами X1,...,XM. Каждый вектор содержит значения для одной переменной планирования GS.

пример

GV = evalSurf(___,gridflag) задает размещение GV.

Примеры

свернуть все

Создайте поверхность усиления с одной переменной планирования и вычислите коэффициент усиления в списке значений переменной планирования.

Когда вы создаете поверхность усиления с помощью tunableSurfaceЗадаются проектные точки, в которых настраиваются коэффициенты усиления. Эти точки обычно являются значениями переменных планирования, при которых вы отобрали или линеаризировали объект. Однако можно хотеть реализовать поверхность усиления как интерполяционную таблицу с точками останова, отличающимися от заданных точек проекта. В этом примере вы создаете поверхность усиления с набором проекта точек, а затем вычисляете поверхность с помощью другого набора значений переменных планирования.

Создайте скалярное усиление, которое изменяется как квадратичная функция от одной переменной планирования, т. Предположим, что вы линеаризировали свой объект каждые пять секунд с t = 0 до t = 40.

t = 0:5:40;
domain = struct('t',t);
shapefcn = @(x) [x,x^2];
GS = tunableSurface('GS',1,domain,shapefcn);

Обычно коэффициенты настраиваются как часть системы управления. В данном примере вместо настройки вручную установите коэффициенты ненулевые значения.

GS = setData(GS,[12.1,4.2,2]);

Вычислите поверхность усиления в другом наборе значений времени.

tvals = [0,4,11,18,25,32,39,42];   % eight values
GV = evalSurf(GS,tvals)
GV = 8×1

    9.9000
   10.0200
   10.6150
   11.7000
   13.2750
   15.3400
   17.8950
   19.1400

GV - массив 8 на 1. Можно использовать tvals и GV для реализации переменного коэффициента усиления как интерполяционной таблицы.

Вычислите поверхность усиления с двумя переменными планирования по сетке значений этих переменных.

Когда вы создаете поверхность усиления с помощью tunableSurfaceЗадаются проектные точки, в которых настраиваются коэффициенты усиления. Эти точки обычно являются значениями переменных планирования, при которых вы отобрали или линеаризировали объект. Однако можно хотеть реализовать поверхность усиления как интерполяционную таблицу с точками останова, отличающимися от заданных точек проекта. В этом примере вы создаете поверхность усиления с набором проекта точек, а затем вычисляете поверхность с помощью другого набора значений переменных планирования.

Создайте скалярную усилительную поверхность, которая является билинейной функцией двух независимых переменных, α и В.

[alpha,V] = ndgrid(0:1.5:15,300:30:600);
domain = struct('alpha',alpha,'V',V);
shapefcn = @(x,y) [x,y,x*y];
GS = tunableSurface('GS',1,domain,shapefcn);

Обычно коэффициенты настраиваются как часть системы управления. В данном примере вместо настройки вручную установите коэффициенты ненулевые значения.

GS = setData(GS,[100,28,40,10]);

Оцените коэффициент усиления при выбранных значениях α и В.

alpha_vec = [7:1:13];  % N1 = 7 points
V_vec = [400:25:625];  % N2 = 10 points
GV = evalSurf(GS,alpha_vec,V_vec);

Точки прерывания, в которых вы вычисляете поверхность усиления, не должны попадать в область значений, заданную domain. Однако, если вы пытаетесь оценить коэффициент усиления слишком далеко за пределами области значений, используемого для настройки, программное обеспечение выдает предупреждение.

Точки останова также не должны регулярно расставляться. evalSurf оценивает поверхность усиления над сеткой, образованной ndgrid(alpha_vec,V_vec). Исследуйте размерности получившегося массива.

size(GV)
ans = 1×2

     7    10

По умолчанию размерности сетки N1-by-N2 сначала в массиве, далее указываются размерности усиления. GS является скалярным коэффициентом усиления, поэтому размерности GV [7,10,1,1], или эквивалентно [7,10].

Значение в каждом местоположении GV - коэффициент усиления, оцениваемый в соответствующей (alpha_vec,V_vec) пара в сетке. Для примера, GV(2,3) коэффициент усиления оценивается в (alpha_vec(2),V_vec(3)) или (8,450).

Вычислите оцененную в массиве поверхность усиления с двумя переменными планирования по сетке значений этих переменных.

Создайте векторный коэффициент усиления, который имеет две переменные планирования.

[alpha,V] = ndgrid(0:1.5:15,300:30:600);
domain = struct('alpha',alpha,'V',V);
shapefcn = @(x,y) [x,y,x*y];
GS = tunableSurface('GS',ones(2,2),domain,shapefcn);

Установка начального коэффициента константы равным ones(2,2) причины tunableSurface чтобы сгенерировать матрицу усиления 2 на 2. Каждая запись в этой матрице является независимо настраиваемой поверхностью усиления, которая является билинейной функцией двух переменных планирования. Другими словами, поверхность усиления задается:

GS=K0+K1α+K2V+K3αV,

где каждый из коэффициентов K0,,K3 сам является матрицей 2 на 2.

Обычно вы настраиваете коэффициенты этих поверхностей усиления как часть системы управления. В данном примере вместо настройки вручную установите коэффициенты ненулевые значения.

K0 = 10*rand(2);
K1 = 10*rand(2);
K2 = 10*rand(2);
K3 = 10*rand(2);

The tunableSurface объект хранит коэффициенты, оцененные в массиве, путем объединения их в массив 2 на 8 (см. tunableSurface страница с описанием). Поэтому объедините эти значения K0,,K3 для изменения коэффициентов GS.

GS = setData(GS,[K0 K1 K2 K3]);

Теперь вычислите поверхность усиления при выбранных значениях переменных планирования.

alpha_vec = [7:1:13];  % N1 = 7 points
V_vec = [400:25:625];  % N2 = 10 points
GV = evalSurf(GS,alpha_vec,V_vec,'gridlast');

The 'gridlast' упорядочивает GV массива таким образом, размерности сетки значений усиления 7 на 10 являются последними. Размерности самого массива усилений 2 на 2 являются первыми.

size(GV)
ans = 1×4

     2     2     7    10

Входные параметры

свернуть все

Поверхность усиления для вычисления, заданная как a tunableSurface объект. GS может иметь любое количество переменных планирования и может быть скалярным или массивным.

Точки, в которых можно вычислить поверхность усиления, заданные как массив. Точка является комбинацией значений переменных планирования. X имеет размерности N -by - M, где M - количество переменных планирования в GS и N является числом точек, с которой можно оценить GS. Таким образом, X является списком комбинаций «scheduling-variable-value», при которых можно вычислить коэффициент усиления. Например, предположим GS имеет две переменные планирования, a и bи вы хотите оценить GS в 10 (a, b) пары. В этом случае X массив 10 на 2, в котором перечислен массив (a, b). Точки в X не нужно совпадать с проектом точками в GS.SamplingGrid.

Переменные планирования, при которых можно вычислить поверхность усиления, заданные как M массивы, где M - количество переменных планирования в GS. Для примера, если GS имеет две переменные планирования, a и b, затем X1 и X2 являются векторами a и b значений, соответственно. Поверхность усиления оценивается по сетке ndgrid(X1,X2). Значения в этой сетке не должны совпадать с проектом точками в GS.SamplingGrid.

Размещения выхода массива, заданные как 'gridfirst' или 'gridlast'.

  • 'gridfirst'GV имеет размер [N1,...,NM,Ny,Nu] с размерностями сетки и последними размерностями усиления. Это размещение является естественным форматом для скалярного усиления, где Ny = Nu = 1.

  • 'gridlast'GV имеет размер [Ny,Nu,N1,...,NM] сначала с размерностями усиления. Этот формат более читаем для матричных коэффициентов усиления.

Выходные аргументы

свернуть все

Значения усиления, возвращенные как массив. GV содержит коэффициент усиления, рассчитанный в точках (значения переменных планирования), заданных как X или X1,...,XM. Размер GV зависит от количества переменных планирования в GS, размерности ввода-вывода коэффициента усиления, заданные как GS, и значение gridflag.

Если вы вычисляете коэффициент усиления в списке N точки, заданные в массиве X, затем размер GV является [N,Ny,Nu]. Здесь, [Ny,Nu] являются размерностями ввода-вывода коэффициента усиления. Например, предположим GS является скалярной поверхностью усиления с двумя переменными планирования, a и b, и X массив 10 на 2, содержащий 10 (a,b) пар. Затем GV - вектор-столбец из десяти значений.

Если вы вычисляете коэффициент усиления по сетке, заданной векторами X1,...,XM, затем размерности GV зависят от значения gridflag.

  • gridflag = 'gridfirst' (по умолчанию) - Размер GV является [N1,...,NM,Ny,Nu]. Каждый Ni - длина Xi, количество значений i-й переменной планирования. Например, предположим GS является скалярной поверхностью усиления с двумя переменными планирования, a и b, и X1 и X2 векторы 4 a значения и 5 b значений, соответственно. Затем размер GV [4,5,1,1] или эквивалентно [4,5]. Или, если GS является трехвыходным, двухвпускным векторным усилением, затем размером GV равен [4,5,3,2].

  • gridflag = 'gridlast' - Размер GV является [Ny,Nu,N1,...,NM]. Например, предположим GS является скалярной поверхностью усиления с двумя переменными планирования, a и b, и X1 и X2 векторы 4 a значения и 5 b значений, соответственно. Затем размер GV равен [1,1,4,5]. Или, если GS является трехвыходным, двухвпускным векторным усилением, затем размером GV составляет [3,2,4,5].

Совет

  • Использовать evalSurf чтобы превратить настроенные поверхности усиления в интерполяционные таблицы. Задайте X1,...,XM к желаемым точкам останова таблицы и использовать GV как данные таблицы. Точки останова таблицы не должны совпадать с точками проекта, используемыми для настройки GS.

См. также

| | |

Введенный в R2015b