姓名:陳浩
學號:081002102
班級:091002
指導老師:任林源
完成日期:2011-7
目錄一丶概述
二丶設計內容
三丶設計過程
四丶主要**
五丶結果顯示
六丶結果驗證
七丶設計總結
實驗一:gauss消去法和gauss選列主元消去法
一丶概述
1.1 設計名稱:gauss消去法和gauss選列主元消去法
1.2 設計目的:
數值分析課本中的最基礎解線性方程組的方法gauss消去法和gauss選列主元消去法,隨著對他們的深入研究發現他們也有很多缺點.設計這次試驗是為了找出這兩者之間的區別。加強對這兩種演算法的了解和掌握,還有鍛鍊分析問題,解決問題的能力,理解和掌握相關演算法的原理執行並完成程式設計.
二丶設計內容、
程式設計試驗gauss消去法和gauss選列主元消去法;對二者演算法進行比較;
三丶設計過程
3.1 gauss消去法
3.1.1 消去法實現:
根據消去法的原理,編寫matlab程式,並執行,然後帶入資料算出結果,再比較.
3.1.2 gauss消去法的原理:
方程組:a*x=b a為矩陣a=[ a(11) a(12)…a(1n);
a(21) a(22)…a(2n);
a(n1) a(n2)…a(nn)]
b=[b1 b2 …bn]
1. 回帶過程
用行列式的初等行變換把a化為上三角矩陣,則可以取得xn的值,有xn的值則可以帶入上一式中求出x(n-1)的值,以此類推則可以求得xi的值則遞推公式
xn=un,n-1/unn
xi=1/uii(ui,n+1-(ui,i+1xi+1+…..+uinxn))
3.2 gauss選列主元消去法
3.2.1 原理:選列主元消去法就是在係數矩陣中按列選取絕對值最大的值作為主元素,然後交換所在行與主元素所在行的位置,再按順序消去法進行消元。
四丶主要**:
4.1 gauss消去法主要**
function x=hanxiaogu (a,b)
n=length(b);
for i= 1:n-1
for k= i+1:n
for j= i+1:n
if abs (a(i,i))<10^(-6)
warning('分母為零不能計算!');
return;
else
a(k,j)= a(k,j)-a(i,j)*a(k,i)/a(i,i);
end end
b(k)=b(k)-b(i)*a(k,i)/a(i,i);
a(k,i)=0;
endend%回代求解
x(n)=b(n)/a(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+a(i,j)*x(j);
endx(i)=(b(i)-sum)/a(i,i);
endend
4.2 gauss選列主元消法主要**
function x=gaussxiaoqumethod(a,b)
%用高斯消去法解線性方程組a*x=b% x是未知量
n=length(b);
x=zeros(n,1);
c=zeros(1,n);
%尋找最大元
t=0;
for i=1:n-1
max=abs(a(i,i));
m=i;
for j=i+1:n
if max max=abs(a(j,i));
m=j;
endendif m~=i
for k=1:n
c(k)=a(i,k);
a(i,k)=a(m,k);
a(m,k)=c(k);
endt=b(i);
b(i)=b(m);
b(m)=t;
endfor k=i+1:n
for j=i+1:n
a(k,j)=a(k,j)-a(i,j)*a(k,i)/a(i,i);
endb(k)=b(k)-b(i)*a(k,i)/a(i,i);
a(k,i)=0;
endend
%回帶過程
x(n)=b(n)/a(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+a(i,j)*x(j);
endx(i)=(b(i)-sum)/a(i,i);
endend
五丶結果顯示:
5.1 gauss消去法和gauss主元消去法結果相同
顯示結果:a =
4096 1234 3678 2943
2246 3872 4015 1129
3645 1926 3781 643
1784 4002 2786 3927
b = 4063 1550 4240 -2557
x=hanxiaogu (a,b)
x = -0.1818
-1.6694
2.2226
-0.4440
六丶結果驗證
a*x=4063.3384
1550.2234
4240.2332
2556.6944
這說明gauss消去法和gauss主元消去法的計算精度是相當高的。但是如果係數矩陣a是奇異矩陣,就會出錯。
七丶設計總結
列主元消元法和gauss消元法的計算過程基本上是一樣的,只是在每一次消元前要選取係數矩陣的列主元,然後把方程組做適當的行交換再進行消元運算,這就保證了捨入誤差不擴散。列主元消元法克服了順序gauss消元的缺點,運算量也沒有全主元消元法那麼大,因此是解線性方程組的一種比較實用而且簡單的方法。
實驗二:gauss-seidol迭代法線性方程組
一概述:
1.1 設計說明:guass-seidol迭代法
1.2 設計目的:深入學習和掌握gauss-seidol迭代法解線性方程組,會使用matlab軟體,回編寫程式,並使用程式帶入資料,計算出結果。
二丶演算法內容:
編寫程式,並使用matlab程式執行程式,計算出結果
三丶設計過程
3.1 gauss-seidol迭代法
3.1.1 迭代法的實現:根據迭代法的原理,編寫matlab程式,並執行,然後帶入資料算出結果。
3.1.2 gauss-seidol迭代法的原理:
線性方程組 ax=b a=(aij)n×n非奇異,b=[b…b]』≠o.將ax=b變換成對映形式的同解組x=gx+f
由此構造迭代公式 x(k)=gx(k-1)+f
對取定的初值向量想x(0),取得極限 x*=gx*+f
從而x*為a*x=b的解,當k充分大的時候x*=x(k).
四丶主要**:
function x=naspgs(a,b,x0,e,n)
%用途:用向量(稀疏儲存)形式的gauss-seidel迭代解線性方程組ax=b
%格式:x=naspgs(a,b,x0,e,n) a為係數矩陣,b為右端向量,x返回解向
量,x0為初值向量(預設原點),e為精確度(預設1e-4),設定迭代次數上限
以防發散(預設500)
n=length(b);
if nargin<5,n=500;end
if nargin<3,e=1e-4,end
if nargin<2,x0=zeros(n,1);end
x0=sparse(x0);b=sparse(b);a=sparse(a);%使用稀疏矩陣儲存
x=x0;x0=x+2*e;x0=sparse(x0);
k=0;a1=tril(a);ia1=inv(a1);
while norm(x0-x,inf)>e&k k=k+1;
x0=x;x=-ia1*(a-a1)*x0+ia1*b;
endx=full(x);
if k==n,warning('已達迭代次數上線');end
end五丶結果顯示
a=[17.031,-0.615,-2.991,1.007,-1.006,0.000;
-1.000,34.211,-1.000,-2.100,0.300,-1.700;
0.000,0.500,13.000,-0.500,1.000,-1.500;
4.501,3.110,-3.907,-61.705,12.170,8.999;
0.101,-8.012,-0.017,-0.910,4.918,0.100;
1.000,2.000,3.000,4.500,5.000,21.803]
b=[0.230,-52.322,54.000,240.236,29.304,-117.818]'
e=10^(-6)
x0=[0 0 0 0 0 0] '
n=500
x=naspgs(a,b,x0,e,n)
x =[0.9071 -1.9618 3.2937 -4.5007 2.0293 -5.2551] '
《數值分析》課程設計報告
課程設計報告 課程設計題目 牛頓迭代法求解非線性方程組 學生姓名 專業 班級 指導教師 題目 在化學工程中常常研究在乙個封閉系統中同時進行的兩種可逆反應 其中a,b,c和d代表不同的物質。反應達到平衡是有如下的平衡關係 其中稱為平衡常數,代表平衡狀態時該物質的濃度。假定反應開始時各種物質的濃度為 而...
課程設計實驗報告
上海應用技術學院 課程設計 2011 2012學年第二學期 設計題目成績記錄簿 院 系 電腦科學與資訊工程學院 專業計算機應用技術 班級 12104006 學號 1210400631 學生姓名溫源 設計時間 2013.07.1 2012.07.12 指導教師宋智禮 提交日期 上海應用技術學院課程設計...
課程設計實驗報告
實驗報告 課程名稱統計學課程設計 實驗類別 綜合性 設計性 其他 實驗專案統計學課程設計 專業班級 姓名 學號 實驗室號實驗組號 實驗時間批閱時間 指導教師成績 瀋陽工業大學實驗報告 適用經 管 文 法專業 專業班級學號姓名 實驗專案 spss資料處理 附件 1 瀋陽工業大學實驗報告 適用經 管 文...