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

19 vues (au cours des 30 derniers jours)
JD
JD le 1 Avr 2021
Commenté : Image Analyst le 2 Avr 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

Réponses (2)

Sulaymon Eshkabilov
Sulaymon Eshkabilov le 1 Avr 2021
Modifié(e) : Sulaymon Eshkabilov le 1 Avr 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 commentaires
JD
JD le 1 Avr 2021
I fixed the error by changing this line “For ii=1:size(a)-1”
But now my C matrix is still all 0’s
Steven Lord
Steven Lord le 1 Avr 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.

Connectez-vous pour commenter.


Image Analyst
Image Analyst le 1 Avr 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 commentaires
JD
JD le 1 Avr 2021
Hi Image Analyst,
Did that work for you? I have to turn in my work tonight so just wondering if you were able to troubleshoot why it’s not working with the actual function.
Thanks
Image Analyst
Image Analyst le 2 Avr 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.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by