1數學與計算機實踐報告內頁

2021-03-04 09:58:09 字數 6390 閱讀 2563

[實習名稱]數值分析課程實習

[實習地點]綜d計算機機房

[實習時間]2010.12.13-12.17

[系統環境]windows 2000

[所用機時]20學時

[實習目的]

1、能夠用matlab軟體求方程得實根。

2、能夠用matlab軟體解先行方程組。

3、能夠用matlab軟體解三次樣條函式。

4、能夠用matlab軟體使用龍貝格公式。

5、每人需提交實習報告的電子文件和程式設計的電子文件。

[實習內容和總結]

一實習內容

1、求下列方程的實根,精確到。

(1)(2)實驗要求

(1) 用自己設計的一種線性收斂迭代法計算,然後再用steffensen加速迭代法計算。

(2)用newton法計算,要求輸出迭代初值、各次迭代值及迭代次數。比較各方法優缺點。

解:[演算法描述]

用不動點迭代求近似值,將方程改寫為,若存在為方程的解,且在的鄰域s連續,則由得知,迭代法區域性收斂,再由並通過多次迭代可以得到的近似值。

steffensen加速迭代法是在不到點迭代法的基礎上,將兩步和到一步得到的。其迭代公式為:

用newton法計算,只要連續可導,就可以用公式通過多次迭代得到根的近似值。

[變數說明]

為初值為迭代k次得到的值。

(1)1.用不動點迭代的**:

#include"math.h"

main()

printf("\n x=%lf k=%d",x,k);

}2.用steffensen迭代法的**:

#include"math.h"

main()

printf(" x=%lf k=%d",x,k);

}3.用newton迭代法編寫的**

#include"math.h"

main()

printf("x=%lf k=%d",x,k);

}(2)

1.用不動點迭代法編寫的**:

#include

main()

printf("\nx=%lf,t=%lf,i=%d",x,t,i);

}2.用steffensen迭代法編寫的**:

#include"math.h"

main()

printf(" x=%lf k=%d",x,k);

}3.用newton迭代法編寫的**:

#include"math.h"

main()

printf(" x=%lf k=%d",x,k);

} [輸出結果]

(1)x2 +3x+2- ex =0

1、x0=1.0 x=0.2575303878975677 k=13

2、x0=1.0 x=0.2575302854398608 k=5

3、x0=1.0 x=0.2689414213699951 k=1

x=0.2575182612570967 k=2

x=0.2575302854263488 k=3

x=0.25753028543986073 k=4

(2)x3 + 2x2 +10x -20=0

1、x0=1.0 x=1.3688081161913261 k=7

2、x0=1.0 x=1.3688081078213723 k=4

3、x0=1.0 x=1.4117647058823528 k=1

x=1.3693364705882352 k=2

x=1.3688081886175318 k=3

x=1.3688081078213745 k=4

[結果分析]

在實踐中,用c語言程式精確的計算出了方程的根,證實了steffensen迭代法與newton迭代法明顯比不動點迭代法收斂速度快,但newton法與steffensen迭代相比較,steffensen迭代法迭代速度快,但newton法較為簡單,並且容易判斷其收斂性。

2、給定方程組

(1)(2)將(1)中係數矩陣中係數3.01改為3.00,0.987改為0.990,其他元素不變。

(3)實驗要求

(1)用lu分解和列主元gauss消去法分別求解上述三個方程組。

解:用lu分解

(1)在matlab命令視窗中輸入

a=[3.01 6.03 1.99;1.27 4.16 -1.23;0.987 -4.81 9.34];

b=[1 1 1]';

[l,u]=lu(a);

x=u\(l\b)

回車得到

x = 1.0e+003 *

1.5926

-0.6319

-0.4936

(2)在matlab命令視窗中輸入

a=[3.00 6.03 1.99;1.27 4.16 -1.23;0.990 -4.81 9.34];

b=[1 1 1]';

[l,u]=lu(a);

x=u\(l\b)

回車得到

x = 119.5273

-47.1426

-36.8403

(3)在matlab命令視窗中輸入

?a=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];

?b=[8 5.900001 5 1]';

?[l,u]=lu(a);

?x=u\(l\b)

回車得到

x = 0.0000

-1.0000

1.0000

1.0000

列主元gauss消去法:

