[Python]導數與偏導數(學習心得)

閱讀時間約 6 分鐘

直觀理解

  • 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率
  • 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少)

應用

  • 導數:在物理學中應用廣泛,例如描述速度和加速度
  • 偏導數:多變量分析、優化問題和機器學習中經常出現,用來計算梯度,以便進行模型訓練和參數調整。

程式範例

使用SymPy求導數和偏導數並繪圖

  • 定義符號變數 x 和 y。
  • 定義函數 f = x^2 和 g = x^2 + y^2。
  • 使用 sp.diff 計算導數 f'(x) 和偏導數 ∂g/∂x, ∂g/∂y。
  • 使用 sp.lambdify 將SymPy函數轉換為數值計算函數。

數值計算:

  • 使用 numpy.linspace 生成 x 軸上的數值點。
  • 計算函數和導數在這些點上的值。

繪圖:

  • 使用 matplotlib.pyplot 繪製函數及其導數的圖。
  • 繪製等高線圖表示多變數函數,並使用 quiver 繪製偏導數的向量場。
import sympy as sp
import numpy as np
import matplotlib.pyplot as plt

# 定義變數
x, y = sp.symbols('x y')

# 定義函數
f = x**2
g = x**2 + y**2

# 求導數
f_prime = sp.diff(f, x)

# 求偏導數
g_prime_x = sp.diff(g, x)
g_prime_y = sp.diff(g, y)

# 打印結果
print("f'(x) =", f_prime)
print("∂g/∂x =", g_prime_x)
print("∂g/∂y =", g_prime_y)

# 將SymPy函數轉換為可用於數值計算的函數
# lambdify 將符號表達式轉換為可以用於數值計算的函數
f_num = sp.lambdify(x, f, 'numpy') # 將 f(x) = x^2 轉換為數值函數
f_prime_num = sp.lambdify(x, f_prime, 'numpy') # 將 f'(x) = 2x 轉換為數值函數
g_num = sp.lambdify((x, y), g, 'numpy') # 將 g(x, y) = x^2 + y^2 轉換為數值函數
g_prime_x_num = sp.lambdify((x, y), g_prime_x, 'numpy') # 將 ∂g/∂x = 2x 轉換為數值函數
g_prime_y_num = sp.lambdify((x, y), g_prime_y, 'numpy') # 將 ∂g/∂y = 2y 轉換為數值函數

# 計算範例點的值
x_vals = np.linspace(-10, 10, 100) # 生成從 -10 到 10 的 100 個點
# 計算 f(x) 和 f'(x) 在這些點上的值
y_vals = f_num(x_vals) # 計算 f(x) = x^2 的值
dy_dx_vals = f_prime_num(x_vals) # 計算 f'(x) = 2x 的值

# 計算範例點的偏導數
X_vals, Y_vals = np.meshgrid(x_vals, x_vals) # 生成 x 和 y 的網格點
# 計算 g(x, y) 及其偏導數在這些網格點上的值
Z_vals = g_num(X_vals, Y_vals) # 計算 g(x, y) = x^2 + y^2 的值
dz_dx_vals = g_prime_x_num(X_vals, Y_vals) # 計算 ∂g/∂x = 2x 的值
dz_dy_vals = g_prime_y_num(X_vals, Y_vals) # 計算 ∂g/∂y = 2y 的值

# 繪製單變數函數及其導數
plt.figure(figsize=(12, 6))
plt.plot(x_vals, y_vals, label='f(x) = x^2')
plt.plot(x_vals, dy_dx_vals, label="f'(x)")
plt.xlabel('x')
plt.ylabel('y')
plt.title('f(x) and f\'(x)')
plt.legend()

# 繪製多變數函數及其偏導數
plt.figure(figsize=(12, 6))
plt.contour(X_vals, Y_vals, Z_vals, levels=20)
plt.quiver(X_vals, Y_vals, dz_dx_vals, dz_dy_vals)
plt.xlabel('x')
plt.ylabel('y')
plt.title('g(x, y) = x^2 + y^2 and its partial derivatives')
plt.show()
raw-image

