方法/步驟
成都創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站建設(shè)、自貢網(wǎng)絡(luò)推廣、小程序開(kāi)發(fā)、自貢網(wǎng)絡(luò)營(yíng)銷(xiāo)、自貢企業(yè)策劃、自貢品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供自貢建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):13518219792,官方網(wǎng)址:www.cdcxhl.com
用Python解數(shù)學(xué)方程,需要用到Python的一個(gè)庫(kù)——SymPy庫(kù)。
SymPy是符號(hào)數(shù)學(xué)的Python庫(kù),它的目標(biāo)是成為一個(gè)全功能的計(jì)算機(jī)代數(shù)系統(tǒng),同時(shí)保持代碼簡(jiǎn)潔、易于理解和擴(kuò)展。
如果你的電腦上還沒(méi)有安裝sympy庫(kù),那就趕緊安裝吧,安裝命令:
pip3 install sympy
請(qǐng)點(diǎn)擊輸入圖片描述
先來(lái)解一個(gè)簡(jiǎn)單點(diǎn)的方程吧。
題目: 5x + 20 = 100
先直接上代碼:
from sympy import *
x = Symbol('x')
print(solve([5*x + 20 - 100], [x]))
請(qǐng)點(diǎn)擊輸入圖片描述
再來(lái)一個(gè)復(fù)雜點(diǎn)的二元一次方程吧。
題目:3x + 4y =49,?8x- y = 14
代碼如下:
from sympy import *
x = Symbol('x')
y = Symbol('y')
print(solve([3*x + 4*y - 49, 8*x - y - 14], [x, y]))
請(qǐng)點(diǎn)擊輸入圖片描述
有沒(méi)有發(fā)現(xiàn)規(guī)律呢,簡(jiǎn)單總結(jié)一下:
1)變量賦值,使用symbol函數(shù)轉(zhuǎn)換;
2)將方程式移到方程的左邊,使右邊等于0;
3)使用solve函數(shù)解方程。
當(dāng)然了,python的基礎(chǔ)語(yǔ)法必須掌握,至少需要掌握python最基礎(chǔ)的算數(shù)運(yùn)算符。
+ ?加 ---- 兩個(gè)對(duì)象相加
- ?減 ----- 得到負(fù)數(shù)或是一個(gè)數(shù)減去另一個(gè)數(shù)
* ?乘 ----- 兩個(gè)數(shù)相乘或是返回一個(gè)被重復(fù)若干次的字符串
/ ?除 ----- x 除以 y
% ?取模 ----- 返回除法的余數(shù)
** ?冪 ----- 返回x的y次冪
log() ?對(duì)數(shù)-----對(duì)數(shù) log()
下面來(lái)個(gè)難度大點(diǎn)的方程。
請(qǐng)點(diǎn)擊輸入圖片描述
代碼如下:
from sympy import *
t = Symbol('t')
x = Symbol('x')
m = integrate(sin(t)/(pi-t), (t, 0, x))
print(integrate(m, (x, 0, pi)))
請(qǐng)點(diǎn)擊輸入圖片描述
scipy中提供了用于解常微分方程的函數(shù)odeint(),完整的調(diào)用形式如下:
scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0,hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0)
實(shí)際使用中,還是主要使用前三個(gè)參數(shù),即微分方程的描寫(xiě)函數(shù)、初值和需要求解函數(shù)值對(duì)應(yīng)的的時(shí)間點(diǎn)。接收數(shù)組形式。這個(gè)函數(shù),要求微分方程必須化為標(biāo)準(zhǔn)形式,即dy/dt=f(y,t,)。
from scipy import odeint
y = odeint(dy/dt=r*y*(1-y/k) ,y(0)=0.1,t)
對(duì)于微分方程全還給老師了,
這個(gè)地址有很多關(guān)于python做科學(xué)計(jì)算的文檔,你可以去查查
import?numpy?as?np
def?solve_quad(a,b,c):
if?a?==?0:
print('您輸入的不是二次方程!')
else:
delta?=?b*b-4*a*c
x?=?-b/(2*a)
if?delta?==?0:
print('方程有惟一解,X=%f'%(x))
return?x
elif?delta??0:
x1?=?x-np.sqrt(delta)/(2*a)
x2?=?x+np.sqrt(delta)/(2*a)
print('方程有兩個(gè)實(shí)根:X1=%f,X2=%f'%(x1,x2))
return?x1,x2
else:
x1?=?(-b+complex(0,1)*np.sqrt((-1)*delta))/(2*a)
x2?=?(-b-complex(0,1)*np.sqrt((-1)*delta))/(2*a)
print('方程有兩個(gè)虛根,如下所示:')
print(x1,x2)
return?x1,x2
import math
def erfenfa(function, a, b): #定義函數(shù),利用二分法求方程的根,function為具體方程,a,b為根的取值范圍
start = a
end = b
if function(a) == 0:?
return a
elif function(b) == 0:
return b
elif function(a) * function(b) 0:?
print("couldn't find root in [a,b]")
return
else:
mid = (start + end) / 2
while abs(start - mid) 0.0000001:?
if function(mid) == 0:
return mid
elif function(mid) * function(start) 0:
end = mid
else:
start = mid
mid = (start + end) / 2
return mid
def f(x):#定義構(gòu)造方程式函數(shù)
return math.pow(x, 5) -15*math.pow(x, 4) +85*math.pow(x, 3)-225*pow(x,2)+274*x - 121
print(round(erfenfa(f, 1.5, 2.4),6))