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

时间:2016-03-19 11:57:25

标签: matlab symbolic-computation

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

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

我想出的一个解决方案是生成一个字符串数组“a0”,“a1”,...,“aN”并使用eval定义输出的每个组件。但这很麻烦,我想知道是否有更好的方法。

谢谢!

[编辑]

以下是我当前解决方案的最小工作示例:

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

1 个答案:

答案 0 :(得分:2)

试试这个:

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)来创建符号变量数组。