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

2 visualizzazioni (ultimi 30 giorni)
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!

Risposta accettata

Cris LaPierre
Cris LaPierre il 22 Mar 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 Commenti
Cris LaPierre
Cris LaPierre il 23 Mar 2020
Modificato: Cris LaPierre il 23 Mar 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 il 23 Mar 2020
@Cris LaPierre really really thanks! Really good explanation and suggestions!! Thank you very much!!!!

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by