Мне нужно программировать в Matlab делать циклы - PullRequest
1 голос
/ 21 сентября 2011

У меня есть четыре параметра Q1, Q2, Q3, Q4, и я хочу увеличить последовательность параметров 0,05. Я имею в виду, что я хочу запустить четыре параметра со значением 0,1, затем увеличить Q1 на 0,05 и оставить остальные равными 0,1.затем сохраните Q1 = 0,15, увеличьте второй Q2 0,05 a

Ответы [ 3 ]

1 голос
/ 21 сентября 2011

Из того, что я понял, вы хотите сгенерировать все возможные кортежи из четырех параметров, каждый из которых может перейти от 0.1 к некоторому более высокому значению (я использую 0.2) в 0.05 увеличивается.В этом случае вы можете использовать функцию NDGRID :

[q1,q2,q3,q4] = ndgrid(0.1:0.05:0.2);
params = [q1(:) q2(:) q3(:) q4(:)]

Результат в виде строк:

params =
          0.1          0.1          0.1          0.1
         0.15          0.1          0.1          0.1
          0.2          0.1          0.1          0.1
          0.1         0.15          0.1          0.1
         0.15         0.15          0.1          0.1
          0.2         0.15          0.1          0.1
          0.1          0.2          0.1          0.1
         0.15          0.2          0.1          0.1
          0.2          0.2          0.1          0.1
          0.1          0.1         0.15          0.1
         0.15          0.1         0.15          0.1
          0.2          0.1         0.15          0.1
          0.1         0.15         0.15          0.1
         0.15         0.15         0.15          0.1
          0.2         0.15         0.15          0.1
          0.1          0.2         0.15          0.1
         0.15          0.2         0.15          0.1
          0.2          0.2         0.15          0.1
          0.1          0.1          0.2          0.1
         0.15          0.1          0.2          0.1
          0.2          0.1          0.2          0.1
          0.1         0.15          0.2          0.1
         0.15         0.15          0.2          0.1
          0.2         0.15          0.2          0.1
          0.1          0.2          0.2          0.1
         0.15          0.2          0.2          0.1
          0.2          0.2          0.2          0.1
          0.1          0.1          0.1         0.15
         0.15          0.1          0.1         0.15
          0.2          0.1          0.1         0.15
          0.1         0.15          0.1         0.15
         0.15         0.15          0.1         0.15
          0.2         0.15          0.1         0.15
          0.1          0.2          0.1         0.15
         0.15          0.2          0.1         0.15
          0.2          0.2          0.1         0.15
          0.1          0.1         0.15         0.15
         0.15          0.1         0.15         0.15
          0.2          0.1         0.15         0.15
          0.1         0.15         0.15         0.15
         0.15         0.15         0.15         0.15
          0.2         0.15         0.15         0.15
          0.1          0.2         0.15         0.15
         0.15          0.2         0.15         0.15
          0.2          0.2         0.15         0.15
          0.1          0.1          0.2         0.15
         0.15          0.1          0.2         0.15
          0.2          0.1          0.2         0.15
          0.1         0.15          0.2         0.15
         0.15         0.15          0.2         0.15
          0.2         0.15          0.2         0.15
          0.1          0.2          0.2         0.15
         0.15          0.2          0.2         0.15
          0.2          0.2          0.2         0.15
          0.1          0.1          0.1          0.2
         0.15          0.1          0.1          0.2
          0.2          0.1          0.1          0.2
          0.1         0.15          0.1          0.2
         0.15         0.15          0.1          0.2
          0.2         0.15          0.1          0.2
          0.1          0.2          0.1          0.2
         0.15          0.2          0.1          0.2
          0.2          0.2          0.1          0.2
          0.1          0.1         0.15          0.2
         0.15          0.1         0.15          0.2
          0.2          0.1         0.15          0.2
          0.1         0.15         0.15          0.2
         0.15         0.15         0.15          0.2
          0.2         0.15         0.15          0.2
          0.1          0.2         0.15          0.2
         0.15          0.2         0.15          0.2
          0.2          0.2         0.15          0.2
          0.1          0.1          0.2          0.2
         0.15          0.1          0.2          0.2
          0.2          0.1          0.2          0.2
          0.1         0.15          0.2          0.2
         0.15         0.15          0.2          0.2
          0.2         0.15          0.2          0.2
          0.1          0.2          0.2          0.2
         0.15          0.2          0.2          0.2
          0.2          0.2          0.2          0.2
0 голосов
/ 21 сентября 2011

Кроме того, с Matlab без for loop и if операторов:

n=4;
step=0.05;
base=floor((2:1/4:n));
q=base*step;
q1=q(4:end);
q2=q(3:end-1);
q3=q(2:end-2);
q4=q(1:end-3);

Который производит:

0.10    0.15    0.15    0.15    0.15    0.20
0.10    0.10    0.15    0.15    0.15    0.15
0.10    0.10    0.10    0.15    0.15    0.15
0.10    0.10    0.10    0.10    0.15    0.15
0 голосов
/ 21 сентября 2011

Если я правильно понимаю, вы хотите увеличить свои четыре параметра по одному?Как насчет того, чтобы использовать простое выражение модуля, например:

for (int i  = 0; i < 100; i++) {
    if (i % 4 == 0) {
        Q1 += 0.05;
    } else if (i % 4 == 1) {
        Q2 += 0.05;
    } else if (i % 4 == 2) {
        Q3 += 0.05;
    } else {
        Q4 += 0.05;
    }
}

Таким образом, после одного цикла вы получите:

Q1 = 0.15
Q2 = 0.10
Q3 = 0.10
Q4 = 0.10

Но через два вы получите:

Q1 = 0.15
Q2 = 0.15
Q3 = 0.10
Q4 = 0.10

И так далее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...