Matlab 为什么对多元方程组使用“solve”会出现意外错误?
当我试图求解一个包含两个变量和两个未知数的方程组(Izhikevich nullclines)时,我遇到了一个意外错误:Matlab 为什么对多元方程组使用“solve”会出现意外错误?,matlab,solver,Matlab,Solver,当我试图求解一个包含两个变量和两个未知数的方程组(Izhikevich nullclines)时,我遇到了一个意外错误:警告:两个变量中有4个方程。和警告:无法找到显式解。 这是出乎意料的,因为正如我所说的,我只提供了2个方程和2个变量,这应该是一个格式良好的方程组 我的相关代码如下: syms uu vv [solvv,soluu]=solve([0.04*vv^2+5*vv+140-uu+I(t)==0,a(t)*(b(t)*vv-uu)==0,[vv,uu]) 完整的错误跟踪是: 警告:2
警告:两个变量中有4个方程。
和警告:无法找到显式解。
这是出乎意料的,因为正如我所说的,我只提供了2个方程和2个变量,这应该是一个格式良好的方程组
我的相关代码如下:
syms uu vv
[solvv,soluu]=solve([0.04*vv^2+5*vv+140-uu+I(t)==0,a(t)*(b(t)*vv-uu)==0,[vv,uu])代码>
完整的错误跟踪是:
警告:2个变量中有4个等式。
\>在C:\Program Files\MATLAB\R2012b\toolbox\symbol\symbol\symmengine.p>symmengine at 54中
在97处的mupadengine.mupadengine>mupadengine.evalin中
在mupadengine.mupadengine>mupadengine.feval中,150
以160为单位计算
第三季度,纽约大学37岁
64岁开始跑步
警告:找不到显式解决方案。
\>在第169页
第三季度,纽约大学37岁
在64档运行
困惑的是,我去了MATLAB的solve
,并尝试使用示例片段来求解多元方程组:
syms u v
[solv,solu]=solve([2*u^2+v^2==0,u-v==1],[v,u])
根据文档,此代码段的预期输出为:
solv=
-(2^(1/2)*1i)/3-2/3
(2^(1/2)*1i)/3-2/3
索鲁=
1/3-(2^(1/2)*1i)/3
(2^(1/2)*1i)/3+1/3
但狙击手却回来了:
警告:2个变量中有4个等式。
\>在C:\Program Files\MATLAB\R2012b\toolbox\symbol\symbol\symmengine.p>symmengine at 54中
在97处的mupadengine.mupadengine>mupadengine.evalin中
在mupadengine.mupadengine>mupadengine.feval中,150
以160为单位计算
警告:找不到显式解决方案。
\>在169处求解
solv=
[空符号]
solu=
[]
和以前一样
现在我知道我的代码并没有犯一些初学者的错误,因为即使是示例代码也有同样的错误。调用单变量示例snippit的效果与预期一样。我已经用Matlab2012a和Matlab2014a试过了
什么可以解释这种不寻常的行为?可以在MATLAB 2014a上复制这种情况。我发现如果我已经使用syms
定义了变量,那么可以让solve
自动解析变量
syms u v
[sv, su] = solve([2*u^2 + v^2 == 0, u - v == 1], [v, u]) % Doesn't work
% works but order-unspecified so this is not desirable
[su, sv] = solve([2*u^2 + v^2 == 0, u - v == 1])
另一个用户指出了使用错误文档的错误。使用以下符号代替重新排序的解决方案。另一种形式似乎是2015年。您可能应该在2012a中验证这一点,但似乎确实如此
您说您使用的是R2014a,但您链接到了当前版本的Matlab R2015a的文档。这是R2014a中的示例。你会发现你所指的例子并不存在。抓住了。没想到会有这样的变化。注意。我无法访问存档文档,因为我只是一个用户,而不是许可证持有人。我认为发生这种变化是因为许多用户不理解求解u
和v
与二元向量之间的区别。对于符号解,Mathematica可能是更好的选择,正如@madbitloman所说,Matab的符号数学工具箱对于这样的系统是一个非常好的选择。但是,您需要查看正确的文档。您说您使用的是R2014a,但您链接到了当前版本的Matlab R2015a的文档。如果您使用的是旧版本的Matlab,则不应依赖于Google。只需在命令窗口中键入docsolve
,即可阅读您版本的完整文档。存档文档也可以在线获取。我没有登录访问存档文档的权限,因为我使用的是我的学术机构的MATLAB许可证。@StockB:我在大学里也使用学术版本。您可能只需要创建一个MathWorks帐户。在任何情况下,命令窗口中的doc solve
都会起作用。谢谢,我今天学习了doc
命令!我以前知道帮助
,但HTML格式更易于阅读。
syms u v
[sv, su] = solve([2*u^2 + v^2 == 0, u - v == 1], v, u)