雅可比迭代法与矩阵的特征值Word下载.docx

上传人:b****5 文档编号:20581135 上传时间:2023-01-24 格式:DOCX 页数:21 大小:263.41KB
下载 相关 举报
雅可比迭代法与矩阵的特征值Word下载.docx_第1页
第1页 / 共21页
雅可比迭代法与矩阵的特征值Word下载.docx_第2页
第2页 / 共21页
雅可比迭代法与矩阵的特征值Word下载.docx_第3页
第3页 / 共21页
雅可比迭代法与矩阵的特征值Word下载.docx_第4页
第4页 / 共21页
雅可比迭代法与矩阵的特征值Word下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

雅可比迭代法与矩阵的特征值Word下载.docx

《雅可比迭代法与矩阵的特征值Word下载.docx》由会员分享,可在线阅读,更多相关《雅可比迭代法与矩阵的特征值Word下载.docx(21页珍藏版)》请在冰豆网上搜索。

雅可比迭代法与矩阵的特征值Word下载.docx

①若

否则执行②。

对i=n-1,┅,2,1,计算

程序与实例

程序设计如下:

#include<

iostream>

cmath>

usingnamespacestd;

voiddisp(double**p,introw,intcol){

for(inti=0;

i<

row;

i++){

for(intj=0;

j<

col;

j++)

cout<

<

p[i][j]<

'

'

;

endl;

}

}

voiddisp(double*q,intn){

"

====================================="

n;

i++)

X["

i+1<

]="

q[i]<