單變數函數及其導數的圖

raw-image
  1. 藍色曲線:這條曲線是一條開口向上的拋物線。當 x 增大時, f(x) 也會快速增大。
  2. 橙色曲線:代表了 f(x) 在每一點的變化率(也就是斜率)。當 x 增大時, f′(x)也隨之增大;當 x減小時, f′(x)也減小。

總結:這張圖表明了f(x) = x^2的變化率如何隨 x 的變化而變化。橙色的直線顯示了每一點的變化率,反映了拋物線的斜率變化。

多變數函數及其偏導數的圖

raw-image

等高線圖: 等高線圖顯示了函數 ( g(x, y) = x^2 + y^2 ) 的等值線。每條等值線表示函數在該線上的值是相同的。這些線的形狀和分佈可以幫助我們了解函數在不同區域的變化情況。

向量場: 向量場圖顯示了函數的偏導數。每個向量的方向和長度表示函數在該點的變化方向和速率。

總結:這張圖表明了 g(x,y)= x^2 + y^2的值如何隨 x和 y 的變化而變化。同心圓顯示了函數值相同的點,而向量場顯示了每一點的變化率方向和大小。


總結

  • 單變數函數圖:顯示了函數 f(x) = x^2和其導數 f′(x)=2x的變化關係。導數曲線展示了每一點的變化率。
  • 多變數函數圖:顯示了函數 g(x,y)=x^2 + y^2 的等高線和偏導數的向量場。等高線展示了函數值的分佈,向量場展示了每一點的變化率方向和大小。

通過這些圖表,我們可以直觀地理解函數在不同點的行為和變化率。

