Y = ABS(A-MOD(X,(A + 1)));
a = 0表示锯齿 对称三角形a = 1
我需要使用单行模数函数来跟踪图像的功能
答案 0 :(得分:3)
(完全忽略c / c ++标签)
首先,函数是Piecewise,所以虽然它可以在一行中定义,但它更清楚地打破它然后重新组合......
x=mod(x,1);
if x <= 0.3
value = -1 / 0.3 * x + 1;
else %// x > 0.3
value = 1 / 0.7 * (x - 0.3);
end
在一行中复制if
运算符可以通过逻辑测试可能的值,乘以解决方案并对所有术语求和来完成,
为什么?
如果为false,逻辑测试将返回0,如果为true则返回1,因此不需要的解将乘以0,并且所需的将乘以1.
所以(丑陋的)单行解决方案是:
(mod(x,1)<=0.3).*(1-1/0.3.*mod(x,1))+(0.3<mod(x,1)).*(1/0.7.*(mod(x,1)-0.3))
其中
(mod(x,1)<=0.3) %// first logical test
(mod(x,1)<=0.3).*(1-1/0.3.*mod(x,1)) %// times value if true
(mod(x,1)<=0.3).*(1-1/0.3.*mod(x,1))+(0.3<mod(x,1)) %//plus second logical test
(mod(x,1)<=0.3).*(1-1/0.3.*mod(x,1))+(0.3<mod(x,1)).*(1/0.7.*(mod(x,1)-0.3))
%// times value if true
x=0:0.1:3;
f=(mod(x,1)<=0.3).*(1-1/0.3.*mod(x,1))+(0.3<mod(x,1)).*(1/0.7.*(mod(x,1)-0.3));
plot(x,f)
答案 1 :(得分:0)
这是一个解决方案,适用于a_up=1
,a_down=0
(第一种情况锯齿),a_up=1
,a_down=1
(第二种情况,三角函数)和任何其他组合(例如a_up=0.7
,a_down=0.3
,不对称三角波)
t=0:0.001:10;
ampl=2;
a_up=0.7;
a_down=0.3;
if a_down==0
y=mod(t*(ampl/a_up),ampl);
else
t_1= 0:0.001:a_up;
t_2= 0:0.001:a_down;
helper= unique(mod(t_1*(ampl/a_up),ampl));
helper2= ampl-unique(mod(t_2*(ampl/a_down),ampl));
signal= [helper, helper2];
signal2= repmat(signal,1,ceil(numel(t)/numel(signal)));
y= signal2(1:numel(t));
end
figure(1)
plot(t,y)
我的所作所为:
t
是我的x轴ampl
我的幅度(图的范围从0到放大)a_up
达到最大值所需的时间间隔a_down
再次达到零所需的时间间隔a_down=0
会出错t_1,t_2
是一个斜坡所需的时间间隔。helper,helper2
是上升或下降侧翼的信号signal
包含组合信号signal2
会定期重复,直到它与我的x轴相同或更大(t
)y
是缩减信号,因此其大小与t