1. python高階函數有哪些
1、map
是Python內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回。
2、rece
接收的參數和 map() 類似,一個函數 f,一個 list,但行為和 map() 不同,rece() 傳入的函數 f 兩個參數,rece() 對 list 的每個元素反復調用函數 f,並返回最終結果值。
3、fiilter
也可以稱為過濾函數,它接收一個函數 f 和一個 list,這個函數 f 的作用是對每個元素進行判斷,返回 True 或 False,filter() 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新 list。
2. 如何使用python計算常微分方程
常用形式
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是額外的參數。
用法請參看下面的例子。這是一個洛侖茲曲線的求解,並且用matplotlib繪出空間曲線圖。(來自《python科學計算》)
from scipy.integrate import odeint
import numpy as np
def lorenz(w, t, p, r, b):
# 給出位置矢量w,和三個參數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) # 創建時間點
# 調用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解常微分方程。這個函數一般求解初值問題。
參數:
func : callable(y, t0, ...) 計算y在t0 處的導數。
y0 : 數組 y的初值條件(可以是矢量)
t : 數組 為求出y,這是一個時間點的序列。初值點應該是這個序列的第一個元素。
args : 元組 func的額外參數
Dfun : callable(y, t0, ...) 函數的梯度(Jacobian)。即雅可比多項式。
col_deriv : boolean. True,Dfun定義列向導數(更快),否則Dfun會定義橫排導數
full_output : boolean 可選輸出,如果為True 則返回一個字典,作為第二輸出。
printmessg : boolean 是否列印convergence 消息。
返回: y : array, shape (len(y0), len(t))
數組,包含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)
其他參數,官方網站和文檔都沒有明確說明。相關的資料,暫時也找不到。
3. python的高級特徵及用法介紹
【導讀】Python 是一種美麗的語言,它簡單易用卻非常強大。任何編程語言的高級特徵通常都是通過大量的使用經驗才發現的。比如你在編寫一個復雜的項目,並在
stackoverflow 上尋找某個問題的答案,然後你突然發現了一個非常優雅的解決方案,它使用了你從不知道的 Python
功能,下面就給大家進行python的高級特徵及用法介紹。
1、Map 函數
Map() 是一種內置的 Python
函數,它可以將函數應用於各種數據結構中的元素,如列表或字典。對於這種運算來說,這是一種非常干凈而且可讀的執行方式。
2、Lambda 函數
Lambda 函數是一種比較小的匿名函數——匿名是指它實際上沒有函數名。
Python 函數通常使用 def a_function_name() 樣式來定義,但對於 lambda 函數,我們根本沒為它命名。這是因為 lambda
函數的功能是執行某種簡單的表達式或運算,而無需完全定義函數。
lambda 函數可以使用任意數量的參數,但表達式只能有一個。
3、Generator 函數
Generator 函數是一個類似迭代器的函數,即它也可以用在 for 循環語句中。這大大簡化了你的代碼,而且相比簡單的 for
循環,它節省了很多內存。
4、Filter 函數
filter 內置函數與 map 函數非常相似,它也將函數應用於序列結構(列表、元組、字典)。二者的關鍵區別在於 filter() 將只返回應用函數返回
True 的元素。
5、Itertools 模塊
Python 的 Itertools 模塊是處理迭代器的工具集合。迭代器是一種可以在 for 循環語句(包括列表、元組和字典)中使用的數據類型。
使用 Itertools 模塊中的函數讓你可以執行很多迭代器操作,這些操作通常需要多行函數和復雜的列表理解。
以上就是python的高級特徵及用法介紹,希望對於大家的python學習能有所幫助,想要學習更多的python高級技能,希望大家持續關注!
4. python3的sympy
print(「字元串」),5/2和5//2的結果是不同的5/2為2.5,5//2為2.
python2需要導入from_future_import division執行普通的除法。
1/2和1//2的結果0.5和0.
%號為取模運算。
乘方運算為2**3,-2**3和-(2**3)是等價的。
from sympy import*導入庫
x,y,z=symbols('x y z'),定義變數
init_printing(use_unicode=True)設置列印方式。
python的內部常量有pi,
函數simplify,simplify(sin(x)**2 + cos(x)**2)化簡結果為1,
simplify((x**3 + x**2 - x - 1)/(x**2 + 2*x + 1))化簡結果為x-1。化簡伽馬函數。simplify(gamma(x)/gamma(x - 2))得(x-2)(x-1)。
expand((x + 1)**2)展開多項式。
expand((x + 1)*(x - 2) - (x - 1)*x)
因式分解。factor(x**2*z + 4*x*y*z + 4*y**2*z)得到z*(x + 2*y)**2
from_future_import division
x,y,z,t=symbols('x y z t')定義變數,
k, m, n = symbols('k m n', integer=True)定義三個整數變數。
f, g, h = symbols('f g h', cls=Function)定義的類型為函數。
factor_list(x**2*z + 4*x*y*z + 4*y**2*z)得到一個列表,表示因式的冪,(1, [(z, 1), (x + 2*y, 2)])
expand((cos(x) + sin(x))**2)展開多項式。
expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3,collected_expr = collect(expr, x)將x合並。將x元素按階次整合。
collected_expr.coeff(x, 2)直接取出變數collected_expr的x的二次冪的系數。
cancel()is more efficient thanfactor().
cancel((x**2 + 2*x + 1)/(x**2 + x))
,expr = (x*y**2 - 2*x*y*z + x*z**2 + y**2 - 2*y*z + z**2)/(x**2 - 1),cancel(expr)
expr = (4*x**3 + 21*x**2 + 10*x + 12)/(x**4 + 5*x**3 + 5*x**2 + 4*x),apart(expr)
asin(1)
trigsimp(sin(x)**2 + cos(x)**2)三角函數表達式化簡,
trigsimp(sin(x)**4 - 2*cos(x)**2*sin(x)**2 + cos(x)**4)
trigsimp(sin(x)*tan(x)/sec(x))
trigsimp(cosh(x)**2 + sinh(x)**2)雙曲函數。
三角函數展開,expand_trig(sin(x + y)),acos(x),cos(acos(x)),expand_trig(tan(2*x))
x, y = symbols('x y', positive=True)正數,a, b = symbols('a b', real=True)實數,z, t, c = symbols('z t c')定義變數的方法。
sqrt(x) == x**Rational(1, 2)判斷是否相等。
powsimp(x**a*x**b)冪函數的乘法,不同冪的乘法,必須先定義a和b。powsimp(x**a*y**a)相同冪的乘法。
powsimp(t**c*z**c),注意,powsimp()refuses to do the simplification if it is not valid.
powsimp(t**c*z**c, force=True)這樣的話就可以得到化簡過的式子。聲明強制進行化簡。
(z*t)**2,sqrt(x*y)
第一個展開expand_power_exp(x**(a + b)),expand_power_base((x*y)**a)展開,
expand_power_base((z*t)**c, force=True)強制展開。
powdenest((x**a)**b),powdenest((z**a)**b),powdenest((z**a)**b, force=True)
ln(x),x, y ,z= symbols('x y z', positive=True),n = symbols('n', real=True),
expand_log(log(x*y))展開為log(x) + log(y),但是python3沒有。這是因為需要將x定義為positive。這是必須的,否則不會被展開。expand_log(log(x/y)),expand_log(log(x**n))
As withpowsimp()andpowdenest(),expand_log()has aforceoption that can be used to ignore assumptions。
expand_log(log(z**2), force=True),強制展開。
logcombine(log(x) + log(y)),logcombine(n*log(x)),logcombine(n*log(z), force=True)。
factorial(n)階乘,binomial(n, k)等於c(n,k),gamma(z)伽馬函數。
hyper([1, 2], [3], z),
tan(x).rewrite(sin)得到用正弦表示的正切。factorial(x).rewrite(gamma)用伽馬函數重寫階乘。
expand_func(gamma(x + 3))得到,x*(x + 1)*(x + 2)*gamma(x),
hyperexpand(hyper([1, 1], [2], z)),
combsimp(factorial(n)/factorial(n - 3))化簡,combsimp(binomial(n+1, k+1)/binomial(n, k))化簡。combsimp(gamma(x)*gamma(1 - x))
自定義函數
def list_to_frac(l):
expr = Integer(0)
for i in reversed(l[1:]):
expr += i
expr = 1/expr
return l[0] + expr
list_to_frac([x, y, z])結果為x + 1/z,這個結果是錯誤的。
syms = symbols('a0:5'),定義syms,得到的結果為(a0, a1, a2, a3, a4)。
這樣也可以a0, a1, a2, a3, a4 = syms, 可能是我的操作錯誤 。發現python和自動縮進有關,所以一定看好自動縮進的距離。list_to_frac([1, 2, 3, 4])結果為43/30。
使用cancel可以將生成的分式化簡,frac = cancel(frac)化簡為一個分數線的分式。
(a0*a1*a2*a3*a4 + a0*a1*a2 + a0*a1*a4 + a0*a3*a4 + a0 + a2*a3*a4 + a2 + a4)/(a1*a2*a3*a4 + a1*a2 + a1*a4 + a3*a4 + 1)
a0, a1, a2, a3, a4 = syms定義a0到a4,frac = apart(frac, a0)可將a0提出來。frac=1/(frac-a0)將a0去掉取倒。frac = apart(frac, a1)提出a1。
help("moles"),模塊的含義,help("moles yourstr")模塊中包含的字元串的意思。,
help("topics"),import os.path + help("os.path"),help("list"),help("open")
# -*- coding: UTF-8 -*-聲明之後就可以在ide中使用中文注釋。
定義
l = list(symbols('a0:5'))定義列表得到[a0, a1, a2, a3, a4]
fromsympyimport*
x,y,z=symbols('x y z')
init_printing(use_unicode=True)
diff(cos(x),x)求導。diff(exp(x**2), x),diff(x**4, x, x, x)和diff(x**4, x, 3)等價。
diff(expr, x, y, 2, z, 4)求出表達式的y的2階,z的4階,x的1階導數。和diff(expr, x, y, y, z, 4)等價。expr.diff(x, y, y, z, 4)一步到位。deriv = Derivative(expr, x, y, y, z, 4)求偏導。但是不顯示。之後用deriv.doit()即可顯示
integrate(cos(x), x)積分。定積分integrate(exp(-x), (x, 0, oo))無窮大用2個oo表示。integrate(exp(-x**2-y**2),(x,-oo,oo),(y,-oo,oo))二重積分。print(expr)print的使用。
expr = Integral(log(x)**2, x),expr.doit()積分得到x*log(x)**2 - 2*x*log(x) + 2*x。
integ.doit()和integ = Integral((x**4 + x**2*exp(x) - x**2 - 2*x*exp(x) - 2*x -
exp(x))*exp(x)/((x - 1)**2*(x + 1)**2*(exp(x) + 1)), x)連用。
limit(sin(x)/x,x,0),not-a-number表示nan算不出來,limit(expr, x, oo),,expr = Limit((cos(x) - 1)/x, x, 0),expr.doit()連用。左右極限limit(1/x, x, 0, '+'),limit(1/x, x, 0, '-')。。
Series Expansion級數展開。expr = exp(sin(x)),expr.series(x, 0, 4)得到1 + x + x**2/2 + O(x**4),,x*O(1)得到O(x),,expr.series(x, 0, 4).removeO()將無窮小移除。exp(x-6).series(x,x0=6),,得到
-5 + (x - 6)**2/2 + (x - 6)**3/6 + (x - 6)**4/24 + (x - 6)**5/120 + x + O((x - 6)**6, (x, 6))最高到5階。
f=Function('f')定義函數變數和h=Symbol('h')和d2fdx2=f(x).diff(x,2)求2階,,as_finite_diff(dfdx)函數和as_finite_diff(d2fdx2,[-3*h,-h,2*h]),,x_list=[-3,1,2]和y_list=symbols('a b c')和apply_finite_diff(1,x_list,y_list,0)。
Eq(x, y),,solveset(Eq(x**2, 1), x)解出來x,當二式相等。和solveset(Eq(x**2 - 1, 0), x)等價。solveset(x**2 - 1, x)
solveset(x**2 - x, x)解,solveset(x - x, x, domain=S.Reals)解出來定義域。solveset(exp(x), x) # No solution exists解出EmptySet()表示空集。
等式形式linsolve([x + y + z - 1, x + y + 2*z - 3 ], (x, y, z))和矩陣法linsolve(Matrix(([1, 1, 1, 1], [1, 1, 2, 3])), (x, y, z))得到{(-y - 1, y, 2)}
A*x = b 形式,M=Matrix(((1,1,1,1),(1,1,2,3))),system=A,b=M[:,:-1],M[:,-1],linsolve(system,x,y,z),,solveset(x**3 - 6*x**2 + 9*x, x)解多項式。roots(x**3 - 6*x**2 + 9*x, x),得出,{3: 2, 0: 1},有2個3的重根,1個0根。solve([x*y - 1, x - 2], x, y)解出坐標。
f, g = symbols('f g', cls=Function)函數的定義,解微分方程diffeq = Eq(f(x).diff(x, x) - 2*f(x).diff(x) + f(x), sin(x))再和dsolve(diffeq,f(x))結合。得到Eq(f(x), (C1 + C2*x)*exp(x) + cos(x)/2),dsolve(f(x).diff(x)*(1 - sin(f(x))), f(x))解出來Eq(f(x) + cos(f(x)), C1),,
Matrix([[1,-1],[3,4],[0,2]]),,Matrix([1, 2, 3])列表示。M=Matrix([[1,2,3],[3,2,1]])
N=Matrix([0,1,1])
M*N符合矩陣的乘法。M.shape顯示矩陣的行列數。
M.row(0)獲取M的第0行。M.col(-1)獲取倒數第一列。
M.col_del(0)刪掉第1列。M.row_del(1)刪除第二行,序列是從0開始的。M = M.row_insert(1, Matrix([[0, 4]]))插入第二行,,M = M.col_insert(0, Matrix([1, -2]))插入第一列。
M+N矩陣相加,M*N,3*M,M**2,M**-1,N**-1表示求逆。M.T求轉置。
eye(3)單位。zeros(2, 3),0矩陣,ones(3, 2)全1,diag(1, 2, 3)對角矩陣。diag(-1, ones(2, 2), Matrix([5, 7, 5]))生成Matrix([
[-1, 0, 0, 0],
[ 0, 1, 1, 0],
[ 0, 1, 1, 0],
[ 0, 0, 0, 5],
[ 0, 0, 0, 7],
[ 0, 0, 0, 5]])矩陣。
Matrix([[1, 0, 1], [2, -1, 3], [4, 3, 2]])
一行一行顯示,,M.det()求行列式。M.rref()矩陣化簡。得到結果為Matrix([
[1, 0, 1, 3],
[0, 1, 2/3, 1/3],
[0, 0, 0, 0]]), [0, 1])。
M = Matrix([[1, 2, 3, 0, 0], [4, 10, 0, 0, 1]]),M.nullspace()
Columnspace
M.columnspace()和M = Matrix([[1, 2, 3, 0, 0], [4, 10, 0, 0, 1]])
M = Matrix([[3, -2, 4, -2], [5, 3, -3, -2], [5, -2, 2, -2], [5, -2, -3, 3]])和M.eigenvals()得到{3: 1, -2: 1, 5: 2},,This means thatMhas eigenvalues -2, 3, and 5, and that the eigenvalues -2 and 3 have algebraic multiplicity 1 and that the eigenvalue 5 has algebraic multiplicity 2.
P, D = M.diagonalize(),P得Matrix([
[0, 1, 1, 0],
[1, 1, 1, -1],
[1, 1, 1, 0],
[1, 1, 0, 1]]),,D為Matrix([
[-2, 0, 0, 0],
[ 0, 3, 0, 0],
[ 0, 0, 5, 0],
[ 0, 0, 0, 5]])
P*D*P**-1 == M返回為True。lamda = symbols('lamda')。
lamda = symbols('lamda')定義變數,p = M.charpoly(lamda)和factor(p)
expr = x**2 + x*y,srepr(expr)可以將表達式說明計演算法則,"Add(Pow(Symbol('x'), Integer(2)), Mul(Symbol('x'), Symbol('y')))"。。
x = symbols('x')和x = Symbol('x')是一樣的。srepr(x**2)得到"Pow(Symbol('x'), Integer(2))"。Pow(x, 2)和Mul(x, y)得到x**2。x*y
type(2)得到<class 'int'>,type(sympify(2))得到<class 'sympy.core.numbers.Integer'>..srepr(x*y)得到"Mul(Symbol('x'), Symbol('y'))"。。。
Add(Pow(x, 2), Mul(x, y))得到"Add(Mul(Integer(-1), Pow(Symbol('x'), Integer(2))), Mul(Rational(1, 2), sin(Mul(Symbol('x'), Symbol('y')))), Pow(Symbol('y'), Integer(-1)))"。。Pow函數為冪次。
expr = Add(x, x),expr.func。。Integer(2).func,<class 'sympy.core.numbers.Integer'>,,Integer(0).func和Integer(-1).func,,,expr = 3*y**2*x和expr.func得到<class 'sympy.core.mul.Mul'>,,expr.args將表達式分解為得到(3, x, y**2),,expr.func(*expr.args)合並。expr == expr.func(*expr.args)返回True。expr.args[2]得到y**2,expr.args[1]得到x,expr.args[0]得到3.。
expr.args[2].args得到(y, 2)。。y.args得到空括弧。Integer(2).args得到空括弧。
from sympy import *
E**(I*pi)+1,可以看出,I和E,pi已將在sympy內已定義。
x=Symbol('x'),,expand( E**(I*x) )不能展開,expand(exp(I*x),complex=True)可以展開,得到I*exp(-im(x))*sin(re(x)) + exp(-im(x))*cos(re(x)),,x=Symbol("x",real=True)將x定義為實數。再展開expand(exp(I*x),complex=True)得到。I*sin(x) + cos(x)。。
tmp = series(exp(I*x), x, 0, 10)和pprint(tmp)列印出來可讀性好,print(tmp)可讀性不好。。pprint將公式用更好看的格式列印出來,,pprint( series( cos(x), x, 0, 10) )
integrate(x*sin(x), x),,定積分integrate(x*sin(x), (x, 0, 2*pi))。。
用雙重積分求解球的體積。
x, y, r = symbols('x,y,r')和2 * integrate(sqrt(r*r-x**2), (x, -r, r))計算球的體積。計算不來,是因為sympy不知道r是大於0的。r = symbols('r', positive=True)這樣定義r即可。circle_area=2*integrate(sqrt(r**2-x**2),(x,-r,r))得到。circle_area=circle_area.subs(r,sqrt(r**2-x**2))將r替換。
integrate(circle_area,(x,-r,r))再積分即可。
expression.sub([(x,y),(y,x)])又換到原來的狀況了。
expression.subs(x, y),,將算式中的x替換成y。。
expression.subs({x:y,u:v}) : 使用字典進行多次替換。。
expression.subs([(x,y),(u,v)]) : 使用列表進行多次替換。。
5. python語言中可以調用的函數有哪些
Python語言中有碰鋒很多內置函數和標准庫函數可以直接調用,同時還可以自定義函數和調用其他模塊中的函數。以下是一些常用的Python內置函數和標准庫函數:
6. Python中的常用內置函數有哪些呢
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() rece() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reverse() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set()
delattr() help() next() setattr()
dict() hex() object() slice()
dir() id() oct() sorted()