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

New to MATLAB?

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

Asked by James Carter

James Carter (view profile)

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

James Carter (view profile)

Tags

Products

2 Answers

Answer by Walter Roberson

Walter Roberson (view profile)

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

James Carter (view profile)

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 (view profile)

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

Walter Roberson (view profile)

Answer by Babak

Babak (view profile)

on 1 May 2013

use

 cell2mat()

0 Comments

Babak

Babak (view profile)

Contact us