官术网_书友最值得收藏!

第2章
數(shù)學(xué)模塊math和sympy

Python語(yǔ)言的標(biāo)準(zhǔn)數(shù)學(xué)模塊是math,這個(gè)模塊內(nèi)有與數(shù)學(xué)有關(guān)的變量與函數(shù)。此外,本章也將介紹線性代數(shù)與符號(hào)數(shù)學(xué)常用的模塊sympy。

2-1 數(shù)學(xué)模塊的變量

在使用math模塊前,請(qǐng)先導(dǎo)入此模塊。

import math

常用數(shù)學(xué)模塊的變量有:

pi:圓周率。   e:自然對(duì)數(shù)的底。

程序?qū)嵗齝h2_1.py:列出圓周率pi和自然對(duì)數(shù)的底e。

執(zhí)行結(jié)果

2-2 一般函數(shù)

下列是常用的一般函數(shù)。

程序?qū)嵗齝h2_2.py:ceil( )和f l oor( )的應(yīng)用。

執(zhí)行結(jié)果

程序?qū)嵗齝h2_3.py:求最大公約數(shù)gcd( )的應(yīng)用。

執(zhí)行結(jié)果

程序?qū)嵗齝h2_4.py:使用pow( )求xy次方。

執(zhí)行結(jié)果

程序?qū)嵗齝h2_5.py:使用sqrt( )求平方根。

執(zhí)行結(jié)果

2-3 log( )函數(shù)

下列是常用的log( )函數(shù)。

程序?qū)嵗齝h2_6.py:log( )函數(shù)的應(yīng)用。

執(zhí)行結(jié)果

 本書(shū)第16章會(huì)有關(guān)于對(duì)數(shù)更完整的說(shuō)明。

2-4 三角函數(shù)

下列是常用的三角函數(shù)。

除了math模塊,numpy模塊也提供了與上述一樣的模塊,可以執(zhí)行三角函數(shù)的運(yùn)算。不過(guò)使用時(shí),前面要加上模塊名稱(chēng),例如:

 本書(shū)第18章會(huì)有三角函數(shù)更完整的說(shuō)明。

程序?qū)嵗齝h2_7.py:sin( )和cos( )的應(yīng)用,其中xpt數(shù)組元素的單位是弧度。

執(zhí)行結(jié)果

弧度是圓周長(zhǎng)與圓半徑的比,對(duì)于30度或390度轉(zhuǎn)成弧度后輸入三角函數(shù),所獲得的值是一樣的。

第一個(gè)輸出是浮點(diǎn)數(shù),可以視為0.5。

2-5 sympy模塊

sympy模塊常用于解決線性代數(shù)問(wèn)題,也可以用此模塊繪制圖表,本節(jié)將一一說(shuō)明。在使用前請(qǐng)先安裝此模塊。

pip install sympy

2-5-1 定義符號(hào)

一般數(shù)學(xué)運(yùn)算變量使用方式如下:

上述我們定義x = 1,當(dāng)執(zhí)行x + x + 2時(shí),變量x會(huì)代入1,所以可以得到4。使用sympy可以設(shè)計(jì)含變量的表達(dá)式,不過(guò)在使用前必須用Symbol類(lèi)別定義此變量符號(hào),可以參考下列方式:

當(dāng)定義好了以后,我們?cè)賵?zhí)行一次x + x + 2,可以看到不一樣的輸出。

 上述必須先導(dǎo)入Symbol。

經(jīng)過(guò)Symbol類(lèi)別定義后,對(duì)于Python而言x仍是變量,但是此變量?jī)?nèi)容將不是變量,而是符號(hào)。也可以設(shè)定不同名稱(chēng)的變量等于Symbol(‘x’),如下所示:

不過(guò)上述方式會(huì)混淆,所以建議變量名稱(chēng)與Symbol(‘x’)參數(shù)名稱(chēng)相符。

 2-5節(jié)將講述sympy模塊內(nèi)許多方法,可以直接導(dǎo)入所有方法學(xué)習(xí),這樣可以避免錯(cuò)誤,如下所示:

