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

1 view (last 30 days)
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
Rik
Rik on 5 Jun 2019
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?
mina massoud
mina massoud on 6 Jun 2019
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.

Accepted Answer

Rik
Rik on 6 Jun 2019
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

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!