實驗報告3:解線性方程組的迭代法
姓名:杜娟學號:08012324 班級:勘查08-3班
一. 上機題目
用jacobi迭代法和高斯—賽德爾迭代法解線性方程組
二. 目的要求
掌握用jacobi迭代法和高斯—賽德爾迭代法設計程式,從而實現解線性方程組。
三.方法原理
解線性方程組的迭代法是將線性方程組 ax=b 化為等價線性方程組
x=bx+f
再由矩陣迭代格式
x(k+1)=bx (k)+f
構造向量序列來求線性方程組解的。如果得出的向量序列收斂至某個向量x*,則可得該向量x*就是所求方程組 ax=b 的準確解.
四.演算法步驟
jacobi迭代演算法
1.輸入變數個數n、初值向量x(0)、迭代精度eps、係數矩陣a、常數項b 和迭代最大次數nmax
2 for i=1,2,…,n
2.1 如果|aii|3. bj e-d-1a
4. gj d-1b
k=1,2,…,nmax
5.1 x gj
5.2 如果||x-x0||6. 如果||x-x0||>eps ,輸出迭代失敗,終止。
高斯—賽德爾迭代法
1.輸入變數個數n、初值向量x(0)、迭代精度eps、係數矩陣a、常數項b 和迭代最大次數nmax
2. for i=1,2,…,n
2.1 如果|aii| i=1,2,…,nmax
3.1 for i=1,2,…,n
3.2 如果||x(k+1)-x(k)||4. 如果||x-x0||五.c語言程式及變數說明
//jacobi迭代法演算法
#include <>
#include <>
#define row 3
void read_a(float a[row])
}void read_b(float b)
void read_x0(float x0)
float max_e(float x0,float x1)
return e;
}void print_x1(float x,int k)
void main()
print_x1(x1,k);
e1=max_e(x1,x0);
for(i=0;i x0[i]=x1[i];
k++;
}while(e1>e&&k if(k>=n)
cout<<"迭代失敗!"<}
// 高斯—賽德爾迭代法
#include<>
#include<>
double f(double a[20],double x,int i,int n)
return sum;
}double max(double norm,double y,double x)
void main()
do}while(norm>e);
printf("迭代次數是%d \n",k);
printf("方程組的解是\n");
for(i=0;iprintf("%lf ",x[i]);
}六.執行結果及分析
說明本程式用於求線性方程組ax=b的解。程式執行後,先通過鍵盤輸入線性方程組階數n、係數矩陣a、常數項b、迭代初值向量x0和輸入精度控制eps,程式即可給出每次迭代的次數和對應的迭代向量序列x(k),其中最後輸出的結果即為所求的根。如果迭代超出20次還沒有求出滿足精度的根則輸出迭代失敗提示,如果出現主對角線元素aii=0給出jacobi迭代法失效提示。
說明本程式用於求線性方程組ax=b的解。程式執行後,先通過鍵盤輸入線性方程組階數n、係數矩陣a、常數項b和輸入精度控制eps,最後輸出的結果即為所求的根。如果迭代超出20次還沒有求出滿足精度的根則輸出迭代失敗提示.
七.程式分析
高斯—賽德爾迭代法迭代次數是7次,jacobi迭代法迭代次數是11次,這說明高斯—賽德爾迭代法計算量要比jacobi迭代法少。
《計算方法》實驗報告
專業及班級姓名 學號日期 請務必將結果寫在答題區域 一 方程求根 15分 1.用牛頓迭代法求解下列方程的正根 2.先用 法確定初始點,然後再求方程的所有根。求得的根的結果 二 線性方程組 15分 1 計算下列矩陣的逆矩陣,並驗證之。2.用兩種方法求解下列線性方程組 1 呼叫 x a b 命令 2 利...
計算方法上機實驗報告
數值計算上機實驗 設計題一 實驗名稱 euler方法與改進的euler方法 小組成員及題號 1.洪媛媛2.陳昌利3.梁靜 4.王鑫 5.萬小倩6.沈杰 7.歐榮軍 8.蔣文燕 實驗報告 一 實驗問題 求初值問題的數值解。要求 1 用euler方法和改進的euler方法求常微分方程數值解,取h 0.0...
數值計算方法實驗報告jrh
一 實驗的性質 目的和任務 本實驗是與本專業基礎課 數值計算方法 相配套的,旨在鞏固專業課內容和學生程式設計的能力。通過實驗加強對數值方法的理解和掌握,編制出適用的程式。同時,在理論教學的基礎上,注意方法處理的技巧及其與計算機的結合,其次要通過例子,學習使用各種數值方法解決實際計算問題。要求學生應用...