我是 matlab 的新用户,我想解决以下问题:
我想构造一个分段常数函数f
。 f
应该是一个匿名函数,如 f=@(t)1[0,0.25)(t)
。但是,分段常数函数的区间数一般是不固定的。相反,分段间隔取决于用户输入。
比如输入4,则分段区间为
[0,0.25), [0.25,0.5), [0.5,0.75) and [0.75,1)
然后
f=@(t)a1*1[0,0.25)(t)+a2*[0.25,0.5)(t)+a3*1[0.5,0.75)(t)+a4*1[0.75,1)(t);
而如果输入5,则分段区间变为
[0,0.2), [0.2,0.4), [0.4,0.6), [0.6,0.8) and [0.8,1)
有什么好的方法可以解决这个问题吗?
最佳答案
假设权重a1,...,ak已经定义好,可以使用如下方法:
%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];
%define f
f=@(t)APadded(find(t<ranges,1,'first'))
结果:
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;
关于matlab - 如何在matlab中编写指标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37349914/