Re: [問題] 有關NDsolve

看板Mathematica作者 (forcing to A cup)時間13年前 (2011/12/12 13:16), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《huangcooly (弱小豪)》之銘言: : 再用NDSolve時 : 有一個是MaxStpes : 我看內建是10000 : 是指假如我現在時間要算的範圍是0~2 : 他會在0~2之間切割成10000等分去計算 : 還是指每秒切割成10000等分 : 另外一個問題是 : 我現在想要做NDSolve時 : 每次只做0.0001秒 : 我該怎麼設定 : 我的寫法是大概這樣 : Do : [ : NDSolve{...,{t,tt,tt+0.0001} : ,{tt,0,10,0.0001} : ] : 但是這樣好像會在tt~tt+0.0001 : 在切割好幾等分去做~ : 但我不要這樣 : 我想要下一個解就是間格0.0001 : 是要從MaxStepfraction去設定嗎 : 有這方面的高手嗎 : 可以幫我解惑一下 : 謝謝 直接抓手冊幫你翻譯解釋好了 MaxStepFraction 最大步驟分數 is an option to functions like NDSolve that specifies the maximum fraction of the total range to cover in a single step. Make sure that NDSolve uses at least 100 steps over the integration range: NDSolve[{x''[t] + x[t] == Exp[-1000 (t - \[Pi])^2], x[0] == x'[0] == 0}, x, {t, 0, 20}, MaxStepFraction -> 1/100] 意思是說:要將你的解之範圍切成多少份來解,上面的例子是最少會使用100次的步驟 來解方程,如果遇到奇異點等情況她會自動再切割去計算。但是並不代表她會平均分割 你要得範圍。除非你割得很細 解答才會接近實際解。 MaxStepSize is an option to functions like NDSolve that specifies the maximum size of a single step used in generating a result. Keep the largest step taken by NDSolve to be 0.01: NDSolve[{x''[t] + x[t] == Exp[-1000 (t - \[Pi])^2], x[0] == x'[0] == 0}, x, {t, 0, 20}, MaxStepSize -> 0.01] 這邊就不多說了,原文寫得很清楚 舉下列例子你可以參考研究兩者差異 s = First[ x /. NDSolve[{x''[t] + x[t] == Exp[-1000 (t - \[Pi])^2], x[0] == x'[0] == 0}, x, {t, 0, 20}, MaxStepSize -> 0.05]] Plot[s[t], {t, 0, 20}, PlotRange -> All] ansS = {s[5], NIntegrate[s[t], {t, Pi, 2 Pi}]} TimeUsed[] ss = First[ x /. NDSolve[{x''[t] + x[t] == Exp[-1000 (t - \[Pi])^2], x[0] == x'[0] == 0}, x, {t, 0, 20}, MaxStepFraction -> 0.05]] Plot[ss[t], {t, 0, 20}, PlotRange -> All] ansSS = {ss[5], NIntegrate[ss[t], {t, Pi, 2 Pi}]} TimeUsed[] 兩者的解差很多(因為使用切割距離0.05) 而實際上精確解只有一個 如果將切割距離都改為0.01 則兩者答案都差不多 那到底何時要使用MaxStepFraction,MaxStepSize? 個人認為前者的好處是前者計算快,因為她直接平均分割之後再進行計算,但容易失真 在確定函數奇異性高的時候盡量少用 後者使用MaxStepSize表示每次增量的最多量,碰到奇點時或無法收斂時,只會用更小的 增量去逼近,因此計算上要花比較多的時間,但解比較精確 以上面的例子,不管是0.01或0.05去切割,所計算時間其實差了快十倍,但 MaxStepFraction在0.01已經收斂到精確解,速度也比較快,所以本例使用是ok的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.252.177

12/13 00:09, , 1F
唷唷~所以在座有歧異點的問題時~用MaxStepFraction會比
12/13 00:09, 1F

12/13 00:11, , 2F
較快囉~
12/13 00:11, 2F

12/13 02:07, , 3F
不訪你兩個都是試看吧
12/13 02:07, 3F
文章代碼(AID): #1EvOuXa_ (Mathematica)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1EvOuXa_ (Mathematica)