如何在Matlab中编写指示函数

3
我是Matlab的新用户,我想解决下面的问题:
我想构建一个分段常数函数f。 f应该是一个匿名函数,例如f=@(t)1 [0,0.25)(t)。然而,分段常数函数的间隔数量通常不固定。相反,它取决于用户的输入。
例如,如果用户输入4,则分段间隔如下:
[0,0.25),[0.25,0.5),[0.5,0.75)和[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)和[0.8,1)
有没有好的方法来解决这个问题?

请注意,在任何使用匿名函数的情况下,您也可以使用普通的Matlab函数和@运算符来获取函数句柄。例如,"@sum"将是指向函数"sum"的函数句柄。 - Matthew Gunn
你能举一个如何使用@sum的例子吗?当我在Matlab中尝试时,它会给出错误消息,告诉我不能以这种方式操作。 - will_cheuk
当你执行 f = @(x) x.^2 时,你将一个计算 x.^2 的函数句柄分配给变量 f。你也可以创建一个文件 myfunction.m,其中包含文本 function result = myfunction(x) ... result = x.^2,然后分配 f = @myfunction。在第二种情况下,f 也将被分配一个计算 x.^2 的函数句柄。 - Matthew Gunn
执行 f = @sum 然后 sum(x)f(x) 将返回相同的结果(这有点像编程语言 c 中的函数指针)。如果你是Matlab或编程的新手,这可能会让你感到困惑,你不必担心它,并忘记我曾经提到过它。 - Matthew Gunn
相关问题:https://stackoverflow.com/questions/27097861/how-to-vectorize-a-piecewise-periodic-function-in-matlab/35046524 - Daniel
1个回答

2
假设权重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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接