How to resolve "Conversion to double from cell is not possible."

172 views (last 30 days)
Can someone point out what I am doing wrong. If I use the internals of the following function in command-line, the code works fine, but when I attempt to execute through the function, I get the error listed above listed for line 12. The offending code is: NewArry(3:LenB+2) = varargin;
function [maxVal, maxInd] = inner_product(varargin)
% varargin contains the accumulated signal returns
K = [2 3 10 2 1];
LenB = length(varargin);
EndL = varargin(1);
EndR = varargin(LenB);
%Pre-allocate New Array
NewArry = zeros(1,LenB + 4);
NewArry(3:LenB+2) = varargin;
NewArry(1) = EndL;
NewArry(2) = EndL;
NewArry(LenB + 3) = EndR;
NewArry(LenB + 4) = EndR;
FinalArry = zeros(1:LenB); %Preallocate array to hold inner product values
for x = 1:LenB
%Take the first group of 5 from the NewArray
Y = NewArry(x:x+4);
%Take The Inner Product of this with the Kernel
IP = Y * K';
%Store this value
FinalArry(1,x) = IP;
end
[maxVal, maxInd] = max(FinalArry);
end
When I assign varargin, and then pass it to the function, [maxVal, maxInd] = inner_product(varargin) it fails.
Thanks
  1 Comment
Walter Roberson
Walter Roberson on 27 Sep 2018
FinalArry = zeros(1:LenB);
is incorrect. It would try to create a 1 x 2 x 3 x 4 x.... LenB array.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 1 May 2013
varargin is a cell array, and you cannot assign a cell array to a numeric array. Look again at your statements
NewArry = zeros(1,LenB + 4);
NewArry(3:LenB+2) = varargin;
  2 Comments
James Carter
James Carter on 1 May 2013
varargin is a 1 x 1021 vector, not a cell array, so I am not sure where it is picking up that classification. Besides, why does this work when I run the bare code outside the function but then only triggers the error when I run the exact same code within the function? Attempting to use the cell2mat routine then results in a dimensional mismatch.
Thanks
JC
Walter Roberson
Walter Roberson on 1 May 2013
No, varargin{1} might be a 1 x 1021 vector, but varargin will always be a cell array.
Outside of a function, varargin references the script that is just the help information for varargin, and would present an error if used in a context that requires a value. varargin inside a function is special.
foo = @(varargin) class(varargin)
now try
foo([1 2 3])
and
foo('hello', 83)
and notice that each time the result is "cell".

Sign in to comment.

More Answers (2)

Babak
Babak on 1 May 2013
use
cell2mat()

David Weuffel
David Weuffel on 27 Sep 2018
Edited: David Weuffel on 27 Sep 2018
for everybody still searching for answers to this:
it is also possible, that in some scenarios you are trying to convert a char array eg.:
'word'
'2.345'
try using
str2double();

Tags

Products

Community Treasure Hunt

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

Start Hunting!