我是matlab和stackoverflow的新用户。我问question关于如何编写指标函数f,问题如下:
" f应该是一个匿名函数,如f = @(t)1 [0,0.25)(t)。但是,分段常数函数的间隔数通常不固定。相反,分段间隔取决于用户输入。"
我很高兴有些用户回答了我的问题。 solution回答如下:
%defines weight vector. for example: a1=1, a2=2, a3=3, a4=4,a5=5
A = 1:5;
%defines a range vector
ranges = [0:(1/length(A)):1,inf];
%The padding is for handling cases where t<0 or t>=1
APadded = [0,A,0];
f=@*(t)APadded(find(t < ranges,1,'first'));
Result
f(0.1) = 1, f(0.3) = 2, f(0.5) = 3, f(0.7) = 4, f(0.9) = 5, f(-0.1) = f(1.1) = 0;
我想稍微扩展一下代码。例如,如果我定义@(X)sun(X),当X的输入是向量时,它将输出作为向量。但是,上述指标结果的解决方案没有。人们可以尝试f([0.1 0.3 0.5 0.7 0.9]),它不会给出1,2,3,4,5。
如何解决这个问题,即使输入是一个向量,它也会给出正确的结果?
答案 0 :(得分:0)
在创建的f函数上使用Matlab的arrayfun函数:
Theme.Holo.Light.Dialog
结果:
f2=@(t)arrayfun(f,t);
完整代码示例:
f2([-0.1, 0.1,0.3,0.5,0.7,0.9,1.1])
ans =
0 1 2 3 4 5 0