最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Euler法,梯形法,RK2,RK4對ODE應(yīng)用的matlab代碼和誤差分析及圖像輸出——數(shù)值方法

2023-04-29 01:24 作者:小埋埋土里  | 我要投稿

一次挺滿意的小組合作,記錄一下使用的代碼和過程。事先聲明代碼來自chatGPT,由于CSDN上沒有找到類似的代碼,這也是為以后或許要用到的同學(xué)留個(gè)資源吧。雖然說代碼不是親自寫的,理解還是很容易,順便注明一些我們走的彎路。

數(shù)值方法:

歐拉法:

很容易理解,順帶提一句chatGPT的代碼注釋真的很強(qiáng)大。

歐拉法調(diào)用方法:

(我們作業(yè)內(nèi)的ODE是y'%3D10y(1-y),所以下面的都以這個(gè)ODE為例,再順帶提一句,使用matlab解ODE用dsolve就好。)

本來想解釋一下,但真沒啥解釋的...定義函數(shù),初值,區(qū)間,步長,調(diào)用函數(shù),畫圖,坐標(biāo)軸和圖名,就這些。

歐拉法輸出圖像:


歐拉法圖像


梯形法:

英文是Trapezoidal method,tra pe zo i dal,梯形。

這次tspan是區(qū)間,不懂就看下面輸入案例。

梯形法調(diào)用方法:

梯形法輸出圖像:


梯形法圖像

RK2:

RK2調(diào)用方法:

圖不放了,同上(雖然說調(diào)用方法也類似,我還是把餅遞到嘴邊吧)。

RK4:

RK4調(diào)用方法:

誤差分析:

我們做的誤差分析是得出原函數(shù)在t=1時(shí)的值和數(shù)值方法逼近的值差的絕對值再取對數(shù),聽著有點(diǎn)麻煩啊,寫成式子應(yīng)該是這樣:%5Ctext%7Berror%7D%3D%5Clog%7B%7Cy(1)-y_%7Bm%7D(1)%7C%7D。這里我們將步長設(shè)為自變量,從10的-1到-6次方,誤差為因變量,這樣取對數(shù)后,正常的誤差分析結(jié)果應(yīng)該是幾條斜率不同的直線。

代碼:

誤差分析圖像:

誤差分析圖像

小問答:這里直線的斜率分別為1,2,4,原因是什么?

另外,效果最好的是RK4,我一開始疑惑為什么RK4方法會觸底反彈,chatGPT的解釋是:

使用RK4方法擬合函數(shù)時(shí),有時(shí)在步長減小到一個(gè)值時(shí),隨著步長繼續(xù)減小,誤差反而增大的原因:在RK4方法中,步長的大小會影響擬合精度,通常情況下,減小步長可以提升擬合的精度。然而,當(dāng)步長繼續(xù)減小時(shí),誤差反而增大的原因在于舍入誤差的影響。由于計(jì)算機(jī)存儲浮點(diǎn)數(shù)是有限精度的,當(dāng)步長較小時(shí),函數(shù)的微小變化可能會因?yàn)榫炔蛔愣缓雎?,從而?dǎo)致誤差逐漸累積,最終使得計(jì)算結(jié)果和真實(shí)結(jié)果之間的差距增大。

我也詢問了為什么歐拉法和RK2為什么不會如此,chatGPT解釋是:

歐拉法和RK2方法在同樣的函數(shù)上進(jìn)行數(shù)值積分時(shí),沒有出現(xiàn)這種問題的原因是因?yàn)樗鼈兊挠?jì)算精度相對較低,誤差隨著步長的減小而不是增大。歐拉法和RK2方法都是數(shù)值積分常用的一階顯式方法,與RK4方法相比,它們的計(jì)算復(fù)雜度較低,每次迭代只需要使用一次函數(shù)導(dǎo)數(shù)計(jì)算即可。這種簡單的計(jì)算方式使得它們在處理簡單的函數(shù)時(shí)更加高效。然而,這種高效性也帶來了精度的犧牲。相較于RK4方法的四階精度,歐拉法只有一階,而RK2方法只有二階。因此,在進(jìn)行數(shù)值積分時(shí),它們的誤差通常較大。

一些踩坑:

之后,我們換了一個(gè)新的函數(shù),區(qū)間設(shè)為0到60。我們一開始想用函數(shù)中間的值來對比誤差,即y(30),結(jié)果搞出一個(gè)四不像圖像,具體的就不放了。后來在做報(bào)告前,我們才發(fā)現(xiàn)在誤差分析的代碼中,我們用了例如y_exact(t_euler(end))的函數(shù)。我們將步長,初值,區(qū)間和取值全都換為了新的函數(shù),但就是沒發(fā)現(xiàn)這個(gè)...最后作差是將函數(shù)中間數(shù)值方法的值和原函數(shù)末端值比較,當(dāng)然完全不對了。還是沒有完全理解如此簡單的代碼啊。順帶一提這些迭代的方法,比較函數(shù)末端(end)值其實(shí)應(yīng)該是最能顯示誤差的。

最后看看我們對另一個(gè)函數(shù)做的誤差分析圖吧:

f = @(t, y) -0.051*(y-24);

注意兩個(gè)誤差分析圖的斜率哦!

Euler法,梯形法,RK2,RK4對ODE應(yīng)用的matlab代碼和誤差分析及圖像輸出——數(shù)值方法的評論 (共 條)

分享到微博請遵守國家法律
高碑店市| 湘潭市| 鞍山市| 台江县| 霍林郭勒市| 黄梅县| 克山县| 花莲市| 二连浩特市| 拉萨市| 延川县| 军事| 福清市| 青神县| 长葛市| 铅山县| 故城县| 牟定县| 金华市| 剑河县| 德令哈市| 新竹市| 扎赉特旗| 桦南县| 余江县| 龙陵县| 公主岭市| 九龙坡区| 鄄城县| 兴海县| 交城县| 禹州市| 稷山县| 潮州市| 嘉鱼县| 井陉县| 大庆市| 南安市| 宿松县| 淄博市| 宁海县|