需要兩份東西
1﹑實驗程式:輸入﹑輸出﹑注釋
2﹑實驗報告:問題描述﹑方法描述﹑方案設計﹑結果分析﹑結論
謝謝,麻煩寫的詳細些
實驗五解線性方程組的直接方法
實驗5.1 (主元的選取與演算法的穩定性)
問題提出:gauss消去法是我們**性代數中已經熟悉的。但由於計算機的數值運算是在乙個有限的浮點數集合上進行的,如何才能確保gauss消去法作為數值演算法的穩定性呢?
gauss消去法從理論演算法到數值演算法,其關鍵是主元的選擇。主元的選擇從數學理論上看起來平凡,它卻是數值分析中十分典型的問題。
實驗內容:考慮線性方程組
編制乙個能自動選取主元,又能手動選取主元的求解線性方程組的gauss消去過程。
實驗要求:
(1)取矩陣,則方程有解。取n=10計算矩陣的條件數。讓程式自動選取主元,結果如何?
(2)現選擇程式中手動選取主元的功能。每步消去過程總選取按模最小或按模盡可能小的元素作為主元,觀察並記錄計算結果。若每步消去過程總選取按模最大的元素作為主元,結果又如何?
分析實驗的結果。
(3)取矩陣階數n=20或者更大,重複上述實驗過程,觀察記錄並分析不同的問題及消去過程中選擇不同的主元時計算結果的差異,說明主元素的選取在消去過程中的作用。
(4)選取其他你感興趣的問題或者隨機生成矩陣,計算其條件數。重複上述實驗,觀察記錄並分析實驗結果。
1) 首先編寫gauss消元法**;輸入為矩陣a,向量b,精度ptol,輸出為方程組的解 x。程式如下
function [ out ] = gausle( a,b,flag,ptol )
%untitled 高斯消元法可選擇的主元消去法
% a n x n 矩陣
% b n x 1
% flag 標誌主元為自動選取還是手動選取,
% 0,自動(對角為主元) 1,選取最小模為主元,
% 2,選取模最大,(誤差最小)3 ,次最小的模為主元
% ptol 精度
% out 輸出值,為nx1的解 ax=b的解
%% if nargin<4,ptol=50*eps;end
[m,n]=size(a);
if m~=n,error('a不是方陣');end
out=zeros(n,1);% 預先設定解的維數
nb=n+1;
ab=[a,b]; %擴維矩陣
% disp('開始用擴維陣計算');
% disp(ab);
ra=rank(a);
rb=rank(ab);zhica=rb-ra;
if zhica>0,
disp('請注意:因為ra~=rb,所以此方程組無解.')
return
end% 消元過程
for i=1:n-1 ;
i;if flag==0;
pivot=ab(i,i);
ri=i;
elseif flag==1;% 按照每列模最小的選取
pivot,min_index]=min(abs(a(i:n,i)));
ri=i+min_index-1;
elseif flag==2;% 按照模最大的選取
[pivot,max_index]=max(abs(a(i:n,i)));
ri=i+max_index-1;
elseif flag==3 %方程最小非0數
ta=a;
[pivot,min_index]=min(abs(ta(i:n,i)));
while pivot==0;
ta(min_index+i-1,i)=inf;
pivot,min_index]=min(abs(ta(i:n,i)));
endri=i+min_index-1;
endif (pivot==0)||(pivot warning('係數矩陣奇異!!');
return;
endif ri~=i; % 交換行
tmp=a(i,:);a(i,:)=a(ri,:);a(ri,:)=tmp;
t=b(i);b(i)=b(ri);b(ri)=t;
endfor kk=i+1:n
l(kk,i)=a(kk,i)/a(i,i);
a(kk,i+1:n)=a(kk,i+1:n)-l(kk,i)*a(i,i+1:n);
b(kk)=b(kk)-l(kk,i)*b(i);
endendif a(n,n)==0
warning('係數矩陣奇異!!');
return;
end% % 回代求解
x=zeros(n,1)';
for k=n:-1:1
% k
% a(k,k+1:n)
% x(k+1:n)
if k==n
x(n)=b(n)/a(n,n);
else
x(k)=(b(k)-sum( a(k,k+1:n).*x(k+1:n) ) )/(a(k,k));
endendout=x';
end主程式為
n=10時,方程解為
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
a的條件數如下:
1-條件數 2.5575e+003
2-條件數 1.7276e+003
無窮條件數2.5575e+003
**在裡,執行計算即可。flag=0;,時為自動選取
2) flag=1,為選取最小模的值為主元,flag=2,為選取最大模為主元,**是一樣的,修改flag值和維數n即可。
3) n=20 ,只需要更改n,重複上述步驟即可。
4)思考題一:(vadermonde矩陣)設
其中,,
(1)對n=2,5,8,計算a的條件數;隨n增大,矩陣性態如何變化?
(2)對n=20,解方程組ax=b;設a的最後乙個元素有擾動10-4,再求解ax=b
(3)計算(2)擾動相對誤差與解的相對偏差,分析它們與條件數的關係。
(4)你能由此解釋為什麼不用插值函式存在定理直接求插值函式而要用拉格朗日或牛頓插值法的原因嗎?
(5)嘗試做出範德蒙矩陣的預優。
『答 1) n=2,5,8 ;a的條件數為如下所示,隨n增大,條件數越大,矩陣的病態性越嚴重。
**為sikaoti_111.m
3) 由此看來,當係數矩陣的條件數越大,則病態性越嚴重,因而係數矩陣很小相對誤差也會讓解產生很大的相對誤差。
4) 插值函式存在定理直接求插值函式而要用拉格朗日或牛頓插值法的原因是為了補償計算中所產生偏差,而且迭代次數越多,偏差就越大。
5) 預優,
相關matlab函式提示:
實驗六解線性方程組的迭代法
實驗6.1(病態的線性方程組的求解)
問題提出:理論的分析表明,求解病態的線性方程組是困難的。實際情況是否如此,會出現怎樣的現象呢?
實驗內容:考慮方程組hx=b的求解,其中係數矩陣h為hilbert矩陣,
這是乙個著名的病態問題。通過首先給定解(例如取為各個分量均為1)再計算出右端b的辦法給出確定的問題。
實驗要求:
(1)選擇問題的維數為6,分別用gauss消去法、列主元gauss消去法、j迭代法、gs迭代法和sor迭代法求解方程組,其各自的結果如何?將計算結果與問題的解比較,結論如何?
(2)逐步增大問題的維數(至少到100),仍然用上述的方法來解它們,計算的結果如何?計算的結果說明了什麼?
(3)討論病態問題求解的演算法
答:1)guass消元法的程式在gausle.m程式裡,如下所示。flag=0,是自動消元,guass消去法的結果為:
x=[1,1,1,1,1,1]
flag=2為列主元gauss消去法法,gauss列主元消去法的結果為:
x=[1,1,1,1,1,1]
jacobi迭代法程式在jacobi.m,結果為:
[inf ,inf,nan,nan,nan,nan] 。也就是迭代發散,因為迭代陣b的譜半徑大於1,為4.3085,所以此方程不適合用jacobi方法迭
gs迭代法在gauseidel.m,其結果為:
0.9992
1.0125
0.9590
1.0306
1.0267
0.9715
迭代次數為2016
sor 超級鬆弛法程式在sor.m 中,w選擇為1.89其結果為:
0.9991
1.0180
0.9136
1.1586
0.8800
1.0304
迭代次數為517次。
主程式如下。
%% 實驗6.1
% 實驗6.1(病態的線性方程組的求解)
clc;clear;close all;
n=6; % 矩陣維數
計算方法實驗三解線性方程組的迭代法
實驗三解線性方程組的迭代法 1 雅可比迭代法 1 實驗程式 實現雅可比迭代法的matlab函式檔案agui 在matlab命令視窗輸入及實驗結果和操作介面 2 高斯 賽德爾迭代法 1 實驗程式 實現高斯 賽德爾迭代法的matlab函式檔案agui 在matlab命令視窗輸入及實驗結果和操作介面結果分...
養老金計算方法與公式
養老保險待遇計算公式 月基本養老金 基礎養老金 個人賬戶養老金 其中基礎養老金 全省上年度在崗職工月平均工資 本人指數化月平均繳費工資 2 繳費年限 1 全省上年度在崗職工月平均工資 1 本人平均繳費指數 2 繳費年限 1 本人平均繳費工資指數 a1 al a2 az an an n 公式中,a1 ...
2019《計算方法》試題A卷與答案
2009 2010學年第二學期 計算方法 課程考試試卷 a卷 閉卷 院 系專業班級學號姓名 考試日期 2010年05月20日考試時間 19 00 21 30 一 填空 每空2分,共30分 1 已知e 2.71828 則近似值x1 2.718相對e有 4 位有效數字,近似值x2 0.027182相對有...