Statistics 板


LINE

※ 引述《af2486 (我喜歡旅行)》之銘言: : ------------------------------------------------------------------------ : [軟體程式類別]:Mathematica : 請填入軟體程式類別 例如SAS、SPSS、R、EVIEWS...等 : [程式問題]: : 在用mathematica牛頓法求解時,會先給個固定值讓程式在那值附近求解(一連串的多組解)。 : 不過後來發現往往後面求出的解會跑掉,因此現在要設定每次求解都以上一個算出來的值 : 當作新的求解範圍。不過我不知道該用什麼指令好,有人能給個方向嗎? : xiLimit = 15.; : Hankel1[m_, x_] := : If[Abs[x] < xiLimit, BesselJ[m, x] + I BesselY[m, x], : Sqrt[2/(Pi*x)] Exp[I*(x - m/2*Pi - Pi/4)]]; : BesselJp[m_, x_] := : If[Abs[x] < xiLimit, : D[BesselJ[m, x1], : x1] /. {x1 -> x}, -Sqrt[2/(Pi*x)] Sin[(x - m/2*Pi - Pi/4)]]; : BesselYp[m_, x_] := : If[Abs[x] < xiLimit, D[BesselY[m, x1], x1] /. {x1 -> x}, : Sqrt[2/(Pi*x)] Cos[(x - m/2*Pi - Pi/4)]]; : Hankel1p[m_, x_] := : If[Abs[x] < xiLimit, D[Hankel1[m, x1], x1] /. {x1 -> x}, : I*Sqrt[2/(Pi*x)] Exp[I*(x - m/2*Pi - Pi/4)]]; : kr[kz_, k_] := Sqrt[k^2 - kz^2]; : \[Alpha]r[kz_, k_] := Sqrt[kz^2 - k^2]; : f[kz_, opt_] := Module[{sub}, : k0 = \[Omega] Sqrt[\[Epsilon]0 \[Mu]0] /. opt; : k1 = \[Omega] Sqrt[\[Epsilon]1 \[Mu]1] /. opt; : k2 = \[Omega] Sqrt[\[Epsilon]2 \[Mu]2] /. opt; : r0 = r0 /. opt; : r1 = r1 /. opt; : m = m /. opt; : kr0 = kr[kz, k0]; : kr1 = kr[kz, k1]; : \[Alpha]r2 = \[Alpha]r[kz, k2]; : BJ00 = BesselJ[m, kr[kz, k0] r0]; : BJ10 = BesselJ[m, kr[kz, k1] r0]; : BJ11 = BesselJ[m, kr[kz, k1] r1]; : BY10 = BesselY[m, kr[kz, k1] r0]; : BY11 = BesselY[m, kr[kz, k1] r1]; : BJp00 = BesselJp[m, kr[kz, k0] r0]; : BJp10 = BesselJp[m, kr[kz, k1] r0]; : BJp11 = BesselJp[m, kr[kz, k1] r1]; : BYp10 = BesselYp[m, kr[kz, k1] r0]; : BYp11 = BesselYp[m, kr[kz, k1] r1]; : HA21 = Hankel1[m, I \[Alpha]r[kz, k2] r1]; : HAp21 = Hankel1p[m, I \[Alpha]r[kz, k2] r1]; : M = {{BJ00, 0, -BJ10, -BY10 , 0, 0, 0, 0}, : {0, BJ00, 0, 0, -BJ10, -BY10, 0, 0}, : {(\[Omega] \[Epsilon]0)/(kr0 r0) BJp00, (m kz)/(kr0^2 r0^2) : BJ00, -((\[Omega] \[Epsilon]1)/(kr1 r0)) : BJp10, -((\[Omega] \[Epsilon]1)/(kr1 r0)) BYp10, -((m kz)/( : kr1^2 r0^2)) BJ10, -((m kz)/(kr1^2 r0^2)) BY10, 0, 0}, : {(m kz)/(kr0^2 r0^2) BJ00, (\[Omega] \[Mu]0)/(kr0 r0) : BJp00, -((m kz)/(kr1^2 r0^2)) BJ10, -((m kz)/(kr1^2 r0^2)) : BY10, -((\[Omega] \[Mu]1)/(kr1 r0)) : BJp10, -((\[Omega] \[Mu]1)/(kr1 r0)) BYp10, 0, 0 }, : {0, 0, BJ11, BY11 , 0, 0, -HA21, 0}, : {0, 0, 0, 0, BJ11, BY11, 0, -HA21}, : {0, 0, (\[Omega] \[Epsilon]1)/(kr1 r1) : BJp11, (\[Omega] \[Epsilon]1)/(kr1 r1) BYp11, (m kz)/( : kr1^2 r1^2) BJ11, (m kz)/(kr1^2 r1^2) BY11, ( : I \[Omega] \[Epsilon]2)/(\[Alpha]r2 r1) HAp21, ( : m kz)/(\[Alpha]r2^2 r1^2) HA21}, : {0, 0, (m kz)/(kr1^2 r1^2) BJ11, (m kz)/(kr1^2 r1^2) : BY11, (\[Omega] \[Mu]1)/(kr1 r1) BJp11, (\[Omega] \[Mu]1)/( : kr1 r1) BYp11, (m kz)/(\[Alpha]r2^2 r1^2) HA21, ( : I \[Omega] \[Mu]2)/(\[Alpha]r2 r1) HAp21} : } /. opt; : equ = Det[M]; : Return[equ]; : ] : Do[ : n0 = Sqrt[ : 1 + (0.68671749* lambda^2)/(lambda^2 - : 0.072675189^2) + (0.43481505* lambda^2)/(lambda^2 - : 0.11514351^2) + (0.89656582* lambda^2)/(lambda^2 - : 10.002398^2)]; : n1 = Sqrt[ : 1 + (0.6961663* lambda^2)/(lambda^2 - 0.0684043^2) + (0.4079426* : lambda^2)/(lambda^2 - 0.1162414^2) + (0.8974794* : lambda^2)/(lambda^2 - 9.896161^2)]; : n2 = 1.0; : opt = {m -> 1, \[Omega] -> 2 Pi/lambda, r0 -> 4.1, : r1 -> 62.5, \[Epsilon]0 -> n0^2, \[Mu]0 -> 1., \[Epsilon]1 -> : n1^2, \[Mu]1 -> 1., \[Epsilon]2 -> n2^2, \[Mu]2 -> 1., kz -> y}; : sol2 = FindRoot[f[y*(2 Pi/lambda), opt] == 0, {y, 1.4435}]; : Print[FullForm[Re[sol2[[1, 2]]]]], : {lambda, 1.54, 1.56, 0.001}] : 以上是部分程式碼,從1.54~1.56每次加0.001在1.4435附近求解,會求出21組解。現在想要 : 每算完一組解就以這個解當新的值繼續往下算;例如說1.54算出1.4480196760169795, : 1.541就以這個值往下算,之後的以此類推。請問這樣程式碼要怎改比較好呢?謝謝! : [軟體熟悉度]: : 低(1~3個月) : ----------------------------------------------------------------------------- n0[lambda_]:=Sqrt[1+(0.68671749*lambda^2)/(lambda^2- 0.072675189^2)+(0.43481505*lambda^2)/(lambda^2- 0.11514351^2)+(0.89656582*lambda^2)/(lambda^2-10.002398^2)]; n1[lambda_]:=Sqrt[1+(0.6961663*lambda^2)/(lambda^2-0.0684043^2)+(0.4079426* lambda^2)/(lambda^2-0.1162414^2)+(0.8974794* lambda^2)/(lambda^2-9.896161^2)]; n2[lambda_]:=1.0; opt[lambda_]:={m->1,\[Omega]->2Pi/lambda,r0->4.1, r1->62.5,\[Epsilon]0->n0[lambda]^2,\[Mu]0-> 1.,\[Epsilon]1->n1[lambda]^2,\[Mu]1->1.,\[Epsilon]2-> n2[lambda]^2,\[Mu]2->1.,kz->y}; NestList[{#[[1]]+0.01,#[[3]],Re@y}/. FindRoot[f[y*(2Pi/(#[[1]]+0.01)),opt[#[[1]]+0.01]],{y,#[[3]]}]&, {1.53,1.4435,1.4435},20][[2;;-1]]//TableForm -- 養花種魚數月亮賞星星 http://cydye1069.blogspot.com --



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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP