#coding:utf-8
十載的靜寧網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整靜寧建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“靜寧網(wǎng)站設計”,“靜寧網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
#一階導
def?fun1(X,?WINDOW?=?5):
result?=?[]
for?k?in?range(WINDOW,?len(X)-WINDOW):
mid?=?(X[k+WINDOW]-X[k-WINDOW])/(2*WINDOW)
result.append(mid)
return?result
#二階導
def?fun2(X,?WINDOW?=?5):
result?=?[]
for?k?in?range(WINDOW,?len(X)-WINDOW):
mid?=?(X[k+WINDOW]-2*X[k]+X[k-WINDOW])/(WINDOW*WINDOW)
result.append(mid)
return?result
X?=?[1,2,3,4,5,6,7,8,9,10]
result1?=?fun1(X,?3)
result2?=?fun2(X,?2)
如上自己寫,或者用numpy自帶的多項式的n階導函數(shù)。
得到多項式的n階導函數(shù):多項式.deriv(m = n)
from?numpy?import?*
X?=?[1,2,3,4,5,6,7,8,9,10]
result?=?X.deriv(m?=?n)?#n是導數(shù)階數(shù)
你需要知道在任意點多的一階導數(shù)
也就是已知f'(n)=g(n)
那么f(n)=∫g(n)dn
計算這個積分就可以了
使用sympy.diff求導
from?sympy?import?*init_printing(use_unicode=True)x?=?symbols("x")f?=?log(x)
一階導數(shù)
diff(f,?x)
二階導數(shù)可以傳入第三個參數(shù),表示階數(shù)
diff(f,?x,?2)
希望可以幫助到你。
打開python運行環(huán)境。
導入微分的模塊包:from sympy import *。
定義符號變量:x = symbols('x')
定義一個函數(shù):f = x**9
diff = diff(f,x)求導
最后輸入diff,即可顯示其變量值了。
眾多python培訓視頻,盡在python學習網(wǎng),歡迎在線學習!
常用形式
odeint(func, y0, t,args,Dfun)
一般這種形式就夠用了。
下面是官方的例子,求解的是
D(D(y1))-t*y1=0
為了方便,采取D=d/dt。如果我們令初值
y1(0) = 1.0/3**(2.0/3.0)/gamma(2.0/3.0)
D(y1)(0) = -1.0/3**(1.0/3.0)/gamma(1.0/3.0)
這個微分方程的解y1=airy(t)。
令D(y1)=y0,就有這個常微分方程組。
D(y0)=t*y1
D(y1)=y0
Python求解該微分方程。
from scipy.integrate import odeint
from scipy.special import gamma, airy
y1_0 = 1.0/3**(2.0/3.0)/gamma(2.0/3.0)
y0_0 = -1.0/3**(1.0/3.0)/gamma(1.0/3.0)
y0 = [y0_0, y1_0]
def func(y, t):
... return [t*y[1],y[0]]
def gradient(y,t):
... return [[0,t],[1,0]]
x = arange(0,4.0, 0.01)
t = x
ychk = airy(x)[0]
y = odeint(func, y0, t)
y2 = odeint(func, y0, t, Dfun=gradient)
print ychk[:36:6]
[ 0.355028 0.339511 0.324068 0.308763 0.293658 0.278806]
print y[:36:6,1]
[ 0.355028 0.339511 0.324067 0.308763 0.293658 0.278806]
print y2[:36:6,1]
[ 0.355028 0.339511 0.324067 0.308763 0.293658 0.278806]
得到的解與精確值相比,誤差相當小。
=======================================================================================================
args是額外的參數(shù)。
用法請參看下面的例子。這是一個洛侖茲曲線的求解,并且用matplotlib繪出空間曲線圖。(來自《python科學計算》)
from scipy.integrate import odeint
import numpy as np
def lorenz(w, t, p, r, b):
# 給出位置矢量w,和三個參數(shù)p, r, b 計算出
# dx/dt, dy/dt, dz/dt 的值
x, y, z = w
# 直接與lorenz 的計算公式對應
return np.array([p*(y-x), x*(r-z)-y, x*y-b*z])
t = np.arange(0, 30, 0.01) # 創(chuàng)建時間點
# 調(diào)用ode 對lorenz 進行求解, 用兩個不同的初始值
track1 = odeint(lorenz, (0.0, 1.00, 0.0), t, args=(10.0, 28.0, 3.0))
track2 = odeint(lorenz, (0.0, 1.01, 0.0), t, args=(10.0, 28.0, 3.0))
# 繪圖
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
ax = Axes3D(fig)
ax.plot(track1[:,0], track1[:,1], track1[:,2])
ax.plot(track2[:,0], track2[:,1], track2[:,2])
plt.show()
===========================================================================
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)
計算常微分方程(組)
使用 FORTRAN庫odepack中的lsoda解常微分方程。這個函數(shù)一般求解初值問題。
參數(shù):
func : callable(y, t0, ...) 計算y在t0 處的導數(shù)。
y0 : 數(shù)組 y的初值條件(可以是矢量)
t : 數(shù)組 為求出y,這是一個時間點的序列。初值點應該是這個序列的第一個元素。
args : 元組 func的額外參數(shù)
Dfun : callable(y, t0, ...) 函數(shù)的梯度(Jacobian)。即雅可比多項式。
col_deriv : boolean. True,Dfun定義列向?qū)?shù)(更快),否則Dfun會定義橫排導數(shù)
full_output : boolean 可選輸出,如果為True 則返回一個字典,作為第二輸出。
printmessg : boolean 是否打印convergence 消息。
返回: y : array, shape (len(y0), len(t))
數(shù)組,包含y值,每一個對應于時間序列中的t。初值y0 在第一排。
infodict : 字典,只有full_output == True 時,才會返回。
字典包含額為的輸出信息。
鍵值:
‘hu’ vector of step sizes successfully used for each time step.
‘tcur’ vector with the value of t reached for each time step. (will always be at least as large as the input times).
‘tolsf’ vector of tolerance scale factors, greater than 1.0, computed when a request for too much accuracy was detected.
‘tsw’ value of t at the time of the last method switch (given for each time step)
‘nst’ cumulative number of time steps
‘nfe’ cumulative number of function evaluations for each time step
‘nje’ cumulative number of jacobian evaluations for each time step
‘nqu’ a vector of method orders for each successful step.
‘imxer’index of the component of largest magnitude in the weighted local error vector (e / ewt) on an error return, -1 otherwise.
‘lenrw’ the length of the double work array required.
‘leniw’ the length of integer work array required.
‘mused’a vector of method indicators for each successful time step: 1: adams (nonstiff), 2: bdf (stiff)
其他參數(shù),官方網(wǎng)站和文檔都沒有明確說明。相關的資料,暫時也找不到。
python有個符號計算的庫叫sympy,可以直接用這個庫求導數(shù)然后解導數(shù)=0的方程,參考代碼如下:
from sympy import *
x = symbols('x')
y = (x-3)**2+2*sin(x)-3*x+1
eq = diff(y, x)
solve(eq, x)
本文名稱:python求導數(shù)的函數(shù) Python求導函數(shù)
當前URL:http://m.kartarina.com/article0/hgjooo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設、網(wǎng)站制作、搜索引擎優(yōu)化、全網(wǎng)營銷推廣、定制開發(fā)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)