from sympy import *

2-5-2 name屬性

使用Symbol類(lèi)別定義一個(gè)變量名稱(chēng)后,未來(lái)可以使用name屬性了解所定義的符號(hào)。

2-5-3 定義多個(gè)符號(hào)變量

假設(shè)想定義abc 3個(gè)符號(hào)變量,可以使用下列方式:

或使用下列symbols( )方法簡(jiǎn)化程序:

2-5-4 符號(hào)的運(yùn)算

當(dāng)定義符號(hào)后就可以對(duì)其進(jìn)行基本運(yùn)算:

2-5-5 將數(shù)值代入公式

若是想將數(shù)值代入公式,可以使用subs({x:n,…}),subs( )方法的參數(shù)是字典,可以參考下列實(shí)例:

2-5-6 將字符串轉(zhuǎn)為數(shù)學(xué)表達(dá)式

若是想建立通用的數(shù)學(xué)表達(dá)式,可以參考下列實(shí)例:

上述所輸入的x**3 + 2*x**2 + 3*x + 5是字符串,sympify( )方法會(huì)將此字符串轉(zhuǎn)為數(shù)學(xué)表達(dá)式,公式eq經(jīng)過(guò)上述轉(zhuǎn)換后,我們可以針對(duì)此公式進(jìn)行操作。

由于eq已經(jīng)是數(shù)學(xué)表達(dá)式,所以我們可以使用subs( )方法代入此公式做運(yùn)算。

2-5-7 解一元一次方程式

sympy模塊也可以解下列一元一次方程式:

y = ax + b

例如:求解下列公式:

3x + 5 = 8

上述問(wèn)題可以使用solve( )方法求解,在使用sympy模塊時(shí),請(qǐng)先將上述公式轉(zhuǎn)為下列表達(dá)式:

eq = 3x + 5 – 8

可以參考下列實(shí)例與結(jié)果:

上述解一元一次方程式時(shí),所獲得的結(jié)果是以列表(list)方式回傳,下列是延續(xù)上述實(shí)例的結(jié)果。

2-5-8 解一元二次方程式

sympy模塊也可以解下列一元二次方程式:

y = ax2 + bx + c

例如:求解下列公式:

x2 + 5x = 0

上述問(wèn)題可以使用solve( )方法求解,在使用sympy模塊時(shí),請(qǐng)先將上述公式轉(zhuǎn)為下列表達(dá)式:

eq = x2 + 5x

可以參考下列實(shí)例與結(jié)果:

解上述一元二次方程式時(shí),所獲得的結(jié)果是以列表(list)形式回傳,下列是延續(xù)上述實(shí)例的結(jié)果。

其實(shí)解一元更高次方程式時(shí),也可以依上述概念類(lèi)推。

2-5-9 解含未知數(shù)的方程式

sympy模塊也可以解下列含未知數(shù)的一元二次方程式:

ax2 + bx + c = 0

上述問(wèn)題可以使用solve( )方法求解,在使用sympy模塊時(shí),請(qǐng)先定義xabc變量,將上述公式轉(zhuǎn)為下列表達(dá)式:

eq = ax2 + bx + c

可以參考下列實(shí)例與結(jié)果:

上述solve( )須有第2個(gè)參數(shù)x,這是告訴solve( )應(yīng)該解哪一個(gè)符號(hào)。

2-5-10 解聯(lián)立方程式

有一個(gè)聯(lián)立方程式如下:

3x + 2y = 6

9x + y = 3

可以使用下列方式求解。

上述所得到的解是使用字典格式,下列是更進(jìn)一步驗(yàn)證上述數(shù)據(jù)格式的結(jié)果。

下列是使用subs( )方法將解代入方程式驗(yàn)證的結(jié)果。

