我想解下面的非线性方程组。有没有可能把所有变量都大于或等于零,所有参数都是正的条件?变量是(x1,x2,x3,x4,y1,y2),其他只是参数。你知道吗
枫叶比辛皮更能解决这个问题吗?你知道吗
from sympy.interactive import printing
printing.init_printing(use_latex=True)
from sympy import *
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
x1, x2, x3, x4, y1, y2 = sp.symbols('x1, x2, x3, x4, y1, y2')
N, c1, c2, c3, c4 = sp.symbols('N, c1, c2, c3, c4')
r1, r2, r3, r4 = sp.symbols('r1, r2, r3, r4')
f11, f21, f31, f41 = sp.symbols('f11, f21, f31, f41')
f12, f22, f32, f42 = sp.symbols('f12, f22, f32, f42')
eta11, eta12, eta13, eta14 = sp.symbols('eta11, eta12, eta13, eta14')
eta21, eta22, eta23, eta24 = sp.symbols('eta21, eta22, eta23, eta24')
eta31, eta32, eta33, eta34 = sp.symbols('eta31, eta32, eta33, eta34')
eta41, eta42, eta43, eta44 = sp.symbols('eta41, eta42, eta43, eta44')
epsilon1, epsilon2, K11, K22 = sp.symbols('epsilon1, epsilon2, K11, K22')
omega1, omega2, gamma12, g12 = sp.symbols('omega1, omega2, gamma12, g12')
beta11, beta21, beta31, beta41 = sp.symbols('beta11, beta21, beta31, beta41')
beta12, beta22, beta32, beta42 = sp.symbols('beta12, beta22, beta32, beta42')
F2 = x1 * (r1 * (1 - (eta11 * x1 + eta12 * x2 + eta13 * x3 + eta14 * x4) / N) - \
f11 * y1 - f12 * y2)
F3 = x2 * (r2 * (1 - (eta21 * x1 + eta22 * x2 + eta23 * x3 + eta24 * x4) / N) - \
f21 * y1 - f22 * y2)
F4 = x3 * (r3 * (1 - (eta31 * x1 + eta32 * x2 + eta33 * x3 + eta34 * x4) / N) - \
f31 * y1 - f32 * y2)
F5 = x4 * (r4 * (1 - (eta41 * x1 + eta42 * x2 + eta43 * x3 + eta44 * x4) / N) - \
f41 * y1 - f42 * y2)
F6 = y1 * (-epsilon1 * (1 + (y1 + omega2 * y2) / K22) - g12 * y2 + beta11 * f11 * x1 + \
beta21 * f21 * x2 + beta31 * f31 * x3 + beta41 * f41 * x4)
F7 = y2 * (-epsilon2 * (1 + (omega1 * y1 + y2) / K11) +gamma12 * g12 * y1 + \
beta12 * f12 * x1 + beta22 * f22 * x2 + beta32 * f32 * x3 + beta42 * f42 * x4)
equ = (F2, F3, F4, F5, F6, F7)
sol = nonlinsolve(equ, x1, x2, x3, x4, y1, y2)
print(sol)
这是一个多项式系统,我们可以用
SymPy将尝试使用Groebner基来解决这一问题,但需要很长时间来计算:
我希望即使它完成了,结果也不会接受解析解,因为解很可能会得到大于4阶的多项式。你知道吗
如果你用具体的有理数替换所有的参数,那么就有可能找到一个解决方案,但是在任意符号(
r3
等)方面,我并不期望一个封闭形式的解决方案会存在-如果这是真的,那么不管你是使用Maple还是SymPy或其他任何东西。你知道吗编辑:我现在知道你的系统是什么了。每个方程的形式都是
x1 * (a*x1 + b*x2 + ...)
,所以它是一个线性方程乘以一个未知数。这意味着有两种可能性:x1 = 0
或者满足线性方程。一个解决方案是x1 = x2 = ... = 0
,另一个解决方案是没有一个是零。对于6个未知数,除了一些可能不满足非负性假设外,还有64个可能的解。你可以找到他们所有的这就产生了:
空解
[]
对应于已知不满足非负性要求的情况。你知道吗可以为符号添加假设。关于哪些解算器遵守这些假设,文档让我有点困惑,但是从the docs看来
nonlinsolve
确实遵守这些假设:相关问题 更多 >
编程相关推荐