>プログラムの問題点がわかる方いらっしゃいましたらご回答お願いします
- 浮動小数点数の等号==による判定は危険なので、不等号で判定すべきです
- 仕様およびプログラムにおいて絶対値の有無が統一されていません
- for 文を回して計算する出力 y に引数が無い為、毎回スカラ値を上書きしてしまいます
- for k = length(u1)ではループが1回しか回らないのでfor k = 1:length(u1)とすべきです
u1 = 0.3 * sin(0:pi/100:4*pi);
tm = 0:length(u1)-1;
y = fcn(u1);
yyaxis left
plot(tm,u1);
xlabel('時刻 [単位未指定]')
ylabel('速度u1 [単位未指定]')
yyaxis right
plot(tm,y);
ylabel('リレー出力電圧 [単位未指定]');
function y = fcn(u1)
% リレーON/OFF状態のフラグ
relay_on = false;
for k = 1:length(u1)
% 条件2 :速度u1が0になった時リレーがOFFになりu1に30をかけて出力
if abs(u1(k)) <= 0.0001
y(k) = u1(k)*30;
relay_on = false;
%条件1:速度u1が0.2以上の場合リレーがONになりu1に1295をかけてを出力
elseif ~relay_on && abs(u1(k)) >= 0.2
y(k) = u1(k)*1295;
relay_on = true;
%条件3 :1つ前のステップで1295を出力している場合0.2~0の場合もリレーがONになりu1に1295をかけて出力
elseif relay_on
y(k) = u1(k)*1295;
else %条件3 :それ以外はu1に30をかけて出力
y(k) = u1(k)*30;
end
end
end