Error using repmat function

3 Ansichten (letzte 30 Tage)
Nik Sam
Nik Sam am 12 Mai 2016
Kommentiert: Walter Roberson am 25 Mai 2016
Error using repmat
Replication factors must be a row vector of integers or integer scalars.
Can anyone tell me why i get this error when I am trying to use
x{i} = repmat(shiftdim(varargin{i}(j,:),1-i),repvec);
  2 Kommentare
Walter Roberson
Walter Roberson am 12 Mai 2016
What is in repvec ? What is class(repvec) ?
Nik Sam
Nik Sam am 13 Mai 2016
Bearbeitet: Walter Roberson am 13 Mai 2016
function fzr = rtrm(func, varargin)
% RTRM Fast, vectorized implementation of the
reduced transformation method
% using multi-dimensional arrays.
% FZR = RTRM(FUNC, FZ1, FZ2, ..., FZN)
% calls the reduced transformation method
% with N fuzzy numbers in alpha-cut repre-
% sentation. The function FUNC must be an
% analytical expression using \textsc{Matlab}'s
% array arithmetic (or logic) operators.
%
% Example:
% f = inline('x.^2 - y');
% fz1 = [0 5; 1 4; 2 3; 2.5 2.5];
% fz2 = [1 3; 1.5 2.5; 1.75 2.25; 2 2];
% fzr = rtrm(f, fz1, fz2)
% plot(fzr,linspace(0,1,4))
n = nargin - 1;
m = size(varargin{1},1) - 1;
fzr = repmat([inf -inf],m+1,1);
for j = m+1:-1:1
for i = 1:n
repvec = 2*ones(n,1);
repvec(i) = 1;
x{i} = repmat(shiftdim(...
varargin{i}(j,:)',1-i),repvec);
end
z = reshape(feval(func,x{:}),2^n,1);
fzr(j,1) = min(min(z),fzr(min(j,m)+1,1));
fzr(j,2) = max(max(z),fzr(min(j,m)+1,2));
end
This all the code

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Walter Roberson
Walter Roberson am 13 Mai 2016
Where you have
repvec = 2*ones(n,1);
change that to
repvec = 2*ones(1,n);
  2 Kommentare
Nik Sam
Nik Sam am 13 Mai 2016
Now I get this.Why?
Error using inlineeval (line 14)
Error in inline expression ==> x.^2 - y
Matrix dimensions must agree.
Error in inline/feval (line 33)
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Error in rtrm (line 27)
z = reshape(feval(func,x{:}),2^n,1);
Walter Roberson
Walter Roberson am 25 Mai 2016
With just the change I mentioned, I get results. I have enclosed the edited file. I tested with
f = inline('x.^2 - y');
fz1 = [0 5; 1 4; 2 3; 2.5 2.5];
fz2 = [1 3; 1.5 2.5; 1.75 2.25; 2 2];
fzr = rtrm(f, fz1, fz2)

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Operators and Elementary Operations finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by