導航:首頁 > 編程語言 > pythonsympydiff

pythonsympydiff

發布時間:2022-09-10 19:08:29

1. 如何用python求導數

打開python運行環境。
導入微分的模塊包:from sympy import *。
定義符號變數:x = symbols('x')
定義一個函數:f = x**9
diff = diff(f,x)求導
最後輸入diff,即可顯示其變數值了。
眾多python培訓視頻,盡在python學習網,歡迎在線學習!

2. python sympy 求表達式的值

Sympy是python中非常強大的符號運算庫,可以以書寫習慣表示數學表達式。下面介紹用Sympy求方程數值解的方法。
下面代碼全部在
from sympy import *
init_printing(use_unicode=True) # 按書寫習慣輸出

下運行。
數學表達式的輸入
首先聲明符號:
x = symbols('x')

即計算機中的變數x代表數學表達式中的x。在後文輸出中所有的x會顯示為x。如果x=symbols('x0'),則輸入的方程中所有x將在輸出中以x0表示。
如果需要希臘字母
l, r = symbol('lambda rho')

l, r將分別以λ,ρ表示。可以在一個表達式中同時聲明多個符號。
或者使用var()聲明:
var('x')

與上面等效。
聲明表達式:
f = (5/x)*(exp(x)-1)-exp(x)

此時若輸出f可以看到書寫習慣的表達式。由於表達式在markdown下顯示不正常,在此不放置示例。注意f的類型是class 'sympy.core.add.Add'
求f(x)=0數值解
因為有的函數零點不止一個,因此在Sympy中解的輸出為一個list。使用solve(表達式,自變數符號)可以解析地解方程:
s, = solve(f, x)

這里根據上面f的賦值,得到s為
LambertW(-5e**-5)+5

其中用了特殊函數表達。
我們需要求這個結果的數值近似,則輸出
s.evalf()

得到輸出
4.96511423174428

就是方程f(x)=0的數值解。

求給定自變數x值時函數f(x)的值 | 將表達式轉化為函數
f.evalf(subs = {x:4.96})

得到f(4.96)的數值
0.141885450782171

如果需要以計算機函數的形式定義函數f(x),則可以使用lambdify()進行轉化:
f_func = lambdify(x, f)

之後可以調用
f_func(4.96)

輸出
0.141885450782

利用這個方法可以測試方程的數值演算法,如使用sympy介面寫牛頓法等。

3. 用python求解函數的極值,求實現代碼

python有個符號計算的庫叫sympy,可以直接用這個庫求導數然後解導數=0的方程,參考代碼如下:
from sympy import *

x = symbols('x')
y = (x-3)**2+2*sin(x)-3*x+1
eq = diff(y, x)
solve(eq, x)

4. python sympy怎樣把狄克拉函數定義出來

from sympy import DiracDelta

即導入了狄拉克函數,可以送入一個變數求解,如:

DiracDelta(2)

輸出0。

5. python安裝sympy模塊

摘要 第一步,點擊鍵盤 win+r,打開運行窗口.

6. Python用sympy解一元三次方程得到這樣的三組解,求教是什麼意思

I就是虛數i,sympy默認給的解都是復數解。
比如
solve(y**4-1,y)
一般人來計算只會給 1 和 -1
但是sympy 會從整個復數域求解,結果如下:
[-1, 1, -I, I]

7. 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)]) : 使用列表進行多次替換。。

8. 使用python的sympy解符號方程組後,如何將結果帶入之後的符號表達式

Sympy是python中非常強大的符號運算庫,可以以書寫習慣表示數學表達式。下面介紹用Sympy求方程數值解的方法。
下面代碼全部在
from sympy import *
init_printing(use_unicode=True) # 按書寫習慣輸出

下運行。
數學表達式的輸入
首先聲明符號:
x = symbols('x')

即計算機中的變數x代表數學表達式中的x。在後文輸出中所有的x會顯示為x。如果x=symbols('x0'),則輸入的方程中所有x將在輸出中以x0表示。
如果需要希臘字母
l, r = symbol('lambda rho')

l, r將分別以λ,ρ表示。可以在一個表達式中同時聲明多個符號。
或者使用var()聲明:
var('x')

與上面等效。
聲明表達式:
f = (5/x)*(exp(x)-1)-exp(x)

此時若輸出f可以看到書寫習慣的表達式。由於表達式在markdown下顯示不正常,在此不放置示例。注意f的類型是class 'sympy.core.add.Add'
求f(x)=0數值解
因為有的函數零點不止一個,因此在Sympy中解的輸出為一個list。使用solve(表達式,自變數符號)可以解析地解方程:
s, = solve(f, x)

這里根據上面f的賦值,得到s為
LambertW(-5e**-5)+5

其中用了特殊函數表達。
我們需要求這個結果的數值近似,則輸出
s.evalf()

得到輸出
4.96511423174428

就是方程f(x)=0的數值解。

求給定自變數x值時函數f(x)的值 | 將表達式轉化為函數
f.evalf(subs = {x:4.96})

得到f(4.96)的數值
0.141885450782171

如果需要以計算機函數的形式定義函數f(x),則可以使用lambdify()進行轉化:
f_func = lambdify(x, f)

之後可以調用
f_func(4.96)

輸出
0.141885450782

利用這個方法可以測試方程的數值演算法,如使用sympy介面寫牛頓法等。

9. python3怎麼安裝sympy和matplotlib模塊

安裝Python包,pip最為方便了,簡單快捷,因為它直接是從pypi上面下載文件,保證文件的安全性和可靠性,並且資源豐富;下面是安裝步驟:
下載 setuptools,注意對應 Python 的版本,完成後運行 exe 即可完成安裝
setuptools-1.4.1.win32-py3.exe
下載 pip
pip-1.4.1.tar.gz
安裝 pip
3.1 解壓pip-1.4.1.tar.gz
3.2 運行CMD,進入命令
3.3 用CD命令進入 pip 解壓目錄
3.4 輸入 "python setup.py install"
3.5 添加環境變數 path = C:\Python3\ArcGIS10.0\Scripts
驗證是否安裝成功,運行CMD,進入命令行,輸入pip;
如果出現pip的用法介紹,說明安裝成功。
進入命令行,輸入 "pip install package",package為安裝包名稱;

安裝sympy:

安裝matplotlib:

閱讀全文

與pythonsympydiff相關的資料

熱點內容
華為交換機dhcp配置命令 瀏覽:315
androidbitmap縮小 瀏覽:271
單片機串口控制燈 瀏覽:84
大訊雲伺服器安裝視頻 瀏覽:784
華為演算法領先世界 瀏覽:654
linux路由重啟 瀏覽:566
php的模板編程 瀏覽:320
編譯器原理與實現書 瀏覽:709
dos選擇命令 瀏覽:17
apm固件編譯到單片機 瀏覽:121
聯通深藍卡都包含什麼app 瀏覽:264
如何判斷網路伺服器正常 瀏覽:651
路由器搭橋遠端伺服器地址是什麼 瀏覽:518
編譯動態庫時會連接依賴庫嗎 瀏覽:709
淘寶手機加密是隨機的嗎 瀏覽:675
解壓包子怎麼裝飾 瀏覽:587
四個數湊24演算法 瀏覽:679
哪一種不是vi編譯器的模式 瀏覽:172
xp在此處打開命令窗口 瀏覽:130
代碼編譯運行用什麼軟體 瀏覽:1000