2010年7月24日 星期六

[自動轉寄] Re: [問題] mathematica 的block用法和三個問題

作者: Passions (passion)
標題: Re: [問題] mathematica 的block用法和三個問題
時間: Sat Jul 24 15:24:23 2010

※ 引述《chungyuandye (養花種魚數月亮賞星星)》之銘言:
: ※ 引述《Passions (passion)》之銘言:
: : 想請問 Block 的用法是什麼?
: : 這一段程式碼我看了好久,也有找 help 來看,但一直都看不懂
: : 可以請高手幫我解答一下嗎:
: : f[L_?NumberQ,G_?NumberQ,K_NumberQ]:=Block[{r,n,t,y},
: : {r}=NDSolve[{包含n,t,L,G的微分方程式,n[0]==K},n,{t,0,10}];
: : y=n[a] /. r;Plus @@ ((b-y)^2)]
: : ...
: : 最後目的是對 f 這個自訂函數找 FindMinimum.
: : 我的問題是:
: : 一、Block 是不是用來創造出一個環境是使得裡面的數值不受外界影響,
: : 然後指定不受影響的數為 r,n,t,y。不太能了解用在這邊的意義為何?
: : 二、思考流程是什麼?是先從 NDSolve解出數值,再丟給 Block
: : 做不知道什麼的用途,之後再傳給 f 函數?@@
: : 三、Plus @@ 這個用法是怎麼去做計算的呢,我開新頁去測試,仍然理不出頭緒
: : 請問有沒有大大能夠幫忙回答的呢?因為還蠻急的,找了不少人問都沒有結果。
: : 感謝!
: {r,n,t,y}是區域變數,只有在f這個函數才有作用,一旦跳出f它什麼都不是
: 舉個例子
: g[x_]:=Block[{w=10,xx=x},2xx+w]
: 執行一下
: g[10]
: {ww,xx}
: g[10]=30
: {ww,xx}={ww,xx}
: 不過為了怕之前L,G,K這些變數已經有定義過,建議改成這樣
: f[L_?NumberQ,G_?NumberQ,K_NumberQ]:=Block[{LL=L,GG=G,KK=K,r,n,t,y},
: {r}=NDSolve[{包含n,t,LL,GG的微分方程式,n[0]==K},n,{t,0,10}];
: y=n[a] /. r;Plus @@ ((b-y)^2)]
: @@=Apply,Plus @@ ((b-y)^2)] =>把加法套用在((b-y)^2)上

謝謝你的回信!

不過仍然有幾個問題:

一、關於 Block 的用法,仍有一點不清楚。

原式中的 Block[{A},B ; C ; D ]

分號; 在 mathematica 中,應該是代表指令結束,

但在這邊還是被包在 Block 裡面,這真的是非常奇怪,不知道語法是什麼。

二、Plus @@ ((b-y)^2)]

這個跑出來的結果會是 2 + b - y

這真的是非常奇怪,直接把它當2看,這樣不就把平方的意義給弄掉了嗎

不過又回到第一個問題來,還是他在Block 裡能表現出特別的意義來?

三、舉的這個例子我能看懂

跑 g[x_]:=Block[{w=10,xx=x},2xx+w]

g[10] 會得到30。

但是例子中的 {ww,xx}和 {ww,xx}={ww,xx}

: g[10]
: {ww,xx}
: g[10]=30
: {ww,xx}={ww,xx}

是什麼意思呢?

不好意思問題蠻多的 ><

如果能抽空幫忙回答的話,我會非常感激的

感謝!

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.82.160

沒有留言:

張貼留言