【问题标题】:How to write indicator function in matlab如何在matlab中编写指标函数
【发布时间】:2020-03-16 21:03:05
【问题描述】:

我是matlab的新用户,我想解决以下问题:

我想构造一个分段常数函数ff 应该是像 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 的函数句柄。
  • 你能举例说明如何使用@sum 吗?当我在 matlab 中尝试时,它会给出错误消息,我无法以这种方式进行操作。
  • 当您执行f = @(x) x.^2 时,您将分配给变量f 的函数句柄用于计算x.^2 的函数。您还可以使用文本function result = myfunction(x) ... result = x.^2 创建一个文件myfunction.m,然后分配f = @myfunction 在第二种情况下,f 也将分配给计算x.^2 的函数的函数句柄。
  • 执行f = @sum 然后sum(x)f(x) 将返回相同的结果(这有点像编程语言c 中的函数指针)。如果您是 Matlab 或编程新手,这可能会让人感到困惑,您不必担心它而忘记我曾经提到过它。

标签: matlab intervals


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多