How to run a loop for variables satifying a specific condition and multiply them by values stored in a matrix?

1 visualización (últimos 30 días)
i need to create a NEW vector in which, starting from the condition that SP > 0 i can create a new vector. In detail want to skip the first line, then I want to multiply SP by 0.1 (position h+1), then 0.4 for h+2, then 0.5 for h+3 , summing the corresponding delta. You can see an example in the figure attached.
Anyone can help me?
I attached my data
Thanks in advance!

Respuesta aceptada

Cris LaPierre
Cris LaPierre el 22 de Mzo. de 2020
I recommend you spend some time going through MATLAB Onramp. It's interactive, and you can go at your own pace. Oh, and it's free.
In particular, focus on
  1. Chapter 4 - vectors and matrices
  2. Chapter 5 - indexing
  3. Chapter 6 - array calculations
  4. Chapter 11 - importing data
  5. Chapter 12 - programming (incorporating conditional logic (if statement) and looping (for loop)
  3 comentarios
Cris LaPierre
Cris LaPierre el 23 de Mzo. de 2020
Editada: Cris LaPierre el 23 de Mzo. de 2020
Nice job! That's pretty good. The remaining issues are subtle.
I made a slight change to how the data is loaded and accessed (I use a table). This means I made a slight tweak to the counter in the first for loop. The new vector is added to the table data (appears as a 4th column).
The issue is that you pause the first for-loop while you calculate new_vector. The second for-loop moves three indices ahead (h+ii) calculating new_vector. However, once it exits, the first for-loop resumes, and its value of h picks up where it left off. This means it overwrites the values that were added by the seond for-loop. Therefore, only the 0.1*SP+delta values remain.
You might be tempted to try to modify the value of h, but any changes are ignored. MATLAB doesn't let you modify the index of a for-loop.
What I would suggest is to change the second for-loop to an if statement. Make ii a counter that is 0 when SP=0, then 1, then 2, then 3. The tricky part is placing the conditional statements, incrementing and resetting to 0 in the correct spots.
data = readtable("data.xls");
m =[0.1; 0.4; 0.5];
ii = 0;
for h = 1:height(data)
if data.SP(h) > 0
if ii > 0
data.new_vector(h) = data.SP(h)*m(ii) + data.delta(h);
end
ii = ii+1;
else
ii = 0;
data.new_vector(h)= data.SP(h);
end
end
You might notice this runs quicker as well. Your code was running the second for-loop for every value of SP>0. Since most of these were unnecessary, all it was doing was slowing your code down.
EM geo
EM geo el 23 de Mzo. de 2020
@Cris LaPierre really really thanks! Really good explanation and suggestions!! Thank you very much!!!!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical 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