MATLAB Answers

0

hi every one , how can i do a for cycle with diffrent vector length , thank you

Asked by mina massoud on 5 Jun 2019
Latest activity Commented on by mina massoud on 6 Jun 2019
clear all
clc
X=rand(17,1)
Y=rand(31,1)
Z=rand(28,1)
K=rand(31,1)
n=31
for i=1:n
A=[X(:,n) , Y(:,n) ,Z(:,n) ,K(:,n)];
AT{1,n}= inv(A{1,n}'*A{1,n})*A{1,n}';
end

  2 Comments

What do you mean? You aren't using standard Matlab terms, nor are you describing any errors, nor what your goal is. Have a read here and here. It will greatly improve your chances of getting an answer.
I do notice that your vectors have different lengths, yet you want to put them together? What should A look like when n is 18? Should it be a 3-element vector?
And why are you selecting all rows and non-existant later columns for n>1? And why are you using curly braces on a non-cell array?
sorry if first i didnt explain well my problem ,
i mean that i need to calcolate AT in this condition with a cycle for :
1) for the first 17 cycle i need to calcolate AT for all X Y Z K
2) from 18 to 28 in need to calcolta AT for Y Z K
3) from 29 till the end i need to calcolate only for Y K
thank you for your time

Sign in to comment.

Products


Release

R2019a

1 Answer

Answer by Rik
on 6 Jun 2019
 Accepted Answer

You can put them in a cell array and let cell2mat handle the removal of empty elements. I have no clue what you want to do with that variable inside your loop, so I replaced it with sum to have a proof of principle. (also, no need for clear all)
X=rand(17,1);
Y=rand(31,1);
Z=rand(28,1);
K=rand(31,1);
A=cell(numel(X),4);
A(1:numel(X),1)=num2cell(X);
A(1:numel(Y),2)=num2cell(Y);
A(1:numel(Z),3)=num2cell(Z);
A(1:numel(K),4)=num2cell(K);
AT=zeros(1,size(A,1));
for n=1:size(A,1)
B=A(n,:);B=cell2mat(B);
AT(n)= sum(B);
end

  1 Comment

Sign in to comment.