Re: [問題] 自定義函數偏微分後再定義函數失效
※ 引述《pig030 (FEBUR.PHEIX)》之銘言:
: 各位大大好,小弟經常要手動寫一些偏微分方程線性化的問題。
: 以下是小弟的一個簡單的範例:
: TC[q_, K_] := (1/3) q^3 - 4 q^2 + (28 - 2 K) q + 0.5 K^2
: 自定義一個TC的函數,引入變數為q及K
: AC[q_,K_]:= D[TC[q, K], q]
: 自定義上面的函數,對q作偏微分後,形成一個新的自定義函數
: 結果小弟執行 AC[2,2] 時卻失敗了。無法執行出結果,錯誤訊息如下:
: SetDelayed::write: Tag Plus in (28-2 K-8 q+q^2)[q_,K_] is Protected.
: 不好意思,因為這問題卡了小弟很多年,小弟學這軟体是土法練鋼,完全自學
: 所以並不清楚真正的原因。拜請大大告訴小弟。
從你的錯誤訊息看起來
你應該在輸入這個 AC 定義之前有先做過
AC = D[TC[q, K], q]
這一行 (不是你要的) 指令, 所以 AC 的值被指定成了一個運算式
因此你後續在設定函數時就會失敗
這問題只要先行先把 AC 內容清掉即可, 指令是 Clear[AC]
====
如果不確定一個變數的定義內容的話
可以用 ? 指令叫出目前它的定義
也就是例如你如果先輸入 ? AC 的話就會看到它不是定義成函數了
====
不過如果照你上面這樣定義的話會有另一個問題
:= 右邊的式子會保留輸入時的原狀, 然後等變數代進去之後才會算值
所以如果真的寫成
AC[q_, K_] := D[TC[q, K], q]
這樣的話, 右邊的 D 不會先求完才變成函數定義, 而是保留原樣
所以當代值進去時, 參數會代進 D 的式子裡的所有變數
例如 AC[2, 2] 就會變成 D[TC[2, 2], 2] 然後就噴錯誤說 2 不是變數了
那原因既然是式子沒有先算, 那我們只要強制它算就好
方法就是在右邊包上 Evaluate[]
也就是寫成 AC[q_, K_] := Evaluate[D[TC[q, K], q]]
這樣右邊的 D 就會先算出來才會設定成函數給你求值
(同樣這可以用 ? AC 驗證, 可以看到這時的定義就是 D 已經算完的結果了)
https://i.imgur.com/Ffe4k3J.png
--
'Oh, Harry, don't you see?' Hermione breathed. 'If she could have done
one thing to make absolutely sure that every single person in this school
will read your interview, it was banning it!'
---'Harry Potter and the order of the phoenix', P513
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.0.237 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Mathematica/M.1615807868.A.610.html
推
03/15 21:59,
3年前
, 1F
03/15 21:59, 1F
→
03/15 22:00,
3年前
, 2F
03/15 22:00, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章