在matlab檔案中建立m檔案gaus.mfunction [ra,rb,n,x]=gaus(a,b)b=[a b]; n=length(b); ra=rank(a); rb=rank(b);zhica=rb-ra;if zhica>0,disp('請注意:因為ra~=rb,所以此方程組無解.

')returnendif ra==rb if ra==ndisp('請注意:因為ra=rb=n,所以此方程組有唯一解.') x=zeros(n,1); c=zeros(1,n+1); for p= 1:

n-1for k=p+1:nm= b(k,p)/ b(p,p); b(k,p:n+1)= b(k,p:

n+1)-m* b(p,p:n+1);endend b=b(1:n,n+1);a=b(1:

n,1:n); x(n)=b(n)/a(n,n); for q=n-1:-1:

1 x(q)=(b(q)-sum(a(q,q+1:n)*x(q+1:n)))/a(q,q); endelse disp('請注意:

因為ra=rb> a=[3.01 6.03 1.

99;1.27 4.16 -1.

23;0.987 4.16 9.

34];>> b=[1;1;1];>> [ra,rb,n,x]=gaus(a,b)計算結果:請注意:因為ra=rb=n,所以此方程組有唯一解.

ra = 3rb = 3n = 3x = -0.3539 0.3456 -0.

0095(2)計算程式:>> a=[3.00 6.

03 1.99;1.27 4.

16 -1.23;0.990 4.

16 9.34];>> b=[1;1;1];>> [ra,rb,n,x]=gaus(a,b)計算結果:請注意:

因為ra=rb=n,所以此方程組有唯一解.ra = 3rb = 3n = 3x = -0.3570 0.

3466 -0.0095(3)計算程式:>> a=[10 -7 0 1;-3 2.

099999 6 2 ;5 -1 5 -1;2 1 0 2];>> b=[8;5.900001;5 ;1 ];>> [ra,rb,n,x]=gaus(a,b)計算結果:請注意:

因為ra=rb=n,所以此方程組有唯一解.ra = 4rb = 4n = 4x = -0.0000 -1.

0000 1.0000 1.0000(2)輸出中ax=b矩陣及向量。

a=lu分解的l及u,deta及解向量x。

輸出行列式矩陣a:

(1)?a=[3.01 6.03 1.99;1.27 4.16 -1.23;0.987 -4.81 9.34]

a = 3.0100 6.0300 1.9900

1.2700 4.1600 -1.2300

0.9870 -4.8100 9.3400

(2)?a=[3.00 6.03 1.99;1.27 4.16 -1.23;0.990 -4.81 9.34]

a = 3.0000 6.0300 1.9900

1.2700 4.1600 -1.2300

0.9900 -4.8100 9.3400

(3) ?a=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2]

a = 10.0000 -7.0000 0 1.0000

-3.0000 2.1000 6.0000 2.0000

5.0000 -1.0000 5.0000 -1.0000

2.0000 1.0000 0 2.0000

輸出向量b:

(1)?b=[1;1;1]

b = 1

11(2)?b=[1;1;1]

b = 1

11(3) ?b=[8;5.900001;5;1]

b = 8.0000

5.9000

5.0000

1.0000

l及u的分解:

在matelab中建立m檔案nalu.m(分解a成lu)function[l,u]=nalu(a)n=length(a);u=zeros(n,n);l=eye(n,n);u(1,:)=a(1,:

);l(2:n,1)=a(2:n,1)/u(1,1);for k=2:

n u(k,k:n)=a(k,k:n)-l(k,1:

k-1)*u(1:k-1,k:n); l(k+1:

n,k)=(a(k+1:n,k)-l(k+1:n,1:

k-1)*u(1:k-1,k))/u(k,k);end(1)計算程式: >> a=[3.

01 6.03 1.99;1.

27 4.16 -1.23;0.

987 -4.168 9.34];[l,u]=nalu(a)計算結果:

l = 1.0000 0 0 0.4219 1.

0000 0 0.3279 -3.8033 1.

0000u = 3.0100 6.0300 1.

9900 0 1.6158 -2.0696 0 0 0.

8160(2)計算程式:>> a=[3.00 6.

03 1.99;1.27 4.

16 -1.23;0.990 -4.

168 9.34];>> [l,u]=nalu(a)計算結果:l = 1.

0000 0 0 0.4233 1.0000 0 0.

3300 -3.8312 1.0000u = 3.

0000 6.0300 1.9900 0 1.

6073 -2.0724 0 0 0.7434(3)計算程式:

>> a=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];>> [l,u]=nalu(a)計算結果:l = 1.

0e+006 * 0.0000 0 0 0 -0.0000 0.

0000 0 0 0.0000 -2.5000 0.

0000 0 0.0000 -2.4000 0.

0000 0.0000u = 1.0e+007 * 0.

0000 -0.0000 0 0.0000 0 -0.

0000 0.0000 0.0000 0 0 1.

5000 0.5750 0 0 0 0.0000(3)輸出列主元法行交換次序及解向量x和deta,並與(2)的結果比較。

計算機基礎與程式設計實踐報告

黑龍江科技大學建築工程二學歷實踐報告 1 實踐概述 在此次實踐中,我們在老師的帶領下,對土木工程中常用的一些計算機軟體有了新的認識 了解,使我們在計算機操作上了有了更大的進步。2 主要內容 1 cad 1 定義 cad即計算機輔助設計 cad puter aided design 利用計算機及其圖形...

計算機應用實踐報告

北京科技大學 機房名稱機電樓404 時間 8月13日至 8月24日 學院計算機與通訊工程學院 專業班級物聯11 姓名張曉鑫學號 41158 009指導教師郝衛東 成績年月 說明一 計算機應用實踐是本科教學重要的實踐教學環節,是提高學生應用計算機 能力的重要措施。所有參加計算機應用實踐教學活動的學生都...

計算機暑期實踐報告

很快的,署假又過來了,面對最後一年的校園生活,想著剛剛過去的最後乙個署假,緊張沉默之後更多的是感慨,印在腦海裡的每乙個足跡都是那麼的深,真的說不出是什麼感覺,伴著時間,就像是在和自己的影子賽跑,不可能從真實的兩面去看清它,只是經意不經意的感受著有種東西在過去,也許更適合的只有那句話 時不待我,怎可駐...