假设我想要解一个含有N未知变量的N方程组。假设方程是以下一般形式(我已经大大简化了它,我们可以假设每一行等于零)。
x1 - const(1)
x2 - const(2)
x3 - const(3)
...
xN - const(N)其中x1、x2、.、xN是我的变量,const是代码前面确定的常量的长度N向量。我不知道有多少方程和变量(即不能硬代码),但我仍然希望用一般的方式来编写和求解这个系统。
在MATLAB中,我目前的解决方案是执行以下操作,其中n_vars是变量数,我的程序在前面确定了变量数。
sym_vars = sym('x',[1 n_vars]);
for i = 1:n_vars
eqn(i) = sym_vars(i)-const(i);
end这就建立了方程组。eqn,我在上面展示了。我计划使用的所有数值求解器(例如fsolve、lsqnonlin、ode45)都要求将方程组定义为函数句柄或完全独立的函数。我可以通过matlabFunction将符号表达式转换为函数句柄,如果处理ODEs,则通过odeFunction来解决这个问题。
然而,这个方法有两个主要的问题,我想解决。第一种情况是,如果我只执行数值计算,我就不想制造符号变量,而依赖符号工具箱。第二种情况是,如果我正在求解ODEs,变量实际上必须是x1(t)、x2(t)、x3(t)、.、xN(t)才能使odeFunction正常工作。但是,使用与我的sym方法相同的逻辑,以一种通用的方式使这些变量生成警告,因为在将来的版本中,不允许使用无效变量名的字符向量。
如何使用函数句柄而不是符号变量(或等效的解)来编写方程组?当然,必须有一种方法来编写一个方程组,而不需要手动这样做。
发布于 2017-04-08 08:25:17
使用向量函数,如
N=5;
const=1:5;
fsolve(@(x)x-const,zeros(1,N))结果是:
1.0000 2.0000 3.0000 4.0000 5.0000https://stackoverflow.com/questions/43288416
复制相似问题