使用 Sympy: TypeError: '>=' 在 'NoneType' 和 'int' 的实例之间不受支持

如何解决使用 Sympy: TypeError: '>=' 在 'NoneType' 和 'int' 的实例之间不受支持

所以,我有以下代码

from sympy import Symbol,solve,nsolve

x1 = Symbol('x1')
x2 = Symbol('x2')
w1 = Symbol('w1')
w2 = Symbol('w2')

eq1 = w1 + w2
eq2 = (w1 * x1) + (w2 * x2)
eq3 = (w1 * x1**2) + (w2 * x2**2)
eq4 = (w1 * x1**3) + (w2 * x2**3)

print(nsolve((eq1,eq2,eq3,eq4),(x1,x2,w1,w2),(2,2/3,0)))

对于这个问题:

enter image description here

这是给我的回应:

 x = findroot(f,x0,J=J,**kwargs)
  File "C:\Users\Sabri\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\mpmath\calculus\optimization.py",line 969,in findroot
    for x,error in iterations:
  File "C:\Users\Sabri\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\mpmath\calculus\optimization.py",line 660,in __iter__
    s = self.ctx.lu_solve(Jx,fxn)
  File "C:\Users\Sabri\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\mpmath\matrices\linalg.py",line 226,in lu_solve
    A,p = ctx.LU_decomp(A)
  File "C:\Users\Sabri\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\mpmath\matrices\linalg.py",line 142,in LU_decomp
    ctx.swap_row(A,j,p[j])
  File "C:\Users\Sabri\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\mpmath\matrices\matrices.py",line 876,in swap_row
    A[i,k],A[j,k] = A[j,A[i,k]
  File "C:\Users\Sabri\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\mpmath\matrices\matrices.py",line 490,in __getitem__
    if key[0] >= self.__rows or key[1] >= self.__cols:
TypeError: '>=' not supported between instances of 'nonetype' and 'int'

遵循此处的文档:

https://docs.sympy.org/latest/modules/solvers/solvers.html

不太清楚是什么导致了问题,除了其中一个变量可能是 None。在 Google 上,明确显示了许多具有类似错误的问题,但此处并非如此。有什么建议吗?

编辑:我得到这个答案:

enter image description here

使用此代码

from scipy.optimize import fsolve


def func(p):
    x1,w2 = p
    return (w1 + w2,(w1 * x1) + (w2 * x2),(w1 * x1**2) + (w2 * x2**2),(w1 * x1**3) + (w2 * x2**3))

x1,w2 = fsolve(func,0))

print(x1,w2)

所以代码应该返回一个结果,但我不确定为什么它不适用于 Sympy。谢谢!

解决方法

SymPy 能够求解非线性方程组,因此如果您不想猜测,可以这样做:

>>> from sympy import Rational,nonlinsolve
>>> eq1 = w1 + w2 - 2
>>> eq2 = (w1 * x1) + (w2 * x2) - 0
>>> eq3 = (w1 * x1**2) + (w2 * x2**2) - Rational(2,3)  # 2/3 gives float 0.66..
>>> eq4 = (w1 * x1**3) + (w2 * x2**3) - 0

>>> nonlinsolve((eq1,eq2,eq3,eq4),(x1,x2,w1,w2))
FiniteSet((-sqrt(3)/3,sqrt(3)/3,1,1),(sqrt(3)/3,-sqrt(3)/3,1))

所以这给出了两个解决方案。

,
  1. 当使用 nsolve() 时,RHS 全为零。 RHS 上的非零项移动 (2,2/3,0) 到 LHS。
  2. nsolve() 的第三个参数是接近解的初始猜测。
    有根据的猜测是在区间 (x1,w2) = (-1,1) 中具有相等权重的 [-1,1]
    我尝试了其他一些猜测。其中一些导致了同样的错误。

输出:

w1 + w2 - 2
w1*x1 + w2*x2
w1*x1**2 + w2*x2**2 - 0.666666666666667
w1*x1**3 + w2*x2**3
Matrix([[-0.577350269189626],[0.577350269189626],[1.00000000000000],[1.00000000000000]])

结果与维基百科 table 上的 n=2 案例一致。

代码:

from sympy import Symbol,solve,nsolve

x1 = Symbol('x1')
x2 = Symbol('x2')
w1 = Symbol('w1')
w2 = Symbol('w2')

eq1 = w1 + w2 - 2
eq2 = (w1 * x1) + (w2 * x2) - 0
eq3 = (w1 * x1**2) + (w2 * x2**2) - 2 / 3
eq4 = (w1 * x1**3) + (w2 * x2**3) - 0

print(eq1,eq4,sep='\n')
print(nsolve((eq1,w2),(-1,0.5,0.5)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?