日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数值计算方法”上机实验指导书——实验一 误差分析

發布時間:2023/12/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数值计算方法”上机实验指导书——实验一 误差分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.




實驗要求
**1、**選擇充分小的 ess,反復進行上述實驗,記錄結果的變化并分析它們。如果擾動項的系數 ε 很小,我們自然感覺(1.1)和(1.2)的解應當相差很小。計算中你有什么出乎意料的發現?表明有些解關于如此的擾動敏感性如何?
令ess分別等于0.000000001(1e-8)、0.000000000001(1e-11)和0.000000000000001(1e-14),計算式(1.2)中的解,并使用MATLAB在坐標軸中將各點分別使用綠色、紅色和藍色連接起來。圖示如下:

從圖中可以看到,隨著ess值變小,(1.2)的解的變化幅度也越來越小。
當ess=0.000000000000001(1e-14)時,如圖中藍線所示,此時擾動項的系數ε 很小,式(1.0)和(1.2)的解相差很小。
當解x<=6時,此時無論擾動項的系數ε 怎樣變化,式(1.2)的解值不變與(1.1)相同,所有線段均呈直線。說明這些解的擾動敏感性較低。
代碼如下:

ess = 0.000000001; ve = zeros(1,21); ve(2) = ess; a=poly(1:20)+ve; b=roots(poly(1:20)+ve); ess = 0.000000000001; ve = zeros(1,21); ve(2) = ess; c=poly(1:20)+ve; d=roots(poly(1:20)+ve); ess = 0.000000000000001; ve = zeros(1,21); ve(2) = ess; e=poly(1:20)+ve; f=roots(poly(1:20)+ve); n=1:20; plot(n,b,'g',n,d,'r',n,f,'b'); xlabel('n','FontSize',18);ylabel('x','FontSize',18);title('式(1.2)的解','FontSize',16);

2、將方程(1.2)中的擾動項改成εx^18或其它形式,實驗中又有怎樣的現象出現?
改變方程的擾動項為εx^18后,令ess分別等于0.000000001、0.000000000001和0.000000000000001,得到的圖形如下:

從圖中可以看出,相較于擾動項為εx^19,此時解的變化幅度小了很多。
改變方程的擾動項為εx^20后,圖像如下:

思考題一:(上述實驗的改進)
在上述實驗中我們會發現用 roots 函數求解多項式方程的精度不高,為此你可以考慮用符號函數 solve 來提高解的精確度,這需要用到將多項式轉換為符號多項式的函數 poly2sym,函數的具體使用方法可參考 MATLAB 的幫助。
使用solve提高精度的代碼如下:

ess = 0.000000001; ve = zeros(1,21); ve(2) = ess; g=poly(1:20); %不添加擾動 h=roots(poly(1:20)); n=1:20; c=poly(1:20)+ve; %得到多項式方程的系數保存于c中 eqn=poly2sym(c); %使用poly2sym把方程表示出來保存于eqn中 s=solve(eqn); %求出方程eqn的解 s=vpa(s); %將解去root(解的數量較多時,出現root問題) s=flipud(s); %把解從大到小排列 plot(n,s,'r',n,h,'g'); %繪圖

得到的圖形如下:

綠色為不加擾動項圖形,紅色為使用solve添加擾動項的圖形。
將使用roots和solve計算的解結果圖繪于同一圖形中,如下:

綠色為使用roots添加擾動項圖形,紅色為使用solve添加擾動項的圖形。
結果顯示區別并不明顯。

思考題二:(二進制產生的誤差)
計算公式的代碼如下:
t=0;
for n=1:1000
t=t+0.1;
end
l=t-100; %l為計算的結果
得到的結果l為-1.4069e-12,與理論值0不同。

思考題三:(一個簡單公式中產生巨大舍入誤差的例子)
由于n很大時,數據量較大,所以采取分段的思想。
首先在n=1~1e50之間取10整數倍冪,即:1、10、100……1e49、1e50,并將對應的誤差:f(n)-exp(1)的值存入數組Sn,得到如下圖所示圖形:

從圖中可以看出,誤差最大值大約在n=1e15附近。
代碼如下:

Sn= zeros(0,3000); t = 0:50; m=1; n=1; for h =0:50Sn(m) = (1+1/n)^n-exp(1);m=m+1;n=n*10; endfigure; plot(t(1:50),Sn(1:50)); xlabel('t/10的冪次數','FontSize',18);ylabel('Sn/誤差,'FontSize',18);title('tu','FontSize',16);

為準確計算出n的值,接下來把區間(1e14, 1e16)等分成100000份,一份為1e11,計算誤差f(n)-exp(1)的值存入數組Sn。結果如下:

結果顯示,誤差在區間份數的第89070份時有最大值,即此時n=9.901e15,誤差最大為4.671。
代碼如下:

Sn= zeros(1,300000); t = 1:100000; m=1; for n =1e14:1e11:1e16Sn(m) = (1+1/n)^n-exp(1);m=m+1; end figure; plot(t,Sn(1:100000)); xlabel('t/(1e14,1e16)的等分份數','FontSize',18);ylabel('Sn/誤差','FontSize',18);title('tu','FontSize',16);

舍入誤差是計算機進行實數計算時所產生的。之所以產生舍入誤差是因為機器中進行的算術運算所涉及的數是有限位的,從而導致計算只能用實際數值的近似表示式來完成。在典型的計算機中,僅實數系統的一個相對小的子集用來表示所有的實數。這個子集包含了正負有理數,且存儲了小數和指數部分。

總結

以上是生活随笔為你收集整理的数值计算方法”上机实验指导书——实验一 误差分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。