- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
原理是用方程 h=b0+b1*x+b2*y+b3*x*x+b4*y*y+b5*x*y 来表达曲面,h指的是高程异常值,比如WGS84到bj54的高程差,然后根据6或者6个以上的公共点求出b0,b1……b5,然后如果要求某点的高程值,输入它的x,y就可以得到高程异常值h,然后利用WGS84的BLH中的H加上高程异常值就可以得到54的高程.
这个程序经过2011年01月上旬的实战精度比较高,不过存在一个弱点,就是如果北坐标比较大,如2333444.555,应该先人为的去掉最高位,这样矩阵运算才不会出异常。这是因为矩阵运算的算法不够完善。有空再解决它。
Code By Kiseigo 2011.01.06
Option Explicit
Private Sub cmdCalc_Click()
Dim matA() As Double
Dim matB() As Double
ReDim matA(6, 5) As Double 7个已知点
ReDim matB(6, 0) As Double
Call SetKnownValueAB(matA, matB)
Dim arrPara() As Double b0,b1,b2……b6这6个参数
Call CalcB0toB6(matA, matB, arrPara) 计算b0,b1,b2……b6这6个参数
Dim Hout As Double
Hout = calcHfit(11, 3, arrPara) 计算某位置的高程,这里刚好取已知点来验算
FrmMain.Caption = Format(Hout, 0.000) 结果得93.7,说明结果正确
End Sub
求高程拟合(二次曲面拟合)的参数B0,B1,B2,B3,B4,B5,B6 By Kiseigo 2011.01.06 21:53 Helped by BluePan
输入matA(5,5) 最少6行,也就是最少6个已知高程点
输入matB(5, 0) 最少6个点,这里是高程值,matB(0)是第一个点
输出:B0toB6Out, 下标从0取起,一维数组,下标0-5
Public Function CalcB0toB6(matA() As Double, matB() As Double, B0toB6Out() As Double)
假设方程是 h=b0+b1*x+b2*y+b3*x*x+b4*y*y+b5*x*y; 方程由BluePan提供
Dim maxPt As Integer 公共点个数,要求=6个.6表示6个点。
maxPt = UBound(matA, 1) + 1
步骤1:加1空行,加1空列.因为矩阵运算是从1开始,麻烦
Call RedimMatrisAFrom1Nor0(matA)
Call RedimMatrisAFrom1Nor0(matB)
步骤2:计算 AT * A 矩阵
Dim matAT() As Double A的转置矩阵
ReDim matAT(UBound(matA, 2), UBound(matA, 1))
Call MTrans(UBound(matAT, 1), UBound(matAT, 2), matA, matAT) 求A的转置矩阵
Dim ATA() As Double A的转置*A
ReDim ATA(UBound(matAT, 1), UBound(matA, 2)) 方阵
Call MMul(UBound(matAT, 1), UBound(matAT, 2), UBound(matA, 2), matAT, matA, ATA) 计算ATA(A的转置*A )
步骤3:计算(A的转置*A) 的逆矩阵
Dim ATAinv() As Double A的转置*A 的逆矩阵
ReDim ATAinv(UBound(ATA, 1), UBound(ATA, 2))
Dim i As Integer
Dim j As Integer
For i = 0 To UBound(ATA, 1)
For j = 0 To UBound(ATA, 2)
ATAinv(i, j) = ATA(i, j)
Next j
Next i
Call MRinv(UBound(ATAinv), ATAinv) 输出ATAinv
您可能关注的文档
- (精选)迈达斯教程及使用手册.doc
- 《松下电器高清及4K最新技术》.ppt
- 《液化天然气(LNG)储运设备的设计》.ppt
- 30米预应力砼T梁预制与安装施工方案.doc
- 220千伏山海变电站土建工程内承重支模板方案.doc
- 3801工作面回采作业规程(修改).doc
- tekla建模出图常用方法.doc
- XXX外架施工方案.doc
- 安装工程造价实验.ppt
- 巴彦淖尔市用户工程10KV三芯电缆技术规范.doc
- 师缘主题课件最新完整版本.pptx
- 基于偏好MOEA_D算法的气发动机多目标优化标定研究.pdf
- 师范技能课件比赛一等奖最新完整版本.pptx
- 师范生初中美术说课课件最新完整版本.pptx
- 师范技能课件图片素材库最新完整版本.pptx
- Unit 2 Making a Difference Understanding ideas The Well that changed the world 教学设计-高中英语外研版(2019)必修第三册.docx
- 师范生技能大赛PPT课件语文最新完整版本.pptx
- 基于扭矩的双燃料发动机控制策略研究.pdf
- 1.2.1 等差数列的概念及其通项公式(教学设计)高二数学(北师大版2019选择性必修第二册).docx
- 师范文化课件最新完整版本.pptx
文档评论(0)