Skip to content

作業4:JavaScript 練習 2 #13

@ccckmit

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions