非线性系统动态大小



尝试为N个点(中心(编写动态求解器。

nsolve返回matrix is numerically singularscipy返回Result from function call is not a proper array of floats

我注意到scipy solver比nsolve更善于找到解决方案。scipy和sympy兼容吗?有没有更好的方法在Python中创建变量(也许通过global(((?

我有一种感觉,scipy无法将症状符号作为变量进行评估

from sympy import *
from scipy.optimize import fsolve
import random
#number of points
centers = 4
#get the right indices for the equations (e.g. Ax, Ay, Bx, By, etc.)
equations = []
for idx, i in enumerate(range(0, (centers-1)*2, 2)):
for y in range(2 + (idx*2), centers*2, 2):
equations.append([i, y, i+1, y+1])
#dynamically create variables using sympy.Symbol
vars_list = []
for i in range(0,centers*2):
vars_list.append(Symbol('x_'+str(i)))
globals()['x_'+str(i)] = None
#random initial solutions
random_inits = [random.random() for _ in range(0,centers*2)]
#Format: (Ax - Bx)**2 + (Ay - By)**2 - 0.2421875**2
equation_list = []
for item in equations:
equation_list.append((vars_list[item[0]] - vars_list[item[1]])**2 + (vars_list[item[2]] - vars_list[item[3]])**2 - random.random())
#dummy
for _ in range(0,2):
equation_list.append((vars_list[item[0]] - vars_list[item[1]])**2 + (vars_list[item[2]] - vars_list[item[3]])**2 - random.random())
#lists lengths match
print (len(equation_list), len(vars_list), len(random_inits))
print(nsolve(equation_list, vars_list, random_inits))
def equations(p):
vars_list = p
return equation_list
print(fsolve(equations, random_inits))

在担心实现细节之前,先看看你的方程:你的最后3个是重复的,用不同常数的符号表示。。。这些将不允许一个解决方案:

>>> for i in equation_list[-3:]:print(i)
(x_4 - x_6)**2 + (x_5 - x_7)**2 - 0.447608387295936
(x_4 - x_6)**2 + (x_5 - x_7)**2 - 0.523866974100479
(x_4 - x_6)**2 + (x_5 - x_7)**2 - 0.915608644817872

你想解决的问题是什么?它看起来像是在每个给定3个点的圆之间寻找交点。

最新更新