MATLAB Answers

Saving output of for loop after each iteration (for a function)

67 views (last 30 days)
JD
JD on 1 Apr 2021
Commented: Image Analyst on 2 Apr 2021
y = 0:0.05:1;
u= 2*y-(2*y.^3)+y.^4;
a = 0:0.01:1;
b = 4000;
Carray=zeros(1,101)
for i=1:size(a)
c=A_function(y,u,b,a(i));
Carray(i)=c;
end
I want to run the function 'c' for all values of 'a'
and I want to store value of 'c' for each 'a'
The error i get is "Unable to perform assignment because the left and right sides have a different number of elements"
Can someone please let me know what I am doing wrong?
Thanks

Answers (3)

Sulaymon Eshkabilov
Sulaymon Eshkabilov on 1 Apr 2021
Edited: Sulaymon Eshkabilov on 1 Apr 2021
Here is the corrected code of yours:
y = 0:0.05:1;
u= 2*y-(2*y.^3)+y.^4;
a = 0:0.01:1;
b = 4000;
C=zeros(numel(a),numel(u));
for ii=1:size(a)
C(ii,:)=A_function(y,u,b,a(ii));
end
  3 Comments
Steven Lord
Steven Lord on 1 Apr 2021
%{
C=zeros(numel(a),numel(u));
for ii=1:size(a)
%}
I agree with the first line but not the second. Before looking at the output of the code below, how many lines of text does it display?
a = 0:0.1:1;
for k = 1:size(a)
fprintf("k is %d\n", k)
end
k is 1
Now compare this with using numel instead of size.
a = 0:0.1:1;
for k = 1:numel(a)
fprintf("k is %d\n", k)
end
k is 1 k is 2 k is 3 k is 4 k is 5 k is 6 k is 7 k is 8 k is 9 k is 10 k is 11
Why the difference in behavior? When any of the inputs to the colon function or : operator is non-scalar and non-empty, MATLAB will just use the first element of that input.
sz = size(a)
sz = 1×2
1 11
v = 1:sz % equivalent to 1:sz(1)
v = 1
While your code would have worked for a column vector, the numel approach works in general to allow you to loop through all the elements in an array.

Sign in to comment.


VBBV
VBBV on 1 Apr 2021
%if true
y = 0:0.01:1;
Change the y to same size as a
  5 Comments
VBBV
VBBV on 1 Apr 2021
%if true
%f true
c = A_function(y,u,b,a(i))
Carray{i,:} = c;
Try the above. What is size of c ?

Sign in to comment.


Image Analyst
Image Analyst on 1 Apr 2021
Try this:
y = 0:0.05:1;
u = 2*y-(2*y.^3)+y.^4;
a = 0:0.01:1;
b = 4000;
rows = length(a)
columns = 101;
Carray = zeros(rows, columns);
for row = 1 : rows
resultVector = A_function(y, u, b, a(row));
Carray(row, :) = resultVector;
end
function c = A_function(y, u, b, aValue)
c = randi(9, 1, 101); % Whatever it may be...
end
Obviously replace the A_function with your actual function that returns a vector. Carray will not be all zeros.
  8 Comments
Image Analyst
Image Analyst on 2 Apr 2021
Sorry, I didn't get a chance last night, but I guess it's past the homework deadline so it doesn't matter at this point.

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!

Translated by