MATLAB Answers

Save the values of a function in a for loop

10 views (last 30 days)
I need to record the y-values of a line from x=a to x=b.
Each loop, the slope of the line will change so there will be a different set of x and y's for each loop
How can I record the y-values from the function for each loop? The above fix doesn't work if a function is inside of it. This is my code and gives me an error once it trys to record y(i):
function for_test
x = 0:1:10;
y = ones(size(x)) ;
for i=1:10
y(i) = x+rand;
y % use y(i) so that it is written as a vector
end
end

  2 Comments

Mohammad Sami
Mohammad Sami on 27 Apr 2020
The problem is this line
y(i) = x+rand;
The variable x is length 11
x+rand; % this would generate an output of length 11
However you are trying to assign it to a single value of y
y(i) % this is lenght 1
Therefore you are getting an error in assignment.
Austin Hernandez
Austin Hernandez on 27 Apr 2020
That is the exact error message I am getting but my question was how do I store each y values for each through each loop? I think I found a workaround, and that is to put the data into a cell array with {i}. Is that the proper fix or is there another way?

Sign in to comment.

Accepted Answer

Mrutyunjaya Hiremath
Mrutyunjaya Hiremath on 27 Apr 2020
Hell Austin Hernandez,
you are correct. but Option01 is good.
Option 01:
function for_test
x = 0:1:10;
y = zeros(size(x)) ;
for i=1:10
y(i,:) = x+rand;
y % use y(i) so that it is written as a vector
end
end
Option 02:
function for_test
x = 0:1:10;
y = {}; %ones(size(x)) ;
for i=1:10
y{i} = x+rand;
y % use y(i) so that it is written as a vector
end
end

  5 Comments

Show 2 older comments
Mrutyunjaya Hiremath
Mrutyunjaya Hiremath on 27 Apr 2020
Hello Austin,
Answer is in your problem only....
h = 0:1:10
y = zeros(size(h));
v = zeros(size(h));
o = zeros(size(h));
prompts = {'enter 1'};
dlg = 'title';
c = 0;
m = 0;
u = 0;
hold on
for i=1:5
A = inputdlg(prompts, dlg);
Aa = str2double(A);
x = Aa(1);
if x == 1
y(m,:) = 1000*h;
m = m + 1;
plot(h,y(m,:));
elseif x == 0
v(u,:) = h+1;
u = u + 1;
plot(h,v(u,:));
else
o(c,:) = -h*5;
c = c + 1;
plot(h,o(c,:));
end
end
end
Mrutyunjaya Hiremath
Mrutyunjaya Hiremath on 27 Apr 2020
@ Austin,
Thank you
And, Initialize the values with One NOT Zero ...
c = 1;
m = 1;
u = 1;

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!