python求解超定方程组 python怎么求方程_python求解超定方程组

交互模式

python求解超定方程组 python怎么求方程_方程式_02

1 from scipy.optimize import fsolve
 2 
 3 my_str=input("输入要求解的变量:(如:x OR xy OR xyz)\n")
 4 my_list=list(my_str)
 5 calc_str=input("输入方程式:(乘方用 ** 表示 如 x**2)\n多个方程式之间用英文 , 分隔\n不要用 “=” 用 “+、-”连接左右两边\n")
 6 tmp_str=""
 7 
 8 for j in range(0,my_list.__len__()):
 9     tmp_str=calc_str.replace(my_list[j],r"(i["+str(j)+r"])")
10     calc_str =  tmp_str
11 
12 
13 calc_str_list=calc_str.split(",")
14 
15 
16 
17 def my_func4(i):
18     calc_list = []
19     for x in calc_str_list:
20         calc_list.append(eval(x))
21     return calc_list
22 
23 first_list=[1 for x in my_list]
24 
25 result4=fsolve(my_func4,first_list)
26 
27 print(result4)


python求解超定方程组 python怎么求方程_ci_03

 

 

 

如何用python计算方式程:

 

一、求解一元方程式

如:当前扫雷胜率如下

python求解超定方程组 python怎么求方程_python_04

 

还需要连赢几场 ,胜率能达到 19%

列出的方程式如下:(476+x) / (2590+x) = 0.19

求解x ?

 

解法,引入 包 sympy

#导入包
from sympy import * 

#声明变量,可以一次声明多个,用, 隔开 如:x,y = symbols('x,y')
x = symbols('x')
#写入方式程,并求解x (方程式不用 = 号)
result=solve((476+x)/(2590+x)-0.19,x)
print(result)

得:还要赢20局,基本没有可能短时间完成 ~~

python求解超定方程组 python怎么求方程_方程式_05

 

 

 

注:x (次方)在python中这么表示  x ** 2

二、求解多元方程组

> x + 2y + 3z = 6

> 5x2+6y2+7z2=18

> 9x3+10y3+11z3=30

解法:

from scipy.optimize import fsolve

#引入包

from scipy.optimize import fsolve
#引入包

#自定义方法(解法),入参是一个list

def my_func(i):
    #把i[0],i[1],i[2],分别附值给x,y,z
    x,y,z=i
    return [
            x+2*y+3*z-6,
            5*(x**2)+6*(y**2)+7*(z**2)-18,
            9*(x**3)+10*(y**3)+11*(z**3)-30
            ]     
#[0,0,0]传入 my_func(i)=0 的初始估值
result=fsolve(my_func,[0,0,0])   
print(result)

 

python求解超定方程组 python怎么求方程_python_06

 

 

 

python求解超定方程组 python怎么求方程_方程式_07

 

注:也可以使用第二种多元方程组的方式来解决第一点的问题(一元方程组)

求解:x2+2x=8

 

from scipy.optimize import fsolve
def my_func3(i):
    x=i[0]
    return [
        x**2+2*x-8
    ]
result3=fsolve(my_func3,[0])
print(result3)

python求解超定方程组 python怎么求方程_方程组_08