DaanJM
DaanJM

Reputation: 13

Assign multiple function outputs to a vector using indexing in MATLAB

I have a simple MATLAB function outputting multiple variables:

function [a,b] = MultipleOutputs()
a = 6;
b = 8;
end

I want to assign the two output variables to 2 certain elements in an existing vector:

x = ones(1,4);
x(2:3) = MultipleOutputs()

However, this gives me:

x =

     1     6     6     1

Instead of:

x =

     1     6     8     1

I have had this problem in multiple cases, was never able to find the solution.

Upvotes: 1

Views: 148

Answers (2)

Lincoln Cheng
Lincoln Cheng

Reputation: 2303

when you run MultipleOutputs() like that in another function, it only outputs only the first element, which in this case is a.

So eventually your statement x(2:3) = MultipleOutputs() is equivalent to x(2:3) = 6.

A simple fix would be to extract all the elements:

[a,b] = MultipleOutputs();
x(2:3) = [a b];

Upvotes: 2

Dan
Dan

Reputation: 45741

You have 2 choices:

Concatenate the vectors after outputting them separately

[a,b] = MultipleOutputs();
x = ones(1,4);
x(2:3) = [a,b];

concatenate the vectors before outputting them

function a = MultipleOutputs()
    a(1) = 6;
    a(2) = 8;
end

x(2:3) = MultipleOutputs();

Upvotes: 3

Related Questions