2013-11-13 2 views
1

Я пишу функцию в классе электротехники как часть лаборатории, где мы должны построить осциллограф. Эта особая функция - это программная «триггерная схема». Эта функция должна быть зарегистрирована как 1, если она соответствует определенным условиям. Точная формулировка:ошибка логического оператора matlab

«Напишите функцию MATLAB под названием triggering_circuit, который имеет входные параметры:. Past_sample, current_sample, trigger_level и trigger_slope функция должна возвращать значение 1, если trigger_level между past_sample и current_sample и разница между текущим образцом и прошлым образцом (то есть current_sample - past_sample) имеет тот же знак, что и trigger_slope. "

Мы чувствуем, как если бы мы написали функцию правильно, но когда мы пытаемся назвать его в нашей функции, мы получаем ошибку:

«Ошибка в triggering_circuit (строка 4) если trigger_level> = past_sample & & trigger_level < = current_sample»

Это не дает какие-либо другие ошибки, за исключением того, что функция ничего выходного переменного т не назначая. Полагаю, это потому, что функция не закончит работу.

Теперь я смотрел онлайн, и я не понимаю, как мы можем ошибаться в логическом операторе. Я бы очень признателен за любую помощь.

Функция выглядит следующим образом:

function [ m ] = triggering_circuit(past_sample, current_sample, trigger_level, trigger_slope) 

if trigger_level >= past_sample && trigger_level <= current_sample 
    a = current_sample - past_sample; 
    if a < 0 && trigger_slope < 0 
     m = 1; 
    elseif a > 0 && trigger_slope > 0 
      m = 1; 
    else 
     m = 0; 
    end 
end 
end 
+0

Verify ваши материалы будут, как и ожидалось, и я думаю, вы должны установить 'т = 0 ', если не ввести основной' if'-заявление. Вы также считаете, что 'current_sample' больше, чем' past_sample'. – David

+0

Итак, я добавил m = 0, но это все еще не устраняет проблему. По-видимому, мои past_sample и current_sample были векторами, которые я изначально не понял. В этот момент я меняю && на & & right? Есть ли что-нибудь еще, что мне нужно изменить? – Auxilio

+0

Как вектор может быть больше, чем другой вектор? Описание не имеет смысла для входных векторов. Пожалуйста, укажите пример ввода и опишите ожидаемый результат. – Daniel

ответ

1
function [ m ] = triggering_circuit(past_sample, current_sample, trigger_level, trigger_slope) 
    if trigger_level >= past_sample && trigger_level <= current_sample 
     a = current_sample - past_sample; 
     if a < 0 && trigger_slope < 0 
      m = 1; 
     elseif a > 0 && trigger_slope > 0 
      m = 1; 
     else 
      m = 0; 
     end 
    else 
     m = 0; %# This is where you would set m = 0 
    end 
end 

Я не уверен, если вы уже поняли это, но вы должны вернуть что-то для выходного аргумента, который объявлен с функцией (м этот случай), и в текущей настройке есть случай, когда ничего не может быть возвращено.

Так вызов функции в коде, например, как это:

м = triggering_circuit (0,9884, 1,0130, 1, 1)
Возвращает т = 1, когда вы это называете.

Кроме того, здесь приведены ссылки для логических операндов: http://www.mathworks.com/help/matlab/ref/logicaloperatorselementwise.html http://www.mathworks.com/help/matlab/ref/logicaloperatorsshortcircuit.html

+0

Да! Вот и все! Спасибо огромное! – Auxilio

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