[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 的等高線和偏導數的向量場。等高線展示了函數值的分佈,向量場展示了每一點的變化率方向和大小。

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

avatar-img
128會員
217內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
運算思維由2006年3月,美國卡內基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)教授因提出並倡導「運算思維」而享譽計算機科學界。 運算思維分成四個步驟 拆解 將一個大問題拆解成許多小問題,各個擊破解決,當小問題解決了大問題也就解決了。 模式識別 將複雜的問題分解
一開始的主題的發想,就是從宜蘭三清宮拜拜完,下山吃臭豆腐的故事開始發起。 宜蘭臭豆腐之旅從宜蘭三清宮開始,一路吃臭豆腐,包括玉里臭豆腐、深坑王老成臭豆腐等,口感各異,最終形成臭豆腐總行程表。描寫豆腐的不同風味及口感。
不用厲害才開始,要開始才很厲害 最近常常看到這句話,覺得很棒,想起那時候,28歲才又去重讀大學時的點點滴滴,那時候在竹科產線做夜班,時常都會聽到有同仁在談論我的消息,內容差不多是,畢業都不知道幾歲了,多來加班賺錢比較實在。
運算思維由2006年3月,美國卡內基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)教授因提出並倡導「運算思維」而享譽計算機科學界。 運算思維分成四個步驟 拆解 將一個大問題拆解成許多小問題,各個擊破解決,當小問題解決了大問題也就解決了。 模式識別 將複雜的問題分解
一開始的主題的發想,就是從宜蘭三清宮拜拜完,下山吃臭豆腐的故事開始發起。 宜蘭臭豆腐之旅從宜蘭三清宮開始,一路吃臭豆腐,包括玉里臭豆腐、深坑王老成臭豆腐等,口感各異,最終形成臭豆腐總行程表。描寫豆腐的不同風味及口感。
不用厲害才開始,要開始才很厲害 最近常常看到這句話,覺得很棒,想起那時候,28歲才又去重讀大學時的點點滴滴,那時候在竹科產線做夜班,時常都會聽到有同仁在談論我的消息,內容差不多是,畢業都不知道幾歲了,多來加班賺錢比較實在。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
介紹如何在模擬物體運動時,引入加速度這個物理量。
Thumbnail
介紹pygame支援的向量運算,以及向量的減法、乘法、除法實際上是怎麼計算的。
Thumbnail
這一節談的是向量的定義,以及如何運用向量來建立模擬物體運動時,關於位置和速度間的關係式。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
在求學階段,你已經對代數的計算熟到不能再熟,所以變數(variable)對你來說應該不至於太陌生,先來看看以下這個例子:   
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
介紹以物件導向的方式,以向量來實作物體運動的模擬程式。
介紹如何在模擬物體運動時,引入加速度這個物理量。
Thumbnail
介紹pygame支援的向量運算,以及向量的減法、乘法、除法實際上是怎麼計算的。
Thumbnail
這一節談的是向量的定義,以及如何運用向量來建立模擬物體運動時,關於位置和速度間的關係式。
Thumbnail
本文介紹了各種運算符的用法和優先級,包括算術運算符、比較運算符、賦值運算符、邏輯運算符、位元運算符、成員運算符和身份運算符。每種運算符都有詳細的描述和示例程式碼,幫助理解其功能和用法。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
在求學階段,你已經對代數的計算熟到不能再熟,所以變數(variable)對你來說應該不至於太陌生,先來看看以下這個例子: