[實習名稱]數值分析課程實習
[實習地點]綜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指導教師郝衛東 成績年月 說明一 計算機應用實踐是本科教學重要的實踐教學環節,是提高學生應用計算機 能力的重要措施。所有參加計算機應用實踐教學活動的學生都...
計算機暑期實踐報告
很快的,署假又過來了,面對最後一年的校園生活,想著剛剛過去的最後乙個署假,緊張沉默之後更多的是感慨,印在腦海裡的每乙個足跡都是那麼的深,真的說不出是什麼感覺,伴著時間,就像是在和自己的影子賽跑,不可能從真實的兩面去看清它,只是經意不經意的感受著有種東西在過去,也許更適合的只有那句話 時不待我,怎可駐...