您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 东南大学-数值分析--第三章高斯消元-VB编程
第三章(vb编程)39、列主元高斯消去法(1)通用程序:PublicFunctionguass(nAsInteger,a()AsSingle,b()AsSingle,x()AsSingle)DimiAsInteger,jAsInteger,kAsIntegerDimamaxAsSingle,imaxAsInteger,sAsSingleDimmAsSingle,tAsSingle,mmAsSingleForj=1To(n-1)amax=Abs(a(j,j))imax=j'比较对应于主元所在列中的各行数的绝对值大小Fori=j+1TonIf(Abs(a(i,j))amax)Thenamax=Abs(a(i,j))imax=iEndIfNexti'比较完毕'将在主元所在列中绝对值比主元大的数对应的行与主元所在行互换If(imaxj)ThenFork=jTont=a(imax,k)a(imax,k)=a(j,k)a(j,k)=tNextkbmax=b(imax)b(imax)=b(j)b(j)=bmaxEndIf'互换完毕'消去对应主元所在列的元Fori=j+1Tont=1#/a(j,j)t=t*a(i,j)Fork=jTona(i,k)=a(i,k)-a(j,k)*tNextkb(i)=b(i)-b(j)*tNexti'消元完毕Nextj'判断是否有等价方程,如果有则显示“无穷多解”Fori=1Tonm=0mm=0Forj=iTonm=m+a(i,j)mm=mm-a(i,j)NextjIf(m0.000001Andmm0.000001)ThenMsgBox无穷多解EndEndIfNexti'判断完毕'回代,求解xx(n)=b(n)/a(n,n)Fori=n-1To1Step-1m=0Forj=nToi+1Step-1m=m+a(i,j)*x(j)Nextjx(i)=(b(i)-m)/a(i,i)Nexti'求解x完毕EndFunctionPrivateSubCommand2_Click()EndEndSubPrivateSubCommand1_Click()Dims()AsSingle,x()AsSingleDima()AsSingle,b()AsSingleDimiAsInteger,jAsInteger,kAsIntegerDimamaxAsSingle,imaxAsIntegerDimmAsSingle,nAsInteger,cAsSingleDimpAsStringIfText1.Text=ThenMsgBox(请输入系数矩阵的阶数)Else:again:n=Val(Text1.Text)ReDima(n,n)AsSingleReDimb(n)AsSingle,x(n)AsSingle'输入并在相应图框中输出系数矩阵a(i,j)Fori=1TonForj=1Tona(i,j)=Val(InputBox(系数矩阵a(&i&&j&)数值:,输入框))Picture1.Printa(i,j);vbTab;;NextjPicture1.PrintChr(13)Nexti'系数矩阵a(i,j)读入完毕'输入并在相应图框中输出矩阵b(j)Fori=1Tonb(i)=Val(InputBox(列向量b(&i&)数值:,输入框))Picture2.Printb(i);;Picture2.PrintChr(13)Nexti'矩阵b(j)读入完毕Callguass(n,a,b,x)'调用求解函数'输出计算结果Forj=1Tonp=x(&Str(j)&)=&Format(Str(x(j)),#0.0000)Picture3.Printp;;Picture3.PrintChr(13)Nextj'计算结果输出完毕OnErrorGoToagain:EndIfEndSubPrivateSubCommand3_Click()Picture1.Cls:Picture2.Cls:Picture3.Cls:Text1.Text=EndSub(2)(3)通过本上机题,学会了用vb来输入矩阵,以及计算方程式。另外,对列主元高斯消元法有了更深刻认识。
本文标题:东南大学-数值分析--第三章高斯消元-VB编程
链接地址:https://www.777doc.com/doc-8506689 .html