高斯坐标的正反算及换带计算EVB程序开发

版权申诉
0 下载量 159 浏览量 更新于2024-10-26 收藏 59KB RAR 举报
资源摘要信息:"本资源是一份包含多个文件的压缩包,标题为'bltoxy.rar_bl-err零伏_evb_换带_换带程序_高斯正反算'。根据标题和描述,该资源的核心功能为实现高斯坐标的正反算以及换带计算,采用的编程语言或框架为EVB(可能是指某种特定的开发环境或工具)。资源中包含的标签显示了其主要关注的技术点,如'bl-err零伏'可能代表了一个特定的问题或错误代码,'evb'代表了程序开发的环境或框架,'换带'和'换带程序'强调了程序的一个主要功能,而'高斯正反算'则指的是高斯投影计算中的正算和反算功能。 在文件列表中,除了一个文本文件'***.txt'外,还包含了一个名为'空间坐标转换源码'的文件。这表明资源中至少包含一份源代码,该源码文件可能涉及到空间坐标转换,这与高斯正反算功能紧密相关。'***.txt'可能包含了更多关于下载、使用说明、版本信息或版权说明等文本信息。 综合以上信息,此资源主要涉及以下几个方面的知识点: 1. 高斯投影正反算:高斯投影是地图投影中的一种,广泛应用于平面测量和大比例尺地图的编制。正算指的是从地理坐标(经度、纬度)计算对应的高斯平面坐标,而反算则是从高斯平面坐标反推出地理坐标。在进行地图制图、土地测量、工程测量等领域时,掌握高斯投影的正反算非常重要。 2. 换带计算:换带计算是高斯投影中的一种特殊情况,涉及到的是从一个高斯投影带转换到另一个高斯投影带的过程。由于地球的曲率以及投影带的宽度限制,地理坐标通常被分为不同的带,每带使用不同的中央子午线进行投影。在某些情况下,如跨越多个投影带进行测量或制图时,需要进行换带计算以保证数据的连续性和准确性。 3. EVB编程环境:虽然EVB可能指代不同的编程环境或框架,但在没有具体上下文的情况下难以确定具体含义。可能涉及到某种特定的软件开发环境或库,用于编写和运行该换带及高斯正反算程序。 4. 空间坐标转换:这是一个与地理信息系统(GIS)、遥感、测绘等领域密切相关的过程,指的是在不同坐标系统之间转换点、线、面等空间数据的过程。高斯正反算本质上也是空间坐标转换的一种。 从文件名称列表中可见,'***.txt'可能包含与该资源下载、使用或版权相关的信息,而'空间坐标转换源码'文件则预示着开发者可以获取到实际的编程代码,进而学习和分析相关的算法实现细节。 资源文件可以应用于测绘工程、GIS开发、土地资源管理等领域,对于相关领域的专业人员和学生来说,是一个很有价值的参考资源。"

import numpy as np import torch import torch.nn as nn import torch.nn.functional as F import matplotlib.pyplot as plt # 定义RBF神经网络的类 class RBFNetwork(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(RBFNetwork, self).__init__() # 初始化输入层,隐含层,输出层的节点数 self.input_size = input_size self.hidden_size = hidden_size self.output_size = output_size # 初始化权重矩阵和偏置向量 self.W1 = nn.Parameter(torch.randn(input_size, hidden_size)) # 输入层到隐含层的权重矩阵 self.b1 = nn.Parameter(torch.randn(hidden_size)) # 隐含层的偏置向量 self.W2 = nn.Parameter(torch.randn(hidden_size, output_size)) # 隐含层到输出层的权重矩阵 self.b2 = nn.Parameter(torch.randn(output_size)) # 输出层的偏置向量 def forward(self,x): # 前向传播过程 x = torch.from_numpy(x).float() # 将输入向量转换为张量 x = x.view(-1, self.input_size) # 调整输入向量的形状,使其与权重矩阵相匹配 h = torch.exp(-torch.cdist(x, self.W1.t()) + self.b1) # 计算隐含层的输出值,使用高斯径向基函数作为激活函数 y = F.linear(h, self.W2.t(), self.b2) # 计算输出层的输出值,使用线性函数作为激活函数 return y #定义pid控制器 class Pid(): def __init__(self, exp_val, kp, ki, kd): self.KP = kp self.KI = ki self.KD = kd self.exp_val = exp_val self.now_val = 0 self.sum_err = 0 self.now_err = 0 self.last_err = 0 def cmd_pid(self): self.last_err = self.now_err self.now_err = self.exp_val - self.now_val self.sum_err += self.now_err self.now_val = self.KP * (self.exp_val - self.now_val) \ + self.KI * self.sum_err + self.KD * (self.now_err - self.last_err) return self.now_val def err_pid(self): self.last_err = self.now_err self.now_err = self.exp_val - self.now_val self.sum_err += self.now_err self.p_err = self.exp_val - self.now_val self.i_err = self.sum_err self.d_err = self.now_err - self.last_err self.now_val = self.KP * (self.exp_val - self.now_val) \ + self.KI * self.sum_err + self.KD * (self.now_err - self.last_err) return self.p_err, self.i_err, self.d_err rbf_net = RBFNetwork(3,10,4) pid_val = [] #对pid进行初始化,目标值是1000 ,p=0.1 ,i=0.15, d=0.1 A_Pid = Pid(1000, 0.1, 0.1, 0.1) # 然后循环100次把数存进数组中去 for i in range(0, 100): input_vector = np.array(A_Pid.err_pid()) output_vector = rbf_net(input_vector) output_vector = output_vector.reshape(4,1) A_Pid = Pid(1000, output_vector[0], output_vector[1], output_vector[2]) pid_val.append(A_Pid.cmd_pid())

2023-06-06 上传