Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

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

Asked by James Carter on 1 May 2013

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

0 Comments

James Carter

Tags

Products

2 Answers

Answer by Walter Roberson on 1 May 2013
Accepted answer

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 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 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".

Walter Roberson
Answer by Babak on 1 May 2013

use

 cell2mat()

0 Comments

Babak

Contact us