119會員
201內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
運算思維由2006年3月,美國卡內基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)教授因提出並倡導「運算思維」而享譽計算機科學界。 運算思維分成四個步驟 拆解 將一個大問題拆解成許多小問題,各個擊破解決,當小問題解決了大問題也就解決了。 模式識別 將複雜的問題分解
一開始的主題的發想,就是從宜蘭三清宮拜拜完,下山吃臭豆腐的故事開始發起。 宜蘭臭豆腐之旅從宜蘭三清宮開始,一路吃臭豆腐,包括玉里臭豆腐、深坑王老成臭豆腐等,口感各異,最終形成臭豆腐總行程表。描寫豆腐的不同風味及口感。
不用厲害才開始,要開始才很厲害 最近常常看到這句話,覺得很棒,想起那時候,28歲才又去重讀大學時的點點滴滴,那時候在竹科產線做夜班,時常都會聽到有同仁在談論我的消息,內容差不多是,畢業都不知道幾歲了,多來加班賺錢比較實在。
運算思維由2006年3月,美國卡內基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)教授因提出並倡導「運算思維」而享譽計算機科學界。 運算思維分成四個步驟 拆解 將一個大問題拆解成許多小問題,各個擊破解決,當小問題解決了大問題也就解決了。 模式識別 將複雜的問題分解
一開始的主題的發想,就是從宜蘭三清宮拜拜完,下山吃臭豆腐的故事開始發起。 宜蘭臭豆腐之旅從宜蘭三清宮開始,一路吃臭豆腐,包括玉里臭豆腐、深坑王老成臭豆腐等,口感各異,最終形成臭豆腐總行程表。描寫豆腐的不同風味及口感。
不用厲害才開始,要開始才很厲害 最近常常看到這句話,覺得很棒,想起那時候,28歲才又去重讀大學時的點點滴滴,那時候在竹科產線做夜班,時常都會聽到有同仁在談論我的消息,內容差不多是,畢業都不知道幾歲了,多來加班賺錢比較實在。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
古有四大名著,現今Python四大容器🤣 哪四個?list串列,tuple元組,dict字典,set集合。 那這四個怎麼分? 一起來看看吧! (以下有手寫與上機實際測試請付費觀看) 以上我精心整理主要會使用到的功能 當然python功能太多了,肯定不只。 實際操作: 大概就這樣?(
Thumbnail
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
物件導向(OOP),不僅提供了更結構化的程式碼組織方式,還有助於提高程式碼的可讀性、可重用性和可維護性。本文將介紹物件導向概念中的類別、對象、繼承、封裝和多型,並透過具體範例來展示這些概念如何在實際編程中應用。
Thumbnail
我們在使用Python語言進行軟體開發時, 常常會需要dict這個資料結構來儲存複雜結構的資料, 就如同JSON一般, 我們會具有這樣的Key/Value模式組成的資料結構, 如下圖: 而當我們在Python的世界裡, 除了嚴謹規範資料欄位的@dataclass之外, 更常使用的就是「di
Thumbnail
「繼承」顧名思義就是有一個或多個類別延續了某個類別的特性,就如同在人類社會裡,兒女接收了父母的財產、承襲了上代的技能、延續了前一輩的事業。在Python的語言裡,能夠繼承的特性為類別的屬性與方法,繼承的類別稱為子類別(child class / subclass)或衍伸類別(derived clas
Thumbnail
在類別一節中,我們可以用Student類別的實體來存取類別中的name變數、score字典、以及其中的所有方法,這些可以被類別以外的程式碼所直接存取的屬性稱為公有屬性(public attribute)、可以被類別以外的程式碼所直接呼叫的方法稱為公有方法(public method)。
Thumbnail
到目前為止,我們所學習的都是程序性的程式設計(procedural programming),也就是程式碼是透過一連串的指令組成的程序或函數,由上而下依序執行不同的程序或是呼叫函數來完成程式的功能。 Python其實是一種物件導向的程式(object oriented programming, 簡稱
Thumbnail
物件導向的概念,以python程式為範例。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
古有四大名著,現今Python四大容器🤣 哪四個?list串列,tuple元組,dict字典,set集合。 那這四個怎麼分? 一起來看看吧! (以下有手寫與上機實際測試請付費觀看) 以上我精心整理主要會使用到的功能 當然python功能太多了,肯定不只。 實際操作: 大概就這樣?(
Thumbnail
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
物件導向(OOP),不僅提供了更結構化的程式碼組織方式,還有助於提高程式碼的可讀性、可重用性和可維護性。本文將介紹物件導向概念中的類別、對象、繼承、封裝和多型,並透過具體範例來展示這些概念如何在實際編程中應用。
Thumbnail
我們在使用Python語言進行軟體開發時, 常常會需要dict這個資料結構來儲存複雜結構的資料, 就如同JSON一般, 我們會具有這樣的Key/Value模式組成的資料結構, 如下圖: 而當我們在Python的世界裡, 除了嚴謹規範資料欄位的@dataclass之外, 更常使用的就是「di
Thumbnail
「繼承」顧名思義就是有一個或多個類別延續了某個類別的特性,就如同在人類社會裡,兒女接收了父母的財產、承襲了上代的技能、延續了前一輩的事業。在Python的語言裡,能夠繼承的特性為類別的屬性與方法,繼承的類別稱為子類別(child class / subclass)或衍伸類別(derived clas
Thumbnail
在類別一節中,我們可以用Student類別的實體來存取類別中的name變數、score字典、以及其中的所有方法,這些可以被類別以外的程式碼所直接存取的屬性稱為公有屬性(public attribute)、可以被類別以外的程式碼所直接呼叫的方法稱為公有方法(public method)。
Thumbnail
到目前為止,我們所學習的都是程序性的程式設計(procedural programming),也就是程式碼是透過一連串的指令組成的程序或函數,由上而下依序執行不同的程序或是呼叫函數來完成程式的功能。 Python其實是一種物件導向的程式(object oriented programming, 簡稱
Thumbnail
物件導向的概念,以python程式為範例。