首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中自动生成方程组(Python中类似的问题)

在MATLAB中自动生成方程组(Python中类似的问题)
EN

Stack Overflow用户
提问于 2017-04-07 23:21:54
回答 1查看 71关注 0票数 0

假设我想要解一个含有N未知变量的N方程组。假设方程是以下一般形式(我已经大大简化了它,我们可以假设每一行等于零)。

代码语言:javascript
复制
x1 - const(1)
x2 - const(2)
x3 - const(3)
...
xN - const(N)

其中x1x2、.、xN是我的变量,const是代码前面确定的常量的长度N向量。我不知道有多少方程和变量(即不能硬代码),但我仍然希望用一般的方式来编写和求解这个系统。

在MATLAB中,我目前的解决方案是执行以下操作,其中n_vars是变量数,我的程序在前面确定了变量数。

代码语言:javascript
复制
sym_vars = sym('x',[1 n_vars]);
for i = 1:n_vars
    eqn(i) = sym_vars(i)-const(i);
end

这就建立了方程组。eqn,我在上面展示了。我计划使用的所有数值求解器(例如fsolvelsqnonlinode45)都要求将方程组定义为函数句柄或完全独立的函数。我可以通过matlabFunction将符号表达式转换为函数句柄,如果处理ODEs,则通过odeFunction来解决这个问题。

然而,这个方法有两个主要的问题,我想解决。第一种情况是,如果我只执行数值计算,我就不想制造符号变量,而依赖符号工具箱。第二种情况是,如果我正在求解ODEs,变量实际上必须是x1(t)x2(t)x3(t)、.、xN(t)才能使odeFunction正常工作。但是,使用与我的sym方法相同的逻辑,以一种通用的方式使这些变量生成警告,因为在将来的版本中,不允许使用无效变量名的字符向量。

如何使用函数句柄而不是符号变量(或等效的解)来编写方程组?当然,必须有一种方法来编写一个方程组,而不需要手动这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-08 08:25:17

使用向量函数,如

代码语言:javascript
复制
N=5;
const=1:5;
fsolve(@(x)x-const,zeros(1,N))

结果是:

代码语言:javascript
复制
1.0000    2.0000    3.0000    4.0000    5.0000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43288416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档