【问题标题】:Problems attaching a function handle on Matlab to integral expression将 Matlab 上的函数句柄附加到积分表达式的问题
【发布时间】:2017-02-09 01:21:21
【问题描述】:

我有一个积分表达式,我在 Matlab 上使用

x = 0:1/1000:1;
g = @(x) (exp(-1./x.^2).*heaviside(x)).*(exp(-1./(1-x).^2).*heaviside(1-x));
t = 0:1/1000:1; 
f = zeros(size(t));
for i = 1:length(t)
    f(i) = integral(g,0,t(i));
end

我可以绘制它,例如,使用plot(t,f),但出于其他目的,我想将一个函数句柄附加到f,例如f = @(t) zeros(size(t))。到目前为止,我还无法弄清楚。 f = @(t) integral(@(x)g(x),0,t) 也不够用。

【问题讨论】:

    标签: matlab math mathematical-expressions


    【解决方案1】:

    抱歉,我还不能发表评论。但这行得通吗?

    funcHand= @(t) integral(g,0,t);
    

    您不必在上面的代码中定义 x,因为 integral 的输入是一个函数句柄。

    然后检查是否相同:

    f2 = zeros(size(t));
    for i = 1:length(t)
        f2(i) = funcHand(t(i));
    end
    

    哎呀,其他答案说了以上所有内容(只是用arrayfun替换了for循环。我在写答案时没有看到它。

    编辑

    如果您想内置 for 循环,请尝试:

    funcHand= @(t) arrayfun(@(u) integral(g, 0, u),t);
    

    并测试:

    plot(funcHand(t))
    

    【讨论】:

    • 感谢您的帮助,但不幸的是您的代码也不起作用。我得到同样的错误。本质上,我希望能够在以下几行中编写f(t)
    • 打败我。不错。
    • 我刚刚拼出了你的答案...希望它能回答问题。
    • @MadPhysicist 确实如此。它的效果也很好,所以我要感谢你们俩。根据通常的 Stack Exchange 约定,我将延迟授予“已回答”标签,但是疯狂的物理学家,我希望您不会介意我将其授予 Jon……无论如何,他也许可以使用声誉积分。
    • 确实如此。我认为 OP 没有阅读关于不将数组传递到非 arrayfun 版本的部分。
    【解决方案2】:

    试试

    f = @(u) integral(g, 0, u)
    

    g 中的额外间接级别似乎是多余的。请注意,我已将输入称为u。请记住,f 不会接受向量作为其输入。因此,在当前工作区中执行类似 f(t) 的操作不会创建与 for 循环相同的数组。您将不得不遍历数组。便利功能arrayfun 将为您完成此操作:

    o = arrayfun(f, t)
    

    大致相当于你现在的循环:

    o = zeros(size(t));
    for i = 1:length(o)
        o(i) = f(t(i));
    end
    

    arrayfun 实际上可以合并到您的函数句柄中以允许它处理向量参数:

    h = @(t) arrayfun(f, t)
    

    为了避免不必要的函数句柄的扩散,你可以这样做

    f = @(t) arrayfun(@(u) integral(g, 0, u), t)
    

    【讨论】:

    • 我收到错误:A and B must be floating-point scalars. Error in @(u)integral(g,0,u)。您能否扩展“您将不得不遍历数组”的意思?
    • @user3482534。看起来您正试图为您传递t。我特别提到这是不可能的。请参阅我更新的解决方案。另外,@Jon 的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2019-03-14
    • 1970-01-01
    相关资源
    最近更新 更多