MATLAB: How to make output of a function available to script without function call

declareexportfunctionglobal variableimportvariable

Hello Friends,
I have the following function in myFun.m file:
function f1 = myFun1(X,Y)
[f1,f2] = myFun2(X,Y); %It calls myFun2
end
For some reason, from my script file, I can call only
f1 = myFun1(X,Y);
but not
[f1,f2] = myFun1(X,Y);
It is because the way I have a complicated script code. Nevertheless, I want output f2 to be available in my script right after function call f1 = myFun1(X,Y); in my script file myScript.m.
For illustration purpose, suppose:
%Script file contains:
X = [1 2; 4 5; 6 7];
Y = [8 9; 10 11];
f1 = myFun1(X,Y); % Calling myFun1 from myScript
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%function file myFun2:
function [f1,f2] = myFun2(X,Y)
f1 = X*Y; % 3x2 matrix

f2 = pdist2(X,Y); % 3x2 matrix
end
In this illustration I made output f2 to be 3×2, but it could be any size, for example a 3x2x4 type double.
I will appreciate any advice!

Best Answer

The file "myfun.m" is missing the function keyword. It should look like
function f1 = myFun(X,Y)
[f1,f2] = myFun2(X,Y); %It calls myFun2

end
And myfun only returns f1, not both f1 and f2. If you want it to return both, you have to list both on the function line
function [f1, f2] = myFun(X,Y)
[f1,f2] = myFun2(X,Y); %It calls myFun2
end
The script "myscript.m" has an extra "end" at the end of the file. It's a script, not a function so it should not have an end. Actually functions don't even need "end" statements, and I never use them.
myscript.m should look like
% Script file contains:
X = [1 2; 4 5; 6 7];
Y = [8 9; 10 11];
% Get only f1, not f1 and f2 from myFun1.
f1 = myFun1(X,Y); % Calling myFun1 from myScript
[f1,f2] = myFun2(X,Y)
f1 = X*Y; % 3x2 matrix

f2 = pdist2(X,Y); % 3x2 matrix
Note that myFun1() will not call myfun.m because it has a 1 at the end of it so you must have a myFun1.m file or else you'll get an error.