Re: [問題] 有關NDsolve
看板Mathematica作者harry901 (forcing to A cup)時間13年前 (2011/12/12 13:16)推噓1(1推 0噓 2→)留言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
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章