problem with sum in function

1 Ansicht (letzte 30 Tage)
ronaldo messi
ronaldo messi am 22 Apr. 2020
Kommentiert: Steven Lord am 22 Apr. 2020
Hello every one!
I am new with matlab and i have a problem with very simple program with matlab 2019a
Code 1:
clear all;
z=so;
function [s] = so
A=[1 5 3 4 2 10 21 65];
s = sum(A);
s = s+1;
end
The answer is z=112, it's correct
Code 2:
clear all;
A=[1 5 3 4 2 10 21 65];
z=so;
function [s] = so
s = sum(A);
s = s+1;
end
I get this error
So as far as i understand, "Sum" can not read the variable out of the function "so".
DId i do somethings wrong or my computer have issues?
It's just a little test, but i need to get work with "sum" in a function so I can write a bigger program.

Akzeptierte Antwort

Steven Lord
Steven Lord am 22 Apr. 2020
That is correct. Functions operate in their own workspaces.
Variables from outside the function generally only enter a function's workspace when passed as input arguments to the function.
Variables from inside the function generally only leave the function's workspace to enter a different workspace when returned from the function as an output argument.
Functions generally can't access variables outside their own workspace.
[Those rules aren't technically complete, but when you're starting out they're a good mental model to use as a starting point for your MATLAB knowledge.]
In your first example you created the variable A inside so's workspace so the so function has access to the A variable. Since you didn't return A from so, A is not added to the workspace from which so was called when the so function returns.
In your second example you created A outside so's workspace and didn't pass it in as an input, so the so function doesn't have access to the A variable.
  1 Kommentar
ronaldo messi
ronaldo messi am 22 Apr. 2020
i understand now, thank you Steven!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Fangjun Jiang
Fangjun Jiang am 22 Apr. 2020
You are right. All you need to do is "function [s] = so(A)" to pass in the value of A.
  2 Kommentare
ronaldo messi
ronaldo messi am 22 Apr. 2020
how fool i am. Thank you so much Fangjun Jiang!
Steven Lord
Steven Lord am 22 Apr. 2020
You're not a fool. You said you're new with MATLAB, and that means there are things you don't know. That's how everyone, with the possible exception of Cleve, started out. And Cleve is a bit of a special case, being the author of the first version of MATLAB.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by