voidinput(double**p,introw,intcol){

输入第"

行:

cin>

>

p[i][j];

intfindMax(double**p,intstart,intend){

intmax=start;

for(inti=start;

end;

if(abs(p[i][start])>

abs(p[max][start]))

max=i;

returnmax;

voidswapRow(double**p,intone,intother,intcol){

doubletemp=0;

temp=p[one][i];

p[one][i]=p[other][i];

p[other][i]=temp;

booldispel(double**p,introw,intcol){

intflag=findMax(p,i,row);

用列主元消去法解方程

例2解方程组

计算结果如下

B=

C=

D=

E=

F=

矩阵直接三角分解法

将方程组Ax=b中的A分解为A=LU,其中L为单位下三角矩阵,U为上三角矩阵,则方程组Ax=b化为解2个方程组Ly=b,Ux=y,具体算法如下:

①对j=1,2,3,…,n计算

对i=2,3,…,n计算

②对k=1,2,3,…,n:

a.对j=k,k+1,…,n计算

b.对i=k+1,k+2,…,n计算

,对k=2,3,…,n计算

对k=n-1,n-2,…,2,1计算

注:

由于计算u的公式于计算y的公式形式上一样,故可直接对增广矩阵

[A∣b]=

施行算法②,③,此时U的第n+1列元素即为y。

例3求解方程组Ax=b

A=

b=

结果为

X[0]=

X[1]=

X[2]=

X[3]=

double**newMatrix(introw,intcol){

double**p=newdouble*[row];

..."

double**A=newMatrix(n,n);

...."

endl<

开始录入列阵....."

输入列阵:

double*b=newdouble[n];

double**L=newMatrix(n,n);

..."

输入迭代次数容许的最大值:

intM=0;

M;

输入容许误差:

doublee=0;

e;

double*x1=newdouble[n];

//开辟x1向量

double*x2=newdouble[n];

//开辟x2向量

输入初始向量:

x1[i];

intk=0;

//迭代计数器

for(;

){

iterat(A,b,x1,x2,n);

//迭代一次

if(blow_error(x1,x2,n,e)){

dispVector(x2,n);

迭代次数为:

k<

return0;

}else{

if(k>

=M){

不收敛"

k++;

x1[i]=x2[i];

//释放空间

delMatrix(A,n);

delete[]b;

delete[]x1;

delete[]x2;

高斯-塞尔德迭代法

算法:

设方程组Ax=b的系数矩阵的对角线元素,

M为迭代次数容许的最大值,ε为容许误差

①取初始向量

令k=0。

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

,则输出

结束;

否则执行④。

④如果

则不收敛,终止程序;

否则

转②。

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

X[0]=

X[2]=

#defineN100

main()

{

inti;

float*x;

floatc[12]={,,,,

,,,

,,};

float*GauseSeidel(float*,int);

x=GauseSeidel(c,3);

for(i=0;

=2;

i++)printf("

x[%d]=%f\n"

i,x[i]);

getch();

float*GauseSeidel(float*a,intn)

inti,j,nu=0;

float*x,dx,d;

x=(float*)malloc(n*sizeof(float));

=n-1;

i++)x[i]=;

do

{

for(i=0;

{

d=;

for(j=0;

d+=*(a+i*(n+1)+j)*x[j];

dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));

x[i]+=dx;

}

if(nu>

=N)

printf("

foldnumber\n"

);

nu++;

while(fabs(dx)>

1e-6);

returnx;

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

迭代4次得解

若用高斯-塞尔德迭代法则发散。

#include<

voidmain(void)

intk,n;

doublex[3]={7,2,5};

for(k=0;

5;

k++)

doublea,b;

a=x[0];

b=x[1];

x[0]=*x[1]+2*x[2])/1;

x[1]=(2-a-x[2])/1;

x[2]=(5-2*a-2*b)/1;

for(n=0;

n<

3;

n++)

printf("

x[%d]=%\n"

n,x[n]);

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

迭代84次得解

,若用雅克比迭代法则发散。

voidLOOP(floata[10][10],floatb[10],floatx[10],int);

voidmain(void)

floata[10][10],b[10],x[10],A[10];

doubleS;

intM,n,i,j;

printf("

请输入方阵阶数:

scanf("

%d"

&

n);

请输入最大允许迭代次数:

M);

请按行输入各方程系数:

for(i=0;

for(j=0;

scanf("

%f"

a[i][j]);

请输入各方程值:

scanf("

b[i]);

请依次输入首次迭代x值:

x[i]);

S=;

for(i=0;

A[i]=x[i];

LOOP(a,b,x,n);

M--;

S=S+fabs(x[i]-A[i]);

}while(M>

=0&

&

S>

=;

if(M>

=0)

迭代次数M=%d\n"

M);

else

该迭代发散\n"

voidLOOP(floata[10][10],floatb[10],floatx[10],intn)

floatS1,S2,A[10];

inti,j;

A[i]=x[i];

S1=;

S2=;

=i-1;

S1=S1+a[i][j]*x[j];

for(j=i+1;

S2=S2+a[i][j]*A[j];

x[i]=(b[i]-S1-S2)/a[i][i];

实验六

矩阵的特征值与特征向量的计算

实验六矩阵的特征值与特征向量的计算

领会求矩阵特征值及特征向量的幂法的理论及其方法;

会编制幂法的计算程序,并用来计算有关问题。

编制幂法的计算程序,并用来计算有关问题

三、算法概要

幂法是矩阵主特征值的一种迭代方法。

设A

R

有n个线性无关的特征向量x

,x

,x

而相应的特征值满足

则对任意非零初始向量

用幂法求矩阵

的按模最大的特征值和相应的特征向量。

精确至6位有效数字。

结果为A按模取最大的特征值为;

相应的特征向量为

voidLOOP(floata[5][5],floatu[5],int);

floatMAX(floatu[5],int);

floata[5][5],u[5],x[5],y,z;

inti,j,n;

请按行输入各矩阵元素值:

请输入初次迭代向量:

u[i]);

y=MAX(u,n);

z=y;

LOOP(a,u,n);

y=MAX(u,n);

x[i]=u[i]/y;

u[i]=x[i];

}while(fabs(z-y)>

矩阵特征值λ=%f\n"

y);

矩阵特征向量x:

\n"

%10f\n"

x[i]);

voidLOOP(floata[5][5],floatu[5],intn)

floatS,U[5];

U[i]=u[i];

S=S+a[i][j]*U[j];

u[i]=S;

floatMAX(floatu[5],intn)

floatmax;

max=u[0];

if(u[i]>

max)

max=u[i];

return(max);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1