- 機(jī)器學(xué)習(xí)數(shù)學(xué)基礎(chǔ)一本通(Python版)
- 洪錦魁
- 2282字
- 2024-12-31 21:57:53
第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( )求x的y次方。

執(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è)想定義a、b、c 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)先定義x、a、b、c變量,將上述公式轉(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)題是x,y軸預(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)增加圖例。

下列是所繪制的圖形。

- Xcode 7 Essentials(Second Edition)
- Learning Elixir
- jQuery從入門(mén)到精通 (軟件開(kāi)發(fā)視頻大講堂)
- GameMaker Programming By Example
- Learning Apache Mahout Classification
- Java EE企業(yè)級(jí)應(yīng)用開(kāi)發(fā)教程(Spring+Spring MVC+MyBatis)
- Kubernetes進(jìn)階實(shí)戰(zhàn)
- 算法設(shè)計(jì)與分析:基于C++編程語(yǔ)言的描述
- 深入解析Java編譯器:源碼剖析與實(shí)例詳解
- MongoDB Cookbook(Second Edition)
- 從零開(kāi)始學(xué)UI:概念解析、實(shí)戰(zhàn)提高、突破規(guī)則
- Getting Started with Electronic Projects
- 數(shù)據(jù)結(jié)構(gòu):Python語(yǔ)言描述
- Hands-On ROS for Robotics Programming
- WCF編程(第2版)