有時(shí)候在解聯(lián)立方程式時(shí),所獲得的解是以分?jǐn)?shù)表達(dá)方式呈現(xiàn),請(qǐng)參考下列聯(lián)立方程式:

3x + 2y = 10

9x + y = 3

下列是求解的結(jié)果。

在有些場(chǎng)合,上述分?jǐn)?shù)表達(dá)方式-4/15或27/5無(wú)法使用,例如:使用matplotlib繪制坐標(biāo)圖時(shí),無(wú)法使用上述分?jǐn)?shù)格式,這時(shí)可以使用fl oat( )強(qiáng)制將分?jǐn)?shù)轉(zhuǎn)成實(shí)數(shù)表達(dá)式。

2-5-11 繪制坐標(biāo)圖的基礎(chǔ)

使用sympy的數(shù)學(xué)模塊需要導(dǎo)入sympy.plotting的plot模塊,如下所示:

from sympy.plotting import plot

未來(lái)就可以繪圖了,可以參考下列繪制y =2x – 5實(shí)例。

其實(shí)上述繪圖與matplotlib模塊類(lèi)似,這是因?yàn)閟ympy背后是使用matplotlib模塊繪圖,不過(guò)使用sympy繪圖可以省略show( )函數(shù)顯示坐標(biāo)圖。

下列是所繪制的圖形。

2-5-12 設(shè)定繪圖的x軸區(qū)間

使用sympy繪圖,模塊會(huì)自動(dòng)默認(rèn)繪圖區(qū)間,此例x軸是在-10 ~ 10,不過(guò)可以通過(guò)在plot( )內(nèi)增加參數(shù)的方式更改此繪圖區(qū)間,下列是設(shè)定x軸是在-5 ~ 5。

下列是所繪制的圖形。

2-5-13 增加繪圖標(biāo)題與軸標(biāo)題

從上一小節(jié)的執(zhí)行結(jié)果可以看到,默認(rèn)圖表沒(méi)有標(biāo)題,x軸預(yù)設(shè)標(biāo)題是xy軸預(yù)設(shè)標(biāo)題是f(x)。在plot( )內(nèi)可以使用title建立圖表標(biāo)題,使用xlabel建立x坐標(biāo)標(biāo)題,使用ylable建立y坐標(biāo)標(biāo)題。可以為圖表建立下列標(biāo)題:

     title:Sympy
     x軸:x
     y軸:2x-5

下列是所繪制的圖形。

2-5-14 多函數(shù)圖形

坐標(biāo)圖可以有多個(gè)函數(shù),可以參考下列實(shí)例。

下列是所繪制的圖形。

2-5-15 plot( )的show參數(shù)

在plot( )方法內(nèi)可以建立show參數(shù),默認(rèn)是顯示圖形,如果設(shè)定show=False,可以不顯示圖形。

上述程序沒(méi)有顯示圖形。

2-5-16 使用不同顏色繪圖

使用sympy建立圖形,默認(rèn)是使用藍(lán)色,也可以使用其他色彩,下列第2個(gè)方程式是使用紅色。

下列是所繪制的圖形。

2-5-17 圖表增加圖例

在plot( )內(nèi)增加legend=True,可以在圖表內(nèi)增加圖例。

下列是所繪制的圖形。

主站蜘蛛池模板: 大安市| 依安县| 姜堰市| 麦盖提县| 桐城市| 南雄市| 白水县| 台东县| 塔河县| 汉沽区| 清水河县| 正安县| 海兴县| 广东省| 富裕县| 陈巴尔虎旗| 孝感市| 江西省| 溧水县| 靖西县| 嘉义市| 胶南市| 应用必备| 屯门区| 页游| 公主岭市| 四平市| 平潭县| 资溪县| 达尔| 夏邑县| 平果县| 钟山县| 长春市| 托里县| 微山县| 黄梅县| 金门县| 德阳市| 廉江市| 天台县|