程序设计实验报告文档格式.docx
- 文档编号:17567664
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:15
- 大小:19.43KB
程序设计实验报告文档格式.docx
《程序设计实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《程序设计实验报告文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
3)数据文件的建立、数据的读取与写入。
实验步骤:
1.编辑界面
打开VB编程工具,进入编程主界面。
在窗体上新建“读入数据”和“输出数据”两个按钮。
双击“窗体”进入代码输入界面,进行代码编辑。
2.用VB编写的源代码
矩阵基本运算源码详见附录一。
(1)两矩阵相加
(2)两矩阵相减
(3)矩阵转置
(4)两矩阵相乘
(5)矩阵求逆
文本文件(本实验中的读取源代码
(1)建立文本文件并输入数据
在桌面上新建一“”(文本文件路径为C:
\Users\WH\Desktop\练习\”)。
输入以下内容:
6,7,4,
A,
B,
C,
D,
(2)从文本文件中读数据
Dimlinedataasstring,m_GaochaNasinteger,m_Pnumberas
integer,m_knPnumberasinteger,MasDouble,k1asinteger
'
linedata为存储文本文件一行信息的字符串变量
Dima()asString,H()asDouble
a()为存储点名,H()存储高程
Open“C:
\Users\WH\Desktop\练习\”ForInputAs#1
LineInput#1,linedata
k=Split(linedata,"
"
)
m_GaochaN=Val(k(0))
m_Pnumber=Val(k
(1))
m_knPnumber=Val(k
(2))
M=CDbl(k(3))
Fork1=1Tom_knPnumber
a(k1)=k(0)
GetstationNumber(a)
H(k1)=CDbl(k
(1))
Next
Close#1
(3)将读入点名存储到点名数组中,且返回该点名所对应编号
FunctionGetstationNumber(nameAsString)
DimiAsInteger
Fori=1Tom_Pnumber
IfP_Name(i)<
>
"
"
Then
将待查点名与已经存入点名数组的点比较
IfP_Name(i)=nameThen
GetstationNumber=i
ExitFor
EndIf
Else'
待查点是新的点名,将新点名放到P_Name数组中
P_Name(i)=name
Nexti
EndFunction
(4)从文本文件中写数据(将从读入的数据,写入到文件中)
\Users\WH\Desktop\练习\”ForOutputAs#1
outstring=outstring+str(m_GaochaN)+"
outstring=outstring+str(m_Pnumber)+"
outstring=outstring+str(m_knPnumber)+"
outstring=outstring+str(M)+vbCrLf
outstring=outstring+a(k1)+"
+Format(H(k1),"
##"
)+
vbCrLf
Print#1,outstring
实验2水准网平差程序设计
通过本次实验的练习,使学生掌握水准网平差中近似高程计算算法、组成误差方程系数阵B、组成误差方程常数项L及权阵生成算法。
掌握法方程的组建参数改正值的计算以及单位权中误差的计算。
掌握水准网平差中输出高程平差值和高程中误差、输出观测值及其改正数与平差值等信息并保存为平差成果文件的方法。
1)在读入水准网数据后,进行待定点近似坐标的计算;
2)基于间接平差的思想,以观测的测段高差为观测值,组成误差方程系数矩阵B及常数项矩阵L;
3)基于水准网平差中定权的方法(测段长或测站数定权),生成权阵P。
4)利用矩阵的基本运算(调用矩阵运算函数即可)得到法方程系数矩阵及常数项矩阵。
该实验的内容其实质就是调用矩阵运算函数。
5)熟悉VB中输出函数Print的用法,及控制输出格式的函数的用法,如Space()、String()
6)水准网平差结束后,将变量及数组中的数据输出到平差结果文件中。
1.读入水准网数据
\Users\WH\Desktop\练习1\”)。
10,7,2,
A,
F,
A,B,,
A,D,,
A,G,,
C,B,,
D,B,,
C,D,,
C,E,,
F,E,,
G,E,,
D,G,,
\Users\WH\Desktop\练习1\”)。
PrivateSubCommand1_Click()
(2)读入水准网数据
Open"
C:
\Users\WH\Desktop\练习1\"
ForInputAs#1
LineInput#1,linedata
k=Split(linedata,"
m_GaochaN=Val(k(0))
m_Pnumber=Val(k
(1))
m_knPnumber=Val(k
(2))
M=CDbl(k(3))
ReDimA(1Tom_knPnumber),H(1Tom_knPnumber)
A(k1)=k(0)
H(k1)=CDbl(k
(1))
ReDimStartP(1Tom_GaochaN),EndP(1Tom_GaochaN),gaocha(1Tom_GaochaN),Li(1Tom_GaochaN)
Fork2=1Tom_GaochaN
StartP(k2)=k(0)
EndP(k2)=k
(1)
gaocha(k2)=CDbl(k
(2))
Li(k2)=CDbl(k(3))
EndSub
2.编辑界面
打开VB编程工具,进入编程主界面。
在窗体上利用控件新建“载入数据”、“开始计算”、“导出结果”、“清空”四个按钮和一个文本框。
3.定义相应变量、数组和实现各功能的函数(过程)详见附录二
(1)水准网中近似坐标计算
(2)生成误差方程系数矩阵B及常数项矩阵L
(3)生成权阵P
(4)残差及中误差计算函数
(5)组成法方程及平差计算
(6)平差结果输出
附件1矩阵基本运算源码
PrivateFunctionMsum(MAsInteger,nAsInteger,Matrixsum()AsDouble,Matrix1()AsDouble,Matrix2()AsDouble)'
矩阵求和函数
Dimi1AsInteger,i2AsInteger
ReDimMatrixsum(1ToM,1Ton)
Fori1=1ToM
Fori2=1Ton
Matrixsum(i1,i2)=Matrix1(i1,i2)+Matrix2(i1,i2)
Nexti2
Nexti1
FunctionMminus(MAsInteger,nAsInteger,MatrixMinus()As
Double,Matrix1()AsDouble,Matrix2()AsDouble)'
矩阵求差函数
ReDimMatrixMinus(1ToM,1Ton)
MatrixMinus(i1,i2)=Matrix1(i1,i2)-Matrix2(i1,i2)
FunctionMchange(MAsInteger,nAsInteger,Matrixchange()AsDouble,Matrix1()AsDouble)
矩阵转置函数Matrix1()需转置的矩阵,Matrixchange()为转置后的矩阵
ReDimMatrixchange(1Ton,1ToM)'
动态分配用来存储转置后的矩阵
Matrixchange(i2,i1)=Matrix1(i1,i2)
矩阵相乘函数,MatrixMultiply()为存储AB后的矩阵,Matrix1()为A矩阵,Matrix2()为B矩阵,注意矩阵相乘的顺序
Mi为行,Ni为列,i=1,2
FunctionMmultiply(M1AsInteger,n1AsInteger,M2AsInteger,
n2AsInteger,MatrixMultiply()AsDouble,Matrix1()AsDouble,
Matrix2()AsDouble)
Dimi1AsInteger,i2AsInteger,i3AsInteger
Ifn1<
M2Then
MsgBox"
两矩阵不能相乘,请检查!
vbOKCancel+vbCritical+vbDefaultButton1
ExitFunction
ReDimMatrixMultiply(1ToM1,1Ton2)
Fori1=1ToM1
Fori2=1Ton2
MatrixMultiply(i1,i2)=0
Fori3=1Ton1
MatrixMultiply(i1,i2)=MatrixMultiply(i1,i2)+
Matrix1(i1,i3)*Matrix2(i3,i2)
Nexti3
FunctionMRinv(nAsInteger,mtxA()AsDouble)AsBoolean
功能:
实矩阵求逆的全选主元高斯-约当法
参数:
n-Integer型变量,矩阵的阶数
mtxA-Double型二维数组,体积为nxn。
存放原矩阵A;
返回时存放其逆矩阵A-1。
返回值:
Boolean型,失败为False,成功为True
ReDimnIs(n)AsInteger,nJs(n)AsInteger
DimiAsInteger,jAsInteger,kAsInteger
DimDAsDouble,PAsDouble
全选主元,消元
Fork=1Ton
D=0#
Fori=kTon
Forj=kTon
P=Abs(mtxA(i,j))
If(P>
D)Then
D=P
nIs(k)=i
nJs(k)=j
Nextj
求解失败
If(D+1#=1#)Then
MRinv=False
If(nIs(k)<
k)Then
Forj=1Ton
P=mtxA(k,j)
mtxA(k,j)=mtxA(nIs(k),j)
mtxA(nIs(k),j)=P
If(nJs(k)<
Fori=1Ton
P=mtxA(i,k)
mtxA(i,k)=mtxA(i,nJs(k))
mtxA(i,nJs(k))=P
mtxA(k,k)=1#/mtxA(k,k)
If(j<
k)ThenmtxA(k,j)=mtxA(k,j)*mtxA(k,k)
If(i<
k)ThenmtxA(i,j)=mtxA(i,j)-mtxA(i,k)*
mtxA(k,j)
k)ThenmtxA(i,k)=-mtxA(i,k)*mtxA(k,k)
Nextk
调整恢复行列次序
Fork=nTo1Step-1
mtxA(k,j)=mtxA(nJs(k),j)
mtxA(nJs(k),j)=P
mtxA(i,k)=mtxA(i,nIs(k))
mtxA(i,nIs(k))=P
求解成功
MRinv=True
附件2水准网平差程序计算源码
Subca_H()'
水准网中待定点近似高程计算
Dimk1AsInteger,H_NAsInteger'
H_N为计算出近似高程点个数
Dimc1AsInteger,c2AsInteger
H_N=0
DoWhileH_N<
(m_Pnumber-m_knPnumber)
Fork1=1Tom_GaochaN
c1=StartP(k1)'
观测高差起点
c2=EndP(k1)'
观测高差终点
IfH(c1)=0AndH(c2)<
0Then
H(c1)=H(c2)-gaocha(k1)
H_N=H_N+1
IfH(c1)<
0AndH(c2)=0Then
H(c2)=H(c1)+gaocha(k1)
Loop
SubGouJianBL(H()AsDouble,StartP()AsInteger,EndP()As
Integer)'
构建误差方程系数矩阵B与L
H()为近似高程数组,StatP()为起点点号数组,EndP()为终点点号数组
Dimk1AsInteger,k2AsInteger,k3AsInteger,c1AsInteger,c2
AsInteger
Fork2=1To(m_Pnumber-m_knPnumber)
B(k1,k2)=0
Ifc1>
m_knPnumberAndc2>
m_knPnumberThen
B(k1,c2-m_knPnumber)=1
B(k1,c1-m_knPnumber)=-1
m_knPnumberAndc2<
=m_knPnumberThen
Ifc1<
=m_knPnumberAndc2>
L(k1,1)=gaocha(k1)-(H(c2)-H(c1))
SubgoujianP()'
构建P
Dimk1AsInteger,k2AsInteger
P(k1,k2)=0
IfLi(k1)=0Then
MsgBox(第+Str(k1)+"
测段长为0!
Ifk1=k2Then
P(k1,k2)=1/Sqr(Li(k1))
Subca_V()'
残差计算
Dimk1AsInteger,vvAsDouble,c1AsInteger,c2AsInteger
p_vv=0
c1=StartP(k1)
c2=EndP(k1)
vv=H(c2)-H(c1)-gaocha(k1)
v(k1,1)=vv
p_vv=p_vv+P(k1,k1)*vv*vv
m_mu=Sqr(p_vv/(m_GaochaN-(m_Pnumber-
m_knPnumber)))
PrivateSubCommand2_Click()'
平差计算及结果输出按钮
ca_H
GouJianBLH,StartP,EndP
goujianP
Mchangem_GaochaN,m_Pnumber-m_knPnumber,Matrixchange,
B'
B转置的计算
Mmultiply(m_Pnumber-m_knPnumber),m_GaochaN,
m_GaochaN,m_GaochaN,MatrixMultiply,Matrixchange,P
m_GaochaN,(m_Pnumber-m_knPnumber),Q,MatrixMultiply,B
MRinv(m_Pnumber-m_knPnumber),MatrixMultiply1
MRinv(m_Pnumber-m_knPnumber),Q
Mmultiply(m_Pnumber-m_knPnumber),(m_Pnumber-
m_knPnumber),(m_Pnumber-m_knPnumber),m_GaochaN,
MatrixMultiply2,Q,Matrixchange
m_GaochaN,m_GaochaN,MatrixMultiply3,MatrixMultiply2,P
m_GaochaN,1,dx,MatrixMultiply3,L
ca_V
PrintResult
SubPrintResult()'
平差结果输出
DimoutstringAsString'
存储保存的信息
DimqiiAsDouble,qjjAsDouble,qijAsDouble'
存储法方程系数矩阵对交线上元素
Dimk1AsInteger,c1AsInteger,c2AsInteger,mlAsDouble
ml存储观测高程中误差,m_mu单位权中误差
="
AllFiles(*.*)|*.*|TextFiles(*.txt)|*.txt|BatchFiles(*.bat)|*.bat"
If<
*.txt"
And
<
OpenForOutputAs#1
outstring=Space(10)&
String(4,"
="
)+"
高程平差值及其精度"
+String(4,"
)+vbCrLf
Print#1,"
点名近似高程改正数高程平差值中误差"
+vbCrLf
outstring="
Fork1=1Tom_Pnumber-m_knPnumber
outstrin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)