石家庄铁道大学测量平差课程设计

您所在的位置:网站首页 matlab测量平差程序设计报告怎么写 石家庄铁道大学测量平差课程设计

石家庄铁道大学测量平差课程设计

2024-07-13 19:35| 来源: 网络整理| 查看: 265

刚刚做完平差课设,供学弟学妹们参考,欢迎指正,提出建议。

基于程序目的的,我选择了“测角中点三边形”来作为我的课程设计面向的模型,通过两个已知控制点和观测得到的角度计算未知点的坐标及某些边的长度和坐标方位角。                                                       

              为了更好的了解所设计的软件,接下来是对软件内容的描述:

数据输入:

 

考虑到每次作业数据量的不同,数据输入提供了三种方式:手动输入,Excel文件导入,Txt文件导入。在程序主界面有输入框,用户参考我所定义的数据格式即可输入。主界面的菜单栏的数据输入项中可选择“.csv”格式的Excel文件和“.txt”的文本文件进行数据导入。

计算:

软件界面中下方为“计算”按钮,数据输入完成后,点击即可进行计算。计算方法采用的是条件平差模型,根据输入得到的观测值和已知控制点坐标,程序自动计算出改正数和平差值,并以文字数字的形式呈现在主界面的右侧窗口,详细的计算过程请看第三部分。

数据输出:

计算完毕后,用户可根据自己的需求来选择是否进行数据导出。软件提供了两种数据输出的格式“.csv”Excel文件和“.txt”文本文件来实现数据的快速保存,以便保持数据的完备性。

使用说明:

              为用户提供软简要的件使用说明书。

测量模型可视化:

为了更直观地展示平差结果的,软件提供了绘图功能,点击“计算按钮”后自动触发该功能。

 平差原理

此程序针对的模型为”测角中点三边形”,应用的平差模型为条件平差,具体的计算流程如下:

根据测量模型,列出条件方程:  AQAT+W=0

Li=Li+V

根据测角网的几何条件,我们可以根据图形条件,圆周条件,极条件列出五个条件方程。

                  a1+b1+c1-1800=0

a2+b2+c2-1800=0

a3+b3+c3-1800=0

c1+c2+c3-3600=0

sina1sinb1sina2sinb2sina3sinb3=1

由于根据极条件所列出的方程是非线性的,我们要对其进行线性化 处理,最终得到的方程为cota1νa1+cota2νa2+cota3νa3-cotb1νb1-cotb2νb2-cotb3νb3+(1 - sinb1sinb2sinb3sina1sina2sina3)ρ''=0

 列出法方程并求解K                      Naa=AQAT

                              NaaK+W=0

                           K=-Naa-1W

 将K代入改正数方程,求出V值,并求出平差值

V=QATK

Li=Li+v

 用平差值重新列出条件方程进行检验

本程序涉及到的矩阵矩阵均采用Python的科学计算库Numpy进行实现,为避免因为计算而损失精度,计算过程中所有数值保留8位有效数字,输出时根据“四舍六入”进行取舍。

 精度评定

σ=νTPvr

φ=f1L1+f2L2+…+fnLn

                Qφφ=fTcot-AQfTNaa-1AQf

                    σφ=σ Qφφ(平差值函数中误差)

'''本软件版作者张斌,于2021年11月17日完成第一次测试。 禁止抄袭我的代码!!! 规定: (1)数据输入格式: 允许的测角中误差 A,x,y B,x,y 设站点,瞄准方向,瞄准方向,度.分秒(秒保留三位小数,例如120°50′48.6″“120.50486”) (2)数据输入和输出的文件均为*.txt和*.csv格式 ''' import math from tkinter import * import numpy as np from tkinter import filedialog import tkinter.messagebox import time import turtle as t def tranangle(a): #定义角度转弧度 x = a.split('.') x1 = int(x[1][0:2]) x2 = "{}.{}".format(x[1][2:4], x[1][4]) x2 = float(x2) x=(x2 / 60 / 60 + x1 / 60 + int(x[0])) / 180 * math.pi if x>=2*math.pi: x-=2*math.pi if x0.0: A1A2 = math.atan(fx / fy) elif fy0.0: A1A2=math.pi/2 if fx


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3