【VB开源代码栏目提醒】:以下是网学会员为您推荐的VB开源代码-MATLAB实现可视化测量平差程序设计 - 毕业设计,希望本篇文章对您学习有所帮助。
MATLAB实现可视化测量平差程序设计MATLAB实现可视化测量平差程序设计 2 目录................................................................................................................................. 2 一、前言.......................................................................................................................... 3 1国内外现状 .......................................................................................................... 3 2程序结构分析 ...................................................................................................... 3 二、软件开发计划、涉及主要技术 ................................................................................... 4 1 开发计划............................................................................................................ 4 2 涉及主要技术概述.............................................................................................. 4 三、程序设计说明书 ........................................................................................................ 5 1数据库设计说明 ................................................................................................... 5 2软件开发过程和主要技术亮点 .............................................................................. 6 21接口........................................................................................................... 6 22平差计算的基本原理 .................................................................................. 8 23 GDI图形化数据展示 ............................................................................ 13 四、测试分析、评价、可行性推广 ................................................................................. 15 时间是计算方法 ...................................................................................................... 15 Matlab-C内存/虚拟内存开销 .................................................................................. 15 时间测试s .......................................................................................................... 15 结论........................................................................................................................ 15 调试经验................................................................................................................. 16 关于数据接口的两种处理方法 ................................................................................. 16 参考文献 .................................................................................................................... 17 MATLAB实现可视化测量平差程序设计 3 摘要该程序利用.NET 与MATLAB的混合编程探究了.NET与MATLAB的接口。
实现了测量数据的经典平差数据处理、成图并储存。
关键词.NETMATLAB接口平差程序设计 一、前言 1国内外现状 .MATLAB 简单易学其强大的矩阵计算功能尤其适合于处理测量中各种复杂的数据计算问题。
但是MATLAB对于数据的输入输出主要通过文件的格式而且成图困难不易控制。
而C.NET拥有C/C的强大功能以及Visual Basic简易使用的特性可以方便调用数据库进行数字成图。
但是由于.NET是一门较新的技术针对MATLAB的混合编程的接口的材料无论是在国内还是在国外并不是很多。
本文在实践的基础上将对C调用MATLAB的接口来实现测量平差中测量数据库储存数字成图等功能并深入探讨MATLAB与.NET的编程接口。
2程序结构分析 MATLAB实现可视化测量平差程序设计 4 二、软件开发计划、涉及主要技术 1 开发计划 2010年4月到2010年5月底进行前期准备包括资料收集与可行性研究与需求分析。
2010年6月实现程序的概要设计按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面。
2010年7月到8月 完成程序的详细设计设计每个模块的实现算法、所需的局部数据结构。
2010年9月到10月 完成程序的
代码编写工作。
2010年11月 对软件进行最后的功能和性能测试并作出修改完善。
2010年12月 最终结题。
2 涉及主要技术概述 ADO.NET的名称起源于ADOActiveX Data Objects这是一个广泛的类组 它提供了平台互用性和可伸缩的数据访问。
ADO.NET增强了对非连接编程模式的支持并支持RICH XML.由于传送的数据都是XML格式的因此任何能够读取XML格式的应用程序都可以进行数据处理。
事实上接受数据的组件不一定要是ADO .NET组件它可以是基于一个Microsoft Visual Studio的解决方案也可以是任何运行在其它平台上的任何应用程序。
GDI/GDI是Graphics Device Interface的缩写含义是图形设备接口它的主要任务是负责系统与绘图程序之间的信息交换处理所有Windows程序的图形输出。
在Windows操作系统下绝大多数具备图形界面的应用程序都离不开GDI我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形文本等操作。
GDI的出现使程序员无需要关心硬件设备及设备驱动就可以将应用程序的输出转化为硬件设备上的输出实现了程序开发者与硬件设备的隔离大大方便了开发工作。
GDI是以前版本GDI的继承者作为图形设备接口的GDI使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节他们只需调用GDI库输出的类的一些方法即可完成图形操作真正的绘图工作由这些方法交给特定的设备驱动程序来完成GDI使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。
MATLAB实现可视化测量平差程序设计 5 三、程序设计说明书 1数据库设计说明 数据库根据测量数据库的特点以“点号前视点”作为码“XUMXMYMABF角度改正边长改正边长平差值方位角方位角中误差边长中误差高程高程中误差高差改正数高差平差值”作为属性。
满足数据库的第二范式2NF。
为了方便平差的数据处理与数字成图又在表外设计了两个查询即DOT与DATA1。
其中DOT作为点号的重新编号使传入MATLAB函数的点号为数字。
DATA1作为成图的数据查询点与点的关系以及误差椭圆的半径。
MATLAB实现可视化测量平差程序设计 6 2软件开发过程和主要技术亮点 21接口 使用环境 Visual Studio 2008Matlab 2010a。
前提测试机器需要安装MCR .NET FRAMEWORK否则会编译出错。
.net参见Matlab Builder for .net的帮助有源
代码 lt一gtMATLAB配置 在MATLAB 安装目录lt盘符gt:Program FilesMATLABR2010a下找到toolboxcompilerdeploy文件夹在其win3264位版本则是在win64文件夹下面找到MCRInstaller.exe。
它就是MATLAB Complier RuntimeMCR安装程序安装它。
安装后在MCR安装目录lt盘符gt:Program FilesMATLABMATLAB Compiler Runtimev79下找到runtime文件夹win3264位版本则是在win64文件夹下面找到mwcomutil.dll注册它。
具体办法是在“开始菜单程序Microsoft Visual Studio 2008Visual Studio Tools”中找到“Visual Studio 2008 命令提示”的快捷方式运行它。
在这个命令行环境下可以运行注册COM件的命令行程序。
用法是 cd quotlt盘符gt:Program FilesMATLAB MATLAB Compiler Runtimev79runtimewin32quotlt回车gt lt盘符gt:regsvr32 mwcomutil.dlllt回车gt 在MATLAB控制台输入mbuild -setup 并选择最新的编译器安装。
lt二gt工程建立 1首先把MATLAB算法函数写好保存为.M格式。
2在在MATLAB控制台输入deploytool 工程名为将来C中的命名空间类对应类名文件名为将来的类的方法函数。
一切都输入完成后编译。
ps:编译真的好慢 这时会生成两个文件夹一个叫src包含了源码另一个叫distrib用来发布。
我们需要的是distrib。
3在VS中引用 1matlab的系统文件Mathworks.net mwarray API 2引用distrib下的DLL文件 lt工程名gt.dll 3using mathworks.matlab.net.arrays using lt工作空间就是MATLAB的工程名gt MATLAB实现可视化测量平差程序设计 7 4把类实例化即声明一个MATLAB里类的一个对象就可以调用方法成员函数了。
具体调用有其中重载形式:以本程序为例 注释 1、 MWNumericArray mst new MWNumericArrayst//st为double型数组数据这里将数组转换成 MWNumericArray型数据。
MWNumericArray为MATLAB的矩阵接口类型可以储存N阶矩阵。
2、 mateng matlabcal new mateng//对应MATLAB中的类 3、 MWArray poutnums matlabcal.planenet20 mst mfs mdi mag mcx mcy maz0 MATLAB实现可视化测量平差程序设计 8 本句为接口的核心MWArray为一个虚基类MWArray用于接收matlabcal.planenet 返回值由于返回值的类型是不固定的可能是数值可能是字符串所以用基类数组来接收。
Matlabcal为上一句类定义的对象这样MATLAB的两个函数就成为该类的两个方法。
20 mst mfs mdi mag mcx mcy maz0这几个参数只有20是在M文件中没有定义过的这个参数是用来声明返回值的个数此处将有20个矩阵作为planenet的返回值传入MWArray中。
调用时通过MWArrayN找到相应的参数。
4、 要找到具体的值需要通过MWNumericArrayN行号从1开始列号从1开始 5、 关于NaN的问题 众所周知NaN是MATLAB特有的用于表示值为空的一个符号可是在其他语言中如果想要用含有NaN的矩阵做参数或者接收NaN的矩阵就需要进行相关的转换 经过多种尝试个人感觉这种方式进行转换比较方便通过条件语句区分C是否为空字符串如果为空则return double.NaN同样接收的值如果为NaN则矩阵值.ToString”NaN” 22平差计算的基本原理 1、间接平差的基本原理 一般的间接平差的函数模型为dXBL????????????????????????????????1-1 平差时为了计算方便和计算数值的稳定一般对参数X??都取近似值0X令MATLAB实现可视化测量平差程序设计 9 xXX????0 ????????????????????????????????????????????????????????1-2 代入式1-2并令00LLdBXLl????????????????????????1-3 上式中0L为观测值由此可得误差方程lxBV????????????????????????1-4 式中l 为误差方程的自由项对于经典间接平差将未知参数X??视为非随即参数不考虑其先验统计性质根据式1-2可得平差后xxXXQQ???????? 由式1-3可得LLllQQ????????。
间接平差的随机模型为12020nnnnnnPQD??????????????????????????1-5 平差准则为minPVVT????????????????????????????????????????????1-6 根据最小二乘原理可以按数学上求自由极值的方法得02??PBVxPVVTT 转置后得0PVBT????????????????????????????????????????????????1-7 以上所得的式1-4和式1-7称为间接平差的基础方程。
解此基础方程消去V得0??PlBxPBBTT??????????????????????????1-8 令PBBNTbb PlBWT 1-8式可简写成0??WxNbb????????????????????????????????????1-9 式中系数阵bbN为满秩矩阵x??有唯一解上式称为间接平差的法方程。
解之得 WNxbb1?? ????????????????????????????????????????????????????????1-10 或PlBPBBxTT1??????????????????????????????????????????????????1-11 将求出的x??代入误差方程式1-4即可求得改正数V从而平差结果为 xXXVLL??????0????????????????????????????????????????????????1-12 精度评定 计算单位权中误差公式为tnPVVT0?? ????????????????????????????1-13 2、误差方程式的组成 1边长观测误差方程 设边长观测值为iL两端点jk均为待定点现选取待定点的坐标平差值jX??jY??kX??kY??作为参数并设: MATLAB实现可视化测量平差程序设计 10 jjjjjjyYYxXX????????00kkkkkkyYYxXX????????00 存在以下关系22????????jkjkjiYYXXvL????????????????????????2-1 线性化可得ikjkjkkjkjkjjkjkjjkjkilysYxsXysYxsXv????????00000000??????????2-2 其中220????????jkjkjkYYXXs 常数项0ijkiLsl 2方向观测误差方程 如上图所示j为测站点k为 照准点jkL 为jk方向的观测值jZ 为j站的定向角。
由图可知jk方向的误差方程为jkjkjjkLZv?? 式中jZ??——j站定向角的平差值jk?? ——jk方向的方位角平差值。
设jk两点均为待定点其坐标平差值为jjjjjjyYYxXX????????00kkkkkkyYYxXX????????00 由坐标平差值与坐标近似值求得的方位角平差值0jk有以下关系 jkjkjk??0??其中00000arctanjkjkjkXXYY ????????arctan????????arctan??0000jjkkjjkkjkjkjkxXxXyYyYXXYY??????????????????3-1 其中jk??称为坐标方位角改正数 将3-1式线性化后整理得kjkkjkjjkjjkybxaybxajk????????quot?? 其中00quot00quotcossinjkjkjkjkjkjksbsa N jZ jkL j k 度盘零线 3MATLAB实现可视化测量平差程序设计 11 顾及到jjjzZZ????0代入误差方程得jkkjkkjkjjkjjkjjklybxaybxazv??????????????????????????????????????3-2 其中00jjkjkjkZLl 在此我们采用史赖伯消去定向角的方法对误差方程进行改进进而组成最终的误差方程。
3、近似坐标的计算 1极坐标法 ABABABXXYYarctan ①如图一已知A、B两点的坐标和b若b为左角则180ABBP 若b为右角则180ABBP 于是可求得P点坐标BPBPBPSXXcosBPBPBPSYYsin ②如图二已知A点坐标和坐标方位角a则sincosAPAPAPAPSYYSXX 2前方交会 已知点A、B的坐标及a、b 近似坐标计算极坐标法前方交会测边交会后方交会无定向导线 A a B P b A B b A P N a 图一 图二 P MATLAB实现可视化测量平差程序设计 12 则cotcotcotcotcotcotcotcotABBAPABBAPXXYYYYYXXX 3测边交会 A、B、C为已知点P为待定点A、B、C按逆时针排列a、b、c为边长观测值 在DABP中ABABaSbaSA2cos222顾及AABAP则APAPAPAPaYYaXXsincos 同理在DBCP中CcSbcSCCBCPCBCB2cos222则CPCPCPCPcYYcXXsincos将两次算出的坐标值取平均作为P点最后坐标 4后方交会 设cbaRRR分别为由P点向A、B、C的方向观测值则 abcabcRRRRRR321 CCPBBPAAPCBAtantantantantantantantantantantantan332211 CBACCBBAAPCBACCBBAAPPPPYPYPYPYPPPXPXPXPX 5无定向导线 B C P 1 2 3 bbb P C c b a A B a A MATLAB实现可视化测量平差程序设计 13 ①有两个或两个以上的已知点但在网形中是分开的程序思路是先建立一个新的坐标再进行坐标转换。
②一直一个点的坐标和一个已知方位角方位角两端点均为待定点程序思路同样为假设坐标系计算再进行坐标转换。
4、法方程系数阵的解算 1改进的平方根法求逆矩阵 用矩阵理论分析高斯消去法建立矩阵的三角分解定理实质是将系数矩阵A分解为一个单位下三角矩阵L和一个单位上三角矩阵U的乘积即矩阵的LU分解·在实际问题中常遇到对称正定矩阵方程组的求解问题对这种具有特殊性质的系数矩阵采用改进平方根法求解是一种行之有效的方法它是在高斯消去法基础上建立起来的算法思想较复杂些但计算量大约为高斯消去法的一半用Matlab编写程序求解使这类问题变得更简单 定理当n阶矩阵A对称且各阶主子式不等于0时则存在单位下三角阵L及非奇异对角阵D使得TLDLA且此分解惟一。
法方程用改进的平方根法求逆的过程如下 TTTTRRDLDLALRLDLA1111 2一维存储 法方程的系数阵是对称方阵若其阶数为n则它的大小为nn。
如果满元二维存放则所需单元随着n的增大而迅速增加。
我们在组成法方程式系数阵时只需给出上或下三角阵的元素用改正的平方根法求方程式系数阵的逆时只要用到上或下三角阵的元素因而在这里我们用一维存储的方法一维存放与二维 存放的对应关系如下AI-1M-I/2JAIJ。
23 GDI图形化数据展示 由于GDI绘制图形十分方便在数字成图时只需知道本站的坐标前视点的坐标本站的误差椭圆参数即可。
但是由于输入的网型并不固定起始坐标也不固定屏幕坐标系与测量坐标系直接需要转换。
涉及到平移比例尺变换XY轴交换。
所以在绘制图形前首先要对从数据库中读取的图形进行变换。
MATLAB实现可视化测量平差程序设计 14 变换公式如下 首先获取所有坐标中XY 的最大最小值max.X min.Xmax.Y min.Y作为显示边界。
其次求取比例参数lh0.Xlh0.Y150像素为图边距。
这样sz0.Width - 2 lh0.X / max.Y - min.Y与 -sz0.Height - 2 lh0.Y / max.X - min.X即可获取相应的比例参数再交换XY 的值就能在屏幕中完整的显示出整个网型了。
同理获取误差椭圆中最小的误差椭圆半径通过除以该半径再乘以20像素就能安装比例在图上显示出完整的误差椭圆。
MATLAB实现可视化测量平差程序设计 15 四、测试分析、评价、可行性推广 时间是计算方法 测试环境Inter Core2 Duo CPU T58702.00GHz 内存3GB操作系统WIN7旗舰版 DateTime tst0 DateTime.Now ----------//函.
上一篇:
2006级计算机应用技术(软件开发方向)
下一篇:
学校党建工作论文