交互模式
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计算方式程:
一、求解一元方程式
如:当前扫雷胜率如下
还需要连赢几场 ,胜率能达到 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局,基本没有可能短时间完成 ~~
注:x2 (次方)在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)
注:也可以使用第二种多元方程组的方式来解决第一点的问题(一元方程组)
求解: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)