⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mvec.m

📁 GloptiPoly 3: moments, optimization and semidefinite programming. Gloptipoly 3 is intended to so
💻 M
字号:
function y = mvec(m,x)
% @MEAS/MVEC - Moment vector
%
% MVEC(M) returns the vector of moments defined for measure M
%
% If X is an MPOL object, MVEC(M,X) returns the vector of moments
% defined for the marginal of M with respect to variables in X.
%
% See also @MEAS/MMAT

% D. Henrion, 10 April 2004
% Last modified on 4 January 2007
  
global MMM

if length(m) > 1
 error('Specify only one measure')
end
m = m.meas;

marginal = false;
if nargin == 2
 if ~isa(x,'mpol')
  error('Invalid second input argument')
 end
 % subset of variables
 marginal = true;
 im = indmeas(x);
 if (length(im) > 1) | (im ~= m)
  error('Inconsistent measure in second input argument')
 end
 iv = indvar(x);
 nvar = length(iv); % number of variables
else
 % all variables
 iv = (MMM.indmeas == m);  
 nvar = sum(iv);
 iv = find(iv);
end

if nvar == 0
 error('Undefined measure')
end

undefined = false;
if ~isfield(MMM,'M')
 undefined = true;
elseif length(MMM.M) < m
 undefined = true;
elseif ~isfield(MMM.M{m},'ord')
 undefined = true;
end
if undefined
 error('Measure with undefined moments')
end

% Half the degree
ord = MMM.M{m}.ord;

% Are the powers already stored in the MMM.T tables ?
generate = true;
if isfield(MMM,'T')
 if (size(MMM.T,1) >= nvar) & (size(MMM.T,2) >= ord)
  if ~isempty(MMM.T(nvar,ord).pow)
   vpow = MMM.T(nvar,ord).pow;
   generate = false;
  end
 end
end

% Generate powers
if generate
 vpow = [];
 for k = 0:ord*2
  vpow = [vpow;genpow(nvar,k)];
 end
end

% Build moment vector entrywise
% by calling constructor @MPOL/MPOL
dm = size(vpow,1);
var = cell(dm,1);
pow = var;
coef = var;
for k = 1:dm
 var{k} = iv;
 pow{k} = vpow(k,:);
 coef{k} = 1;
end
y = struct('var',var,'pow',pow,'coef',coef);
% y = mom(reduce(mpol(y)));
% do not use reduce, unless measure index is removed for masses
y = mom(mpol(y));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -