好文档 - 专业文书写作范文服务资料分享网站

雅可比迭代法与矩阵的特征值

天下 分享 时间: 加入收藏 我要投稿 点赞

? 迭代法

雅可比迭代法

算法:设方程组Ax=b系数矩阵的对角线元素aii?0(i?1,2,?,n),M为迭代次数容许的最大值,ε为容许误差。

①取初始向量x=(x1,x2,?,xn),令k=0。 ②对i=1,2,…,n 计算

n1)?(bi??aijx(kj) aiij?1j?i(0)(0)(0)Tx(k?1)i③如果

?xi?1n(k?1)i?xi(k)??,则输出x(k?1),结束;否则执行④。

④如果k≥M,则不收敛,终止程序;否则k?k?1,转②。 程序与实例

例4 用雅可比迭代法解方程组

?5x1?2x2?x3?8??2x1?8x2?3x3?21 ?x?3x?6x?123?1结果为

迭代次数为20 X[0]= 1.000000 X[1]= 2.000000 X[2]=-1.000000

#include #include using namespace std;

double** newMatrix(int row,int col){

double **p=new double* [row]; //行 for(int i=0;i

void delMatrix(double** p,int row){ for(int i=0;i

void inputMatrix(double** p,int row,int col){ for(int i=0;i

cout<<\输入第\行:\ for(int j=0;j>p[i][j]; } }

void dispMatrix(double** p,int row,int col){ for(int i=0;i

void dispVector(double* q,int n){ for(int i=0;i

cout<<\ cout<

double sumRow(double** A,double* x1,int row,int col){ double sum=0;

for(int i=0;i

sum+=(A[row][i]*x1[i]); }

return sum; }

void iterat(double** A,double* b,double* x1,double* x2,int row){ for(int i=0;i

x2[i]=(b[i]-sumRow(A,x1,i,row))/A[i][i]; }

bool blow_error(double* x1,double* x2,int row,double e){ double sum=0;

for(int i=0;i

if(sum

int main() {

cout<<\输入方阵大小 n :\ int n=0; cin>>n;

cout<<\ cout<<\开始录入方阵数据.....\

double** A=newMatrix(n,n); //开辟矩阵A

inputMatrix(A,n,n); //录入数据到A中 cout<<\录入方阵数据完毕......\

cout<<\

cout<<\开始录入列阵.....\ cout<<\输入列阵:\

double* b=new double[n]; //开辟向量b for(int i=0;i

cin>>b[i]; //录入数据到b中 cout<<\录入列阵数据完毕.....\

cout<<\ cout<<\输入迭代次数容许的最大值:\ int M=0; cin>>M;

cout<<\输入容许误差:\ double e=0; cin>>e;

cout<<\

double* x1=new double[n]; //开辟x1向量 double* x2=new double[n]; //开辟x2向量

cout<<\输入初始向量:\ for(int i=0;i>x1[i];

cout<<\

int k=0; //迭代计数器 for(;;){

iterat(A,b,x1,x2,n); //迭代一次 if(blow_error(x1,x2,n,e)){ dispVector(x2,n);

cout<<\迭代次数为:\ return 0; }else{

if(k>=M){

cout<<\不收敛\ return 0; }else{ k++;

for(int i=0;i

//释放空间 delMatrix(A,n); delete[] b; delete[] x1; delete[] x2; }

? 高斯-塞尔德迭代法

算法:设方程组Ax=b的系数矩阵的对角线元素,aii?0(i?1,2,?,n),M为迭代次数容许的最大值,ε为容许误差

(0)(0)(0)T①取初始向量x?(x1,x2,?,xn),令k=0。

②对i=1,2,…,n计算

x(k?1)ii?11?(bi??aijx(jk?1)?aiij?1j?i?1?anijx(jk))

③如果

?xi?1n(k?1)i?xi(k)??,则输出x(k?1),结束;否则执行④。

④如果k?M,则不收敛,终止程序;否则k?k?1,转②。 程序与实例

例5 用高斯-塞尔德迭代法解方程组

?8x1?3x2?2x3?20??4x1?11x2?x3?33 ?6x?3x?12x?3623?1

雅可比迭代法与矩阵的特征值

?迭代法雅可比迭代法算法:设方程组Ax=b系数矩阵的对角线元素aii?0(i?1,2,?,n),M为迭代次数容许的最大值,ε为容许误差。①取初始向量x=(x1,x2,?,xn),令k=0。②对i=1,2,…,n计算n1)?(bi??aijx(kj)aiij?1j?i(0)(0)(0)Tx(k?1)i③如果
推荐度:
点击下载文档文档为doc格式
455lx32yv60a6ri16ozy38gut0xsx2013pp
领取福利

微信扫码领取福利

微信扫码分享