FOR loop taking every row from a matrix

1 visualización (últimos 30 días)
John Pickles
John Pickles el 7 de En. de 2019
Editada: Shubham Gupta el 7 de En. de 2019
I am working with the survey data from an Excel file, it has only three columns: [Depth, Inclination, Azimuth]. This data then is used to plot a trajectory in the subsurface.
At the momemnt, I am building a code that slightly modifies the above values of Inclination and Azimuth with simple formulas. As for now, I have a FOR loop with synthetic data of uniformly increasing Depth [1:200] and constant values of Incl & Azim, that, for each incriment in Depth (going deeper) calculates the new values of Incl. & Azimuth. Since the Incl. & Azim. values are constant, it's easy now to calculate with every new value of Depth.
Next step and problem: I have the real data of the above columns, [Depth, Inclination, Azimuth], say [X,Y,Z,] with random survey values (i.e., no uniformly increasing depth anymore. It does go deeper, but with different intervals each time; same type of change for the other two). I have imported the Excel into MATLAB and created the [3x159] matrix. I now want to incorporate the values in my FOR loop, such that it takes every row for the calculations as follows:
  1. It takes X1 (Depth1), calculates in some formula the values, e.g. modification = X1+1/3;
  2. Then it takes Y1, calculates some different values, e.g. Ynew = Y1 + modification;
  3. Lastly, it grabs Z1, calculates another value, e.g. Znew = Z1 + modification;
And so on it repeats the same concept for X2,Y2,Z2 etc. until it reaches the end of the survey data. It will give me in the end the new matrix [X, Ynew, Znew].
Doesn't seem too complicated to tell the code to take every row of the data, but can't get it? Any help would be appreciated. Thanks!

Respuesta aceptada

Shubham Gupta
Shubham Gupta el 7 de En. de 2019
Editada: Shubham Gupta el 7 de En. de 2019
Let's call input [3x159] matrix be Xin, and the final output [3x159] matrix be Xout. Here's is the code I would try :
Xout = zeros(size(Xin)); % predefine Xout
for i=1:size(Xin,1) % edited the dimension ( Thanks for the comments )
X = Xin(i,1);
Y = Xin(i,2);
Z = Xin(i,3);
modification = X + 1/3;
Ynew = Y + modification;
Znew = Z + modification;
Xout(i,:)=[ X, Ynew, Znew]; % save [X, Ynew, Znew] in i-th row
end
  3 comentarios
Stephen23
Stephen23 el 7 de En. de 2019
For clarity it is better to specify the dimension:
size(Xin,1)
Jan
Jan el 7 de En. de 2019
@John Pickles: In for i=1:size (Xin), size replies a vector. This is equivalent to:
for i = 1:[3,159]
Now Matlab uses the first element for the colon operator only, and ignores the 159. It works, but Stephen's suggestion is celar and unique:
for i = 1:size(Xin, 1)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Data Distribution Plots en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by