最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python的SymPy庫解決數(shù)學(xué)運算問題的方法

 更新時間:2019年03月27日 11:58:50   作者:王航臣的博客  
這篇文章主要介紹了使用Python的SymPy庫解決數(shù)學(xué)運算問題的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

摘要:在學(xué)習(xí)與科研中,經(jīng)常會遇到一些數(shù)學(xué)運算問題,使用計算機完成運算具有速度快和準(zhǔn)確性高的優(yōu)勢。Python的Numpy包具有強大的科學(xué)運算功能,且具有其他許多主流科學(xué)計算語言不具備的免費、開源、輕量級和靈活的特點。本文使用Python語言的NumPy庫,解決數(shù)學(xué)運算問題中的線性方程組問題、積分問題、微分問題及矩陣化簡問題,結(jié)果準(zhǔn)確快捷,具有一定的借鑒意義。

1.Sympy庫簡介

SymPy一個用于符號型數(shù)學(xué)計算(symbolic mathematics)的Python庫。它旨在成為一個功能齊全的計算機代數(shù)系統(tǒng)(Computer Algebra System,CAS),同時保持代碼簡潔、易于理解和擴展。SymPy完全是用Python寫的,并不需要外部的庫。

本文選擇Sympy庫的原因在于:

  • 免費:該庫基于BSD開源許可,免費且開源;
  • 基于Python:該庫完全是用Python寫就,并以Python作為該庫操作語言;
  • 輕量級:為了使Sympy簡單易用,該庫僅基于mpmath庫(一個純Python庫,用于浮點運算);
  • 靈活性:除了用作交互工具,還可插入其他應(yīng)用或軟件拓展功能中。

具體說來,如果x與y未曾賦值,那么下列語句就會報錯

#測試語句
print(x+y)

而符號運算則不同,符號運算多用于公式推導(dǎo),不需要賦值,此時使用Sympy進行符號運算便具有方便快捷的優(yōu)勢,如下述語句便不會報錯。

#測試語句
x=Symbol('x')
y=Symbol('y')
print(x+y)

2 SymPy庫解決數(shù)學(xué)運算問題實現(xiàn)

2.1 求解線性方程組

解方程的功能主要是使用Sympy中solve函數(shù)實現(xiàn)。以式(1)為例,求解過程如下:

(1) 符號表示

SymPy庫中使用Symbol函數(shù)定義符號變量,

from sympy import *
x=Symbol('x')
y=Symbol('y')
 
#或者用如下語句
x,y=Symbol('x y')#第二個用空格隔開

(2)方程表示

使用代碼表示數(shù)學(xué)符號與手寫體的數(shù)學(xué)運算符號存在一定的差異,下面列舉常用的運算符:

  • 加號
  • 加號 +
  • 減號 -
  • 除號 /
  • 乘號 *
  • 指數(shù) **
  • 對數(shù) log()
  • e的指數(shù)次冪 exp()

對于長的表達式,如果不確定運算符的優(yōu)先級,可以加入小括號提升其優(yōu)先級。由于需要將表達式都轉(zhuǎn)化成右端等于0,這里把常數(shù)3和7移到等式左邊。題目中表達式可表示為:

2*x-y-3=0
3*x+y-7=0

(3)使用Solve函數(shù)解方程

在使用Solve函數(shù)解方程之前,我們先來看一下Solve函數(shù)的定義。Solve函數(shù)的第一個參數(shù)是要解的方程,要求右端等于0,第二個參數(shù)是未知數(shù)。

對于式(1)的求解,代碼如下:

from sympy import *
x = Symbol('x')
y = Symbol('y')
print(solve([2*x-y-3,3*x+y-7],[x,y]))

2.2 求解微積分問題

2.2.1 求解極限問題

在2.1中通過一個簡單的二元一次方程組求解熟悉了該庫求解數(shù)學(xué)問題的基本過程,下面本文通過示例,講解使用SymPy庫求解微積分的過程。

求解式(2)所示的極限問題,需要用到limit函數(shù)求極限。

(1)符號及方程表示

引入Sympy庫并定義n為符號變量與2.1中一致。

from sympy import *
n = Symbol('n')
s = ((n+3)/(n+2))**n

(2)利用limit函數(shù)求極限

