Skip to content

作業4:JavaScript 練習 2 #13

Description

@ccckmit
  1. 請寫一個 min(a,b) 函數傳回 a, b 裡較小的那個數字
  2. 請寫一個 arrayMin(a) 函數傳回陣列 a 裡最小的那個數字
  3. 請寫一個 filter(a, f) 函數可以根據 f 成功或失敗過濾掉那些不合的內容
    • 例如 filter([1,2,3,4], function (x) { return x%2 == 1; }) 會傳回 [1,3]
  4. 請寫一個函數 weekday(str) 可以把星期幾的英文轉換成數字(0,1,2,3,4,5,6) (Sunday 是 0)
  5. 請寫一個函數 countChar(str) 可以算出一個字串中,每個字出現幾次。
    • 例如: “aabccadeaac" => { a: 5, b:1, c:3, d:1, e:1}
  6. 寫一個函數 gcd(a,b) 傳回 a, b 兩數字的最大公因數。
  7. 寫一個函數 lcm(a,b) 傳回 a, b 兩數字的最小公倍數。
  8. 請寫一個函數 gradient(f, p) 可以計算 f 在 p 點的梯度
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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions