2010年7月29日 星期四

[自動轉寄] (af2486) Re: [程式] 有關mathematica求解的一個問題

作者: chungyuandye (養花種魚數月亮賞星星)
標題: Re: [程式] 有關mathematica求解的一個問題
時間: Fri Jul 30 08:56:42 2010

※ 引述《af2486 (我喜歡旅行)》之銘言:
: ------------------------------------------------------------------------
: [軟體程式類別]:Mathematica
: 請填入軟體程式類別 例如SAS、SPSS、R、EVIEWS...等
: [程式問題]:
: 在用mathematica牛頓法求解時,會先給個固定值讓程式在那值附近求解(一連串的多組解)。
: 不過後來發現往往後面求出的解會跑掉,因此現在要設定每次求解都以上一個算出來的值
: 當作新的求解範圍。不過我不知道該用什麼指令好,有人能給個方向嗎?
: 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個月)
: -----------------------------------------------------------------------------


沒有你的f,隨便假設一下

{#, y} /. FindRoot[n2 y^2 + 4 n1 y + n0 /. lambda -> #, {y, 1}] & /@
Range[1.54, 1.56, 0.0001]

--
養花種魚數月亮賞星星

http://cydye1069.blogspot.com

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

沒有留言:

張貼留言