将 Matlab 上的函数句柄附加到积分表达式的问题

Problems attaching a function handle on Matlab to integral expression

我有一个积分表达式,它是我在 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) 也不够。

尝试

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)

抱歉,我还不能发表评论。但这有用吗?

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

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

然后检查是否相同:

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

哎呀,另一个答案上面都说了(只是把for循环换成了arrayfun,写答案的时候没看到

编辑

如果你想build-in for循环,试试:

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

并测试:

plot(funcHand(t))