符号求解 7 个非线性代数方程组

计算科学 matlab 非线性方程
2021-12-25 16:04:14

我有一个由七个非线性方程组成的系统,我想找到它们的符号解。解决方案将取决于参数 K,我应该通过改变参数来获得不同的解决方案。我希望程序给出 K 的范围以及与每个值相关的解决方案。我尝试使用 matlab 符号工具包解决系统问题。我使用的代码是:

syms K x  y  z  u  v  w  p; 

eq1 =  -2*x - 4*u*v + 4*y*p == 0;

eq2 =  -9*y +3*x*p == 0;

eq3 =  -4*z - 4*sqrt(2)*u*w + 4*sqrt(2)*w*p  + 4*K == 0;

eq4 =  -5*u + x*v + 3*sqrt(2)*z*w == 0;

eq5 =  -v + 3*x*u - sqrt(5)*x*w == 0;

eq6 =  -w + sqrt(5)*x*v + sqrt(2)*z*u - sqrt(2)*z*p == 0;

eq7 =  -5*p - 7*x*y - 3*sqrt(2)*z*w == 0;

[x y z u v w p] = solve(eq1, eq2, eq3, eq4,eq5, eq6, eq7)

我使用 matlab R2015b 运行代码,运行大约 6 个小时后,它要么给出一个空的解决方案,要么停止工作。有什么建议吗?

1个回答

不要使用 Matlab。

Matlab 中的符号工具箱可用于计算简单函数的导数、积分或根,以用于进一步的数值计算,但无法与MapleMagmaSingular等现代计算机代数系统 (CAS) 竞争。因此,如果 Matlab 无法计算解决方案,您应该尝试其中的一种。

如果您只想将解决方案绘制为参数的函数,通常可以在包中完成(但不确定 Magma)。如果您想在进一步(数值)计算中使用结果,您可以使用 Maple 的CodeGeneration模块生成一个 Matlab 函数,该函数评估给定参数的解决方案。您还可以在通用Sage框架中实现所有内容,该框架将(以及许多其他)Singular 与 NumPy、SciPy 和 Matplotlib(它们一起提供与 Matlab 类似的功能)捆绑在一起。

要记住的一件事是,CAS 提供的解决方案很可能是无法用数字表示的数学对象(例如第十个根,正如 Brian Borchers 指出的那样) - 因此绘制,或用于进一步的计算 - 完全正确。因此,您再次受限于数值近似,它可能(!)并不比您计算的更好。(通常是这样,但需要注意。)