首先我們介紹limit函數(shù)的調(diào)用格式:limit(e, z, z0, dir='+'),e為任意表達式,表示求取e(z)在點z0處的極限,dir='+'表示取右極限,die='-'則表示取左極限。則上式的求解代碼可表示如下:

from sympy import *
n = Symbol('n')
s = ((n+3)/(n+2))**n

print(limit(s,n,oo)) #無窮的表示方法是兩個小寫的字母o

2.2.2 求解定積分

(1)符號表示

from sympy import *
t = Symbol(t)
x = Symbol(x)

(2)方程表示

m = integrate(sin(t)/(pi-t),(t,0,x))
n = integrate(m,(x,0,pi)) 

完整代碼如下:

from sympy import *
t = Symbol(t)
x = Symbol(x)
m = integrate(sin(t)/(pi-t),(t,0,x))
n = integrate(m,(x,0,pi))
print(n)

2.2.3 求解微分問題

如求取的通解

(1)符號表示

這里與之前不同的是增加了函數(shù)的表示(用f(x)表示y),即例題中的y還有微分表示

from sympy import *
f = Function('f')
x = Symbol('x')

y'的表示方法由以下代碼組成

diff(f(x),x)

這里對diff函數(shù)稍作介紹:

上面是求一階導(dǎo)的方法,求解高階導(dǎo)的方法如下所示:

>>> diff(x**3,x)
3*x**2
>>> diff(x**3,x,1)
3*x**2
>>> diff(x**3,x,2)
6*x
>>> diff(x**3,x,3)
6
>>> diff(x**3,x,4)
0

即改變第三個參數(shù)即可。

下面繼續(xù)我們的解題過程。

#左端
diff(f(x),x)
#看一下
print(diff(f(x),x))
 
#result
#d
#--(f(x))
#dx
 
#右端
2*f(x)*x

用dsolve函數(shù)解微分方程

dsolve函數(shù)是用來解決微分方程(differential equation)的函數(shù)。

函數(shù)的一個用法為:

dsolve(eq, f(x))

第一個參數(shù)為微分方程(要先將等式移項為右端為0的形式)。第二個參數(shù)為要解的函數(shù)(在微分方程中)

舉個例子:

>>> from sympy import *
>>> f = Function('f')
>>> x = Symbol('x')
>>> pprint(2*x-diff(f(x),x))
   d
2*x - --(f(x))
   dx
>>> dsolve(2*x - diff(f(x),x), f(x))
#result
#Eq(f(x), C1 + x**2)

這樣,我們可以將我們要解的題目,用以下代碼表示。

dsolve(diff(f(x),x) - 2*f(x)*x, f(x))

結(jié)果為:

Eq(f(x), C1*exp(x**2))
#即f(x) = C1*exp(x**2)

對比答案可以發(fā)現(xiàn)正確。

完整代碼:

from sympy import *
f = function('f')
x = Symbol('x')
print(dsolve(diff(f(x),x)-2*f(x)*x,f(x))

2.2.4 矩陣化簡

平時線性代數(shù)問題中我們會遇到化簡問題,雖然不算難,但著實麻煩。而且,出一點錯就會導(dǎo)致

結(jié)果出錯。不過好運的是SymPy提供了相關(guān)的支持。

例題:

符號表示與矩陣表示

from sympy import *
x1,x2,x3 = symbols('x1 x2 x3')
a11,a12,a13,a22,a23,a33 = symbols('a11 a12 a13 a22 a23 a33')
m = Matrix([[x1,x2,x3]])
n = Matrix([[a11,a12,a13],[a12,a22,a23],[a13,a23,a33]])
v = Matrix([[x1],[x2],[x3]])

注意m的表示,需要有兩個中括號

化簡實現(xiàn)

print(m*n*v)

得到的是:

Matrix([[x1*(a11*x1 + a12*x2 + a13*x3) + x2*(a12*x1 + a22*x2 + a23*x3) + x3*(a13*x1 + a23*x2 + a33*x3)]])

使用

f = m * n * v
print f[0]

可以進一步得到化簡后的式子

也許你要問我要化簡后在計算怎么辦?下面我就舉個例子。

如果上式中x1,x2,x3均等于1,則可這樣代入。

from sympy import *
x1,x2,x3 = symbols('x1 x2 x3')
a11,a12,a13,a22,a23,a33 = symbols('a11 a12 a13 a22 a23 a33')
m = Matrix([[x1, x2, x3]])
n = Matrix([[a11, a12, a13], [a12, a22, a23], [a13, a23, a33]])
v = Matrix([[x1], [x2], [x3]])
f = m * n * v
print f[0].subs({x1:1, x2:1, x3:1})

可得

a11 + 2*a12 + 2*a13 + a22 + 2*a23 + a33

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python使用atexit模塊實現(xiàn)Golang的defer功能

    Python使用atexit模塊實現(xiàn)Golang的defer功能

    這篇文章主要為大家詳細(xì)介紹了Python如何使用atexit模塊實現(xiàn)Golang的defer功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • Django-simple-captcha驗證碼包使用方法詳解

    Django-simple-captcha驗證碼包使用方法詳解

    這篇文章主要介紹了Django-simple-captcha驗證碼包使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • python和websocket構(gòu)建實時日志跟蹤器的步驟

    python和websocket構(gòu)建實時日志跟蹤器的步驟

    這篇文章主要介紹了python和websocket構(gòu)建實時日志跟蹤器的步驟,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • 使用Python的package機制如何簡化utils包設(shè)計詳解

    使用Python的package機制如何簡化utils包設(shè)計詳解

    這篇文章主要給大家介紹了關(guān)于使用Python的package機制如何簡化utils包設(shè)計的相關(guān)資料,文中通過示例代碼的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-12-12
  • 在python image 中實現(xiàn)安裝中文字體

    在python image 中實現(xiàn)安裝中文字體

    這篇文章主要介紹了在python image 中實現(xiàn)安裝中文字體,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 使用pandas生成/讀取csv文件的方法實例

    使用pandas生成/讀取csv文件的方法實例

    在使用Pandas處理數(shù)據(jù)時,常見的讀取數(shù)據(jù)的方式時從Excel或CSV文件中獲取,這篇文章主要給大家介紹了關(guān)于如何使用pandas生成、讀取csv文件的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • PyTorch、torchvision和Python版本的對應(yīng)關(guān)系

    PyTorch、torchvision和Python版本的對應(yīng)關(guān)系

    使用PyTorch時,選擇合適的Python版本是至關(guān)重要的,錯誤的版本組合可能導(dǎo)致各種兼容性問題,本文就來介紹一下PyTorch、torchvision與Python版本匹配,感興趣的可以了解一下
    2024-03-03
  • 使用Python進行同期群分析(Cohort?Analysis)

    使用Python進行同期群分析(Cohort?Analysis)

    同期群(Cohort)的字面意思(有共同特點或舉止類同的)一群人,比如不同性別,不同年齡。這篇文章主要介紹了用Python語言來進行同期群分析,感興趣的同學(xué)可以閱讀參考一下本文
    2023-03-03
  • Python過濾函數(shù)filter()使用自定義函數(shù)過濾序列實例

    Python過濾函數(shù)filter()使用自定義函數(shù)過濾序列實例

    這篇文章主要介紹了Python過濾函數(shù)filter()使用自定義函數(shù)過濾序列實例,配合自定義函數(shù)可以實現(xiàn)許多強大的功能,需要的朋友可以參考下
    2014-08-08
  • Pycharm 使用 Pipenv 新建的虛擬環(huán)境(圖文詳解)

    Pycharm 使用 Pipenv 新建的虛擬環(huán)境(圖文詳解)

    pipenv 是 Pipfile 主要倡導(dǎo)者、requests 作者 Kenneth Reitz 寫的一個命令行工具,主要包含了Pipfile、pip、click、requests和virtualenv。這篇文章主要介紹了Pycharm 使用 Pipenv 新建的虛擬環(huán)境的問題,需要的朋友可以參考下
    2020-04-04

最新評論

雷山县| 太康县| 游戏| 彰化市| 北流市| 彰武县| 方正县| 莆田市| 唐河县| 枣阳市| 陇川县| 丹棱县| 益阳市| 资阳市| 昌邑市| 海伦市| 教育| 神木县| 潮安县| 洪雅县| 梧州市| 绥芬河市| 安丘市| 乌拉特前旗| 化州市| 南宁市| 武邑县| 海淀区| 遂平县| 安阳市| 察哈| 虞城县| 东乡| 龙山县| 班玛县| 浦东新区| 昆明市| 赣榆县| 若尔盖县| 泗洪县| 崇阳县|