使用符号 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
)来创建符号变量数组。
我有一个函数 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
)来创建符号变量数组。