使用符号 matlab 来获得灵活数量的参数和函数

Use symbolic matlab for flexible number of arguments and functions

我有一个函数 F,它将向量 a 作为输入。函数的输出和 a 都是长度为 N 的向量,其中 N 是任意的。每个分量 Fn 的形式为 g(a(n),a(n-k)) ,其中 g 对于每个组件都是相同的。

我想使用它的符号功能在 matlab 中实现这个函数并计算它的 Jacobian(然后使用 matlabFunction 将函数和它的 jacobian 存储为一个常规的 .m 文件)。我知道如何为每个输入都是可以手动处理的标量的函数执行此操作。但是这里我想要一个能够为任何 N 生成这些文件的脚本。有什么好的方法可以做到这一点吗?

我想到的一个解决方案是生成一个字符串数组 "a0","a1", ..., "aN" 并使用 [=12 定义输出的每个组件=].但这很乱,我想知道是否有更好的方法。

谢谢!

[编辑]

这是我当前解决方案的一个最小工作示例:

function F = F_symbolically(N)

%generate symbols
for n = 1:N
    syms(['a',num2str(n)]); 
end

%define output
F(1) = a1;
for n = 2:N
    F(n) = eval(sprintf('a%i + a%i',n,n-1));
end

试试这个:

function F = F_symbolically(N)
    a = sym('a',[1 N]);
    F = a(1);
    for i=2:N
        F(i) = a(i) + a(i-1);
    end
end

注意使用 sym 函数(而不是 syms)来创建符号变量数组。