-
Notifications
You must be signed in to change notification settings - Fork 61
Open
Description
- 請寫一個 min(a,b) 函數傳回 a, b 裡較小的那個數字
- 請寫一個 arrayMin(a) 函數傳回陣列 a 裡最小的那個數字
- 請寫一個 filter(a, f) 函數可以根據 f 成功或失敗過濾掉那些不合的內容
- 例如 filter([1,2,3,4], function (x) { return x%2 == 1; }) 會傳回 [1,3]
- 請寫一個函數 weekday(str) 可以把星期幾的英文轉換成數字(0,1,2,3,4,5,6) (Sunday 是 0)
- 請寫一個函數 countChar(str) 可以算出一個字串中,每個字出現幾次。
- 例如: “aabccadeaac" => { a: 5, b:1, c:3, d:1, e:1}
- 寫一個函數 gcd(a,b) 傳回 a, b 兩數字的最大公因數。
- 寫一個函數 lcm(a,b) 傳回 a, b 兩數字的最小公倍數。
- 請寫一個函數 gradient(f, p) 可以計算 f 在 p 點的梯度
- 參考 Python 程式碼
- 參考 梯度下降法
h = 0.01
# 我們想找函數 f 的最低點
def f(p):
[x,y] = p
return x * x + y * y
# df(f, p, k) 為函數 f 對變數 k 的偏微分: df / dp[k]
# 例如在上述 f 範例中 k=0, df/dx, k=1, df/dy
def df(f, p, k):
p1 = p.copy()
p1[k] += h
return (f(p1) - f(p)) / h
# 函數 f 在點 p 上的梯度
def grad(f, p):
gp = p.copy()
for k in range(len(p)):
gp[k] = df(f, p, k)
return gp
[x,y] = [1,3]
print('x=', x, 'y=', y)
print('df(f(x,y), 0) = ', df(f, [x, y], 0))
print('df(f(x,y), 1) = ', df(f, [x, y], 1))
print('grad(f)=', grad(f, [x,y]))最後一題的解答: gradient.js
延伸解答: 梯度下降法 gd.js
Metadata
Metadata
Assignees
Labels
No labels