need general coding/ command to separate matrix data

1 view (last 30 days)
I have a for loop y= 0:2:8 and whenever the for loop value chnaged it generates two values which was stored in a matrix. Now I have a complete matrix in which column one have y=0 then several values in a rows then y changed and several vlaues in a row as shown in fig.
final matrix is:
0 5 9
0 7 3.3
0 5.5 9
1 4.0 3.5
1 2 3.3
...................... so on.
Question: I need a general coding that store number of rows in a seperate matrix/ vector when y value is fixed. I mean when y=0 then all rows with y=0 stored in a seperate vector/ matrix. Then again y changed and results in several rows. These rows stored in a seperate vector/matrix.
Your support will be highly appreciated.
Regards
  4 Comments
Muhammad Asad
Muhammad Asad on 7 Sep 2022
Now I send you my coding but formula is shorter my formula to simpler. So, when v exceute it give us matrix of three column. Important is value of first column is fixed upto seperate rows. I need all those values in a seperate matrix. reason is that for a fixed value of beta there are certian values in column 2 and 3. I need to draw graph using these values. Then again beta change and i have certian set of values and i need again draw graph using "hold on" command.
If you undertsnad my question and you think another way to tackle this then please add your coding in it.
thanks in advance
clear all
c1= 0.4;
v=[];
betavalues= 0:2:4;
a= zeros(length(betavalues),1);
for i = 1:length(betavalues)
a(i)= betavalues(i);
beta=a(i)
lamdavalues= 1:1:10;
b= zeros(length(lamdavalues),1);
for j=1:length(lamdavalues)
b(j)= lamdavalues(j);
lamda=b(j);
x1= beta*lamdavalues*c1;
v(end+1,:)=[beta lamda x1];
end
end

Sign in to comment.

Accepted Answer

Bruno Luong
Bruno Luong on 7 Sep 2022
Edited: Bruno Luong on 7 Sep 2022
Try this:
% Fake data
finalmatrix=sortrows(randi(10,30,3),1)
finalmatrix = 30×3
1 7 1 2 6 10 2 7 9 3 10 9 3 7 1 3 3 5 3 2 4 4 4 5 4 8 8 4 6 2
y = finalmatrix(:,1);
n=diff(find([true; diff(y)~=0; true]))
n = 10×1
1 2 4 3 1 5 3 5 4 2
splitmatrix=mat2cell(finalmatrix,n,size(finalmatrix,2));
splitmatrix{:}
ans = 1×3
1 7 1
ans = 2×3
2 6 10 2 7 9
ans = 4×3
3 10 9 3 7 1 3 3 5 3 2 4
ans = 3×3
4 4 5 4 8 8 4 6 2
ans = 1×3
5 2 1
ans = 5×3
6 2 2 6 10 1 6 1 6 6 6 2 6 5 5
ans = 3×3
7 3 9 7 3 7 7 4 8
ans = 5×3
8 9 7 8 8 2 8 3 3 8 2 5 8 9 8
ans = 4×3
9 6 6 9 9 7 9 4 7 9 1 6
ans = 2×3
10 8 7 10 6 3
  4 Comments
dpb
dpb on 7 Sep 2022
I got totally lost in the explanation above, but if @Bruno Luong's solution for splitmatrix is the right data, then
figure
hold on
cellfun(@(c)plot(c(:,2),c(:,3)),splitmatrix)
should be close to what you're looking for.
As always, "salt to suit"...

Sign in to comment.

More Answers (0)

Categories

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

Community Treasure Hunt

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

Start Hunting!