如何用python计算方程式
交互模式
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)

浙公网安备 33010602011771号