# I want to use a for loop inside a function, where the for loop contains a subfuction. Each loop must store the variable value and make a matrix of all values, but I get 0s :(

13 Ansichten (letzte 30 Tage)
Nikolas Katsantonis am 17 Jun. 2022
function [a] = Main(Coordinates)
a=5;
for n=1:a
Coordinates=3+n;
a= test(n,Coordinates)
end
end
function [A, B]= test(n,Coordinates)
A(n)= Coordinates*3;
B(n)= A(n)*Coordinates*6;
end
##### 3 Kommentare1 älteren Kommentar anzeigen1 älteren Kommentar ausblenden
Nikolas Katsantonis am 17 Jun. 2022
Bsicly the matrix is created however the older values are saved as 0s and only the last value of the loop is saved
Geoff Hayes am 17 Jun. 2022
That makes sense, right? Look at this code
function [A, B]= test(n,Coordinates)
A(n)= Coordinates*3;
B(n)= A(n)*Coordinates*6;
end
You are creating a new A and B whenever the test function is called. These new variables/arrays won't have the history from previous calls to this function. So you are always returning arrays of zeros except for the nth value which is set in this function call.

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Geoff Hayes am 17 Jun. 2022
@Nikolas Katsantonis - you are using a as an integer and as a result from test
a=5;
for n=1:a %<--- a as integer
Coordinates=3+n;
a= test(n,Coordinates) %<--- a as result
end
test should be returning two values and not arrays (you will need to correct this code), and so you would do something like
a=5;
for n=1:a
Coordinates=3+n;
[aValue, bValue] = test(n,Coordinates);
end
then store aValue into an array so that you don't overwrite it on each iteration of the loop
a=5;
myData = zeros(a,1);
for n=1:a
Coordinates=3+n;
[aValue, bValue] = test(n,Coordinates);
myData(n) = aValue;
end
then return myData in the signature of your function (not a).
##### 4 Kommentare2 ältere Kommentare anzeigen2 ältere Kommentare ausblenden
Geoff Hayes am 17 Jun. 2022
You could try changing this code to
function [A, B]= test(n,Coordinates)
A = Coordinates*3;
B = A*Coordinates*6;
end
though the n can be removed since it is no longer relevant. It isn't clear to me why b isn't being set...it does for me when I try it.
A couple more things from
function [myData1,aValue,bValue,n] = Untitleddd(Coordinates)
a=5;
for n=1:a
Coordinates=3+n;
[aValue, bValue] = test(n,Coordinates);
end
end
Coordinates is passed in as an input parameter but is reset with 3+n. Is this intentional? Also, since test doesn't return arrays, then just do
myData1(n)= aValue;
Nikolas Katsantonis am 18 Jun. 2022
@Geoff Hayes Yes, it now works perfectly, thank you a lot!!

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Loops and Conditional Statements 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