gpt4 book ai didi

matlab - MATLAB中N个函数句柄求和

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:01 24 4
gpt4 key购买 nike

我在 MATLAB 中有 N 函数,我可以使用 strcatnum2streval 来定义它们循环。因此,无需手动定义,我就可以定义 N 函数。设 N=4 并按如下方式给出它们:

f1=@(x) a1*x+1;
f2=@(x) a2*x+1;
f3=@(x) a3*x+1;
f4=@(x) a4*x+1;

现在我添加这四个函数,我可以手动完成,如下所示:

f=@(x)(f1(x)+f2(x)+f3(x)+f4(x));

这里我可以手工完成,因为我知道 N=4。但是,总的来说,我永远不知道我会有多少功能。对于所有情况,我都无法编写新函数。

有什么方法可以自动执行此操作吗?我的意思是如果我给 N=6 我期待看到 MATLAB 给我这个:

f=@(x)(f1(x)+f2(x)+f3(x)+f4(x)+f5(x)+f6(x));

每当我给 N=2 时,我必须有函数 f,定义如下:

f=@(x)(f1(x)+f2(x));

我们如何做到这一点?

最佳答案

首先,你应该阅读this answer这给出了避免使用 eval 的一系列原因。很少有需要 eval 的情况,在所有其他情况下,它只会使事情复杂化。在这种情况下,您使用动态生成变量名,这被认为是一种非常糟糕的做法。正如链接的答案和该答案中链接的进一步著作中所详述的那样,动态变量名称使代码更难阅读、更难维护,并且在 MATLAB 中的执行速度更慢。

因此,与其定义函数 f1f2f3 ... fN,不如定义函数做的是定义函数 f{1}, f{2}, f{3}, ... f{N} 。也就是说,f 是一个元胞数组,其中每个元素都是一个匿名函数(或任何其他函数句柄)。

例如,代替

f1=@(x) a1*x+1;
f2=@(x) a2*x+1;
f3=@(x) a3*x+1;
f4=@(x) a4*x+1;

你会

N = 4;
a = [4.5, 3.4, 7.1, 2.1];
f = cell(N,1);
for ii=1:N
f{ii} = @(x) a(ii) * x + 1;
end

有了这些变化,我们就可以很容易地回答这个问题了。我们现在可以编写一个函数来输出 f 中函数的总和:

function y = sum_of_functions(f,x)
y = 0;
for ii=1:numel(f)
y = y + f{ii}(x);
end
end

您可以将它放在一个名为 sum_of_functions.m 的文件中,也可以将它放在您的函数文件或脚本文件的末尾,这都没有关系。现在,在您的代码中,当您想要评估 y = f1(x) + f2(x) + f3(x)... 时,您编写的是 y = sum_of_functions(f ,x).

关于matlab - MATLAB中N个函数句柄求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com