2015-02-02 2 views
0

Скажет, у меня есть моделирование:Matlab получить матрицу с определенными критериями

for i = 1:100; 
    s1 = rand(1)*0.1+0.1; 
    s2 = rand(1)*0.2+0.2; 
    s3 = rand(1)*0.3+0.3; 
    s4 = s1+s2*s3; 
    sim_results(i,:) = [s1 s2 s3 s4]; 
end 

теперь я хочу отдельную матрицу с результатами только при s4, определенных критериях:

x = sim_results(:,4)>0.1 && sim_results(:,4)<0.4 

(это не работа ...)

ответ

2

Это не работает из-за того, что вы указали в sim_results. Более того, вы можете посмотреть ссылку this на логические операторы, поскольку в вашем случае вы, скорее всего, захотите использовать & вместо короткого замыкания &&. То есть, если вы считаете это выражение:

expr1 && expr2 

expr2 Тогда не будет оцениваться, если expr1 ложно. Суть в том, что с использованием кода вы, скорее всего, получите ошибку Operands to the || and && operators must be convertible to logical scalar values., поскольку оператор && работает только со скалярными логическими условиями, то есть когда вы можете суммировать условие как истинное или ложное, что не так, когда вы сравниваете например, массив или матрица.

Так, чтобы вернуться к вашему вопросу, я рекомендую делать одно из следующих действий:

Решения 1: Векторизованный код

Здесь вам не нужен цикл с момента каждой операции вы используете может быть Векторизованных:

s1 = rand(100,1)*.1+.1; 
s2 = rand(100,1)*.2+.2; 
s3 = rand(100,1)*.3+.3; 
s4 = s1 + s2.*s3; 

sim_results = [s1 s2 s3 s4]; 

x = find(s4 > .1 & s4 < 0.4) %// Get row indices for your condition 

Result = sim_results(x,:) 

Простой пример с 5 строк (я использовал условие s4> 0,4 ​​& s4 < 0.4):

sim_results = 

    0.1760 0.3303 0.4169 0.3137 
    0.1584 0.3487 0.5326 0.3441 
    0.1403 0.2604 0.3538 0.2324 
    0.1510 0.2179 0.3328 0.2235 
    0.1496 0.3652 0.5715 0.3583 


x = 

    1 
    2 
    5 


Result = 

    0.1760 0.3303 0.4169 0.3137 
    0.1584 0.3487 0.5326 0.3441 
    0.1496 0.3652 0.5715 0.3583 

Решение 2: Использование временной переменной

Здесь вы можете назначить переменную на 4-й колонке sim_results и применять операторы, как описано выше:

for i = 1:100; 
    s1 = rand(1)*0.1+0.1; 
    s2 = rand(1)*0.2+0.2; 
    s3 = rand(1)*0.3+0.3; 
    s4 = s1+s2*s3; 
    sim_results(i,:) = [s1 s2 s3 s4]; 
end 

TempVar = sim_results(:,4); 
x1 = find(TempVar > .1 & TempVar < 0.4) 
Result = sim_results(x1,:) 

Надежда, что помогает!

+0

Спасибо @ Benoit_11. Я хочу получить матрицу с соответствующими столбцами для s1, s2 и s3, когда s4> 0,1 $ s4 <0.4. Как я могу это сделать? Еще раз спасибо. – user2861089

Смежные вопросы