版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序源代码C语言程序:#include #include #include #include #include#define PI 3.98#define p .#define MAX 50/矩阵的乘法运算 MatrixMutiply(double Matrix1MAXMAX,double Matrix2MAXMAX,double MatrixResultMAXMAX,int m1,int m2,int m3)int i,j,k;double Sum;for(i=0;im1;i+) for(j=0;jm3;j+) /*按照矩阵乘法的规则计算结果矩阵的i*j元素*/ Sum=0; for(k=0
2、;km2;k+) Sum+=Matrix1ik*Matrix2kj; MatrixResultij=Sum; /return MatrixResult;/矩阵的转置运算 MatrixT(double Matrix1MAXMAX,double TMAXMAX,int m1,int m2) /m1,m2分别是矩阵的行列数 int i,j;/double T5050; for(i=0;im1;i+) for(j=0;jm2;j+) Tji=Matrix1ij; /return T;/矩阵的逆运算void swap(double a,double b)double c=a;a=b;b=c;double
3、 DinV(double A5050,int n) /n代表阶数 int i,j,k; double d; int JS50,IS50; for (k=0;kn;k+) d=0; for (i=k;in;i+) for (j=k;jd) d=fabs(Aij); ISk=i; JSk=j; if (d+1.0=1.0) return 0; if (ISk!=k) for (j=0;jn;j+) swap(Akj,AISkj); if (JSk!=k) for (i=0;in;i+) swap(Aik,AiJSk); Akk=1/Akk; for (j=0;jn;j+) if (j!=k) Ak
4、j=Akj*Akk; for (i=0;in;i+) if (i!=k) for (j=0;jn;j+) if (j!=k) Aij=Aij-Aik*Akj; for (i=0;i=0;k-) for (j=0;jn;j+) if (JSk!=k) swap(Akj,AJSkj); for (i=0;i=i) break; Xo0=5000.0;Yo0=5000.0; Xo15=5000.0;Yo15=5000.0;so0=s0; /用来求未知点坐标近似值for(i=1;i=(2*PI)alfi=alfi-2*PI;Xoi=Xoi-1+si-1*cos(alfi-1);Yoi=Yoi-1+si
5、-1*sin(alfi-1);/printf(X=%ft,Xoi);for(i=1;i0&(Xoi+1-Xoi)0)/第一象限 alfoi=atan(Yoi+1-Yoi)/(Xoi+1-Xoi);else if(Yoi+1-Yoi)0&(Xoi+1-Xoi)0)/第二象限 alfoi=atan(Yoi+1-Yoi)/(Xoi+1-Xoi)+PI;else if(Yoi+1-Yoi)0)/第三象限 alfoi=atan(Yoi+1-Yoi)/(Xoi+1-Xoi)+2*PI;else /(Yoi-Yoi-1)0&(Xoi-Xoi-1)0)/第四象限 alfoi=atan(Yoi+1-Yoi)/(
6、Xoi+1-Xoi)+PI;/printf(alf=%ft,alfoi);/printf(so=%ft,soi);/求B矩阵/将第一个角度的系数单独算出j=0;/B0j=0.0;(Yo14-Yo0)/(so14*so14)*p/1000.0;/B0j+1=0.0;-1*(Xo14-Xo0)/(so14*so14)*p/1000.0;B0j=-1*(Yo1-Yo0)/(so0*so0)*p/1000.0;/B0j+1=(Xo1-Xo0)/(so0*so0)*p/1000.0;B026=(Yo14-Yo0)/(so14*so14)*p/1000.0;B027=-1*(Xo14-Xo0)/(so14
7、*so14)*p/1000.0;/将第二个角度的系数单独算出B1j=(Yo2-Yo1)/(so1*so1)-(Yo0-Yo1)/(so0*so0)*p/1000.0;/B1j+1=-1*(Xo2-Xo1)/(so1*so1)-(Xo0-Xo1)/(so0*so0)*p/1000.0;B1j+2=-1*(Yo2-Yo1)/(so1*so1)*p/1000.0;B1j+3=(Xo2-Xo1)/(so1*so1)*p/1000.0;/求其他角度改正的系数 for(i=2;i15;i+)if(i14)Bij=(Yoi-1-Yoi)/(soi-1*soi-1)*p/1000.0;Bij+1=-1*(Xo
8、i-1-Xoi)/(soi-1*soi-1)*p/1000.0;Bij+2=(Yoi+1-Yoi)/(soi*soi)-(Yoi-1-Yoi)/(soi-1*soi-1)*p/1000.0;Bij+3=-1*(Xoi+1-Xoi)/(soi*soi)-(Xoi-1-Xoi)/(soi-1*soi-1)*p/1000.0;Bij+4=-1*(Yoi+1-Yoi)/(soi*soi)*p/1000.0;Bij+5=(Xoi+1-Xoi)/(soi*soi)*p/1000.0;elseBij=(Yoi-1-Yoi)/(soi-1*soi-1)*p/1000.0;Bij+1=-1*(Xoi-1-Xoi
9、)/(soi-1*soi-1)*p/1000.0;Bij+2=(Yoi+1-Yoi)/(soi*soi)-(Yoi-1-Yoi)/(soi-1*soi-1)*p/1000.0;Bij+3=-1*(Xoi+1-Xoi)/(soi*soi)-(Xoi-1-Xoi)/(soi-1*soi-1)*p/1000.0;j=j+2;B21=0.0;/求边长改正的系数 j=0;/将第一个边长的系数单独算出Bij=(Xo1-Xo0)/so0; /Bij+1=(Yo1-Yo0)/so0; /(Yo1-Yo0)/(so0*so0);i=i+1; for(i;i30;i+)if(i29)Bij=-1*(Xoi-14-
10、Xoi-15)/soi-15;Bij+1=-1*(Yoi-14-Yoi-15)/soi-15;Bij+2=-1*Bij;Bij+3=-1*Bij+1; elseBij=-1*(Xoi-14-Xoi-15)/soi-15;Bij+1=-1*(Yoi-14-Yoi-15)/soi-15; j=j+2; B161=0.0;for(j=1;j27;j+)for(i=0;i30;i+)Bij=Bij+1;/求L矩阵 L00=(beta0-(alfo0-alfo14+PI)*p;for(i=1;i30;i+)if(iPI*p)Li0=(Li0-2*PI*p); Li0=Li0; elseLi0=(si-1
11、5-soi-15)*1000.0; /求权阵P for(i=0;i30;i+)if(i15)Pii=1;elsesigma_s=5+10*0.*si-15*1000; /单位为(/mm)的平方 Pii=sigma_beta*sigma_beta/(sigma_s*sigma_s); double Tb5050,Tc5050,MatrixResult5050,TV5050;double temp1MAXMAX,temp2MAXMAX,temp3MAXMAX,temp4MAXMAX,temp5MAXMAX; /计算Nbb矩阵,W矩阵 m1=30;m2=28; MatrixT(B,Tb,m1,m2)
12、; m3=30; MatrixMutiply(Tb,P,temp1,m2,m1,m3); m3=m2;m1=m2;m2=30; MatrixMutiply(temp1,B,Nbb,m1,m2,m3); m1=27;m2=30;m3=1; MatrixMutiply(temp1,L,W,m1,m2,m3); /矩阵输出 D:111导线网输出数据3027.txt文本 FILE *fp;fp=fopen(D:111导线网输出数据3027.txt,w);if(fp!=NULL)fprintf(fp,距离近似值so(单位:m):t);fprintf(fp,方位角近似值alfo(单位:弧度):n);for
13、(i=0;i15;i+) fprintf(fp,%4.12lft,soi);fprintf(fp,%.12lfn,alfoi);fprintf(fp,Xo(单位:mm):t);fprintf(fp,Yo(单位:mm):);fprintf(fp,n);for(i=0;i15;i+) fprintf(fp,%.6lft,Xoi); fprintf(fp,%.6lf,Yoi);fprintf(fp,n);fprintf(fp,B矩阵:);fprintf(fp,n);for(i=0;i30;i+)for(j=0;j27;j+)fprintf(fp,%.6f ,Bij);fprintf(fp,n);fp
14、rintf(fp,L矩阵(单位:秒和mm):);fprintf(fp,n);for(i=0;i30;i+) fprintf(fp,%.6lf ,Li0);fprintf(fp,n);fprintf(fp,P矩阵:);fprintf(fp,n);for(i=0;i30;i+)for(j=0;j30;j+)fprintf(fp,%.6f ,Pij);fprintf(fp,n);fprintf(fp,Nbb矩阵:);fprintf(fp,n);for(i=0;i27;i+)for(j=0;j27;j+)fprintf(fp,%.12f ,Nbbij);fprintf(fp,n);fclose(fp)
15、; /写入完毕,关闭文件 DinV(Nbb,27); /MatrixResult=c * Nbb的逆 ,此时 Nbb已经变成Nbb的逆 /计算xm1=27;m2=27;m3=1; MatrixMutiply(Nbb,W,xgu,m1,m2,m3);double xgu285050,sigma_xy285050;xgu2800=xgu00; for(i=1;i27;i+) xgu28i+10=xgui0; xgu2810=0.0; /计算X(即Xgu估值) Xgu00=5000.0; Ygu00=5000.0; for(i=0;i14;i+) Xgui+10=Xoi+1+xgu282*i0/10
16、00.0; Ygui+10=Yoi+1+xgu282*i+10/1000.0; /精度评定 m1=30;m2=27;m3=1; MatrixMutiply(B,xgu,temp5,m1,m2,m3);for(i=0;i30;i+)if(i15)Vi0=(temp5i0-Li0);elseVi0=(temp5i0-Li0); m1=30;m2=1;MatrixT(V,TV,m1,m2);m1=1;m2=30;m3=30; MatrixMutiply(TV,P,temp4,m1,m2,m3);m1=1;m2=30;m3=1;MatrixMutiply(temp4,V,temp4,m1,m2,m3)
17、;sigma_gu=sqrt(temp400/3); /单位权中误差 double vv=0.0; for (i=0;i15;i+) for (j=0;j1;j+) vv=vv+Vij; /puts(); printf(%lft,vv); for(i=0;i27;i+) for(j=0;j27;j+) Qij=Nbbij; for(i=0;i27;i+) sigma_xyi0=sqrt(Qii)*sigma_gu; /坐标平差值中误差 /printf(%lfn,sigma_xyi0); sigma_xy2800=sigma_xy00; for(i=1;i27;i+) sigma_xy28i+1
18、0=sigma_xyi0; sigma_xy2810=0.0; /printf(%.10lfn,Ncc00); FILE *fp1;fp1=fopen(D:111导线网输出数据3027.txt,a);fprintf(fp1,Nbb的逆:);fprintf(fp1,n);for(i=0;i27;i+)for(j=0;j27;j+) fprintf(fp1,%lf ,Nbbij);fprintf(fp1,n);fprintf(fp1,W:);fprintf(fp1,n);for(i=0;i27;i+)for(j=0;j1;j+) fprintf(fp1,%.12lf ,Wij);fprintf(f
19、p1,n);fprintf(fp1,x(单位:mm):);fprintf(fp1,n);for(i=0;i28;i+)for(j=0;j1;j+) fprintf(fp1,%.10lf ,xgu28ij);fprintf(fp1,n);fprintf(fp1,V(单位:秒和mm):);fprintf(fp1,n);for(i=0;i30;i+)for(j=0;j1;j+) fprintf(fp1,%.10lf ,Vij);fprintf(fp1,n);fprintf(fp1,X(单位:m):t);fprintf(fp1,Y(单位:m):);fprintf(fp1,n);for(i=0;i15;
20、i+)for(j=0;j1;j+) fprintf(fp1,%.6lft,Xguij); fprintf(fp1,%.6lf,Yguij);fprintf(fp1,n);fprintf(fp1,单位权中误差(单位:mm):n);fprintf(fp1,%.10lfn,sigma_gu);fprintf(fp1,X坐标平差值中误差(单位:mm):t);fprintf(fp1,Y坐标平差值中误差(单位:mm):);fprintf(fp1,n);for(i=0;i13;i+) fprintf(fp1,%lftt,sigma_xy282*i0); fprintf(fp1,%lf,sigma_xy282
21、*i+10);fprintf(fp1,n);C语言画图程序/导线网概略图 #include #include #include #define NUM 30LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)static char szAppName = SineWave ;HWND hwnd ;MSG msg ;WNDCLASSEX wndclass
22、 ;wndclass.cbSize = sizeof (wndclass) ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndcl
23、ass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;RegisterClassEx (&wndclass) ;hwnd = CreateWindow (szAppName, 控制网图,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USED
24、EFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL) ;ShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)TranslateMessage (&msg) ;DispatchMessage (&msg) ;return msg.wParam ;LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)static int cxClie
25、nt, cyClient ;HDC hdc ;int i ;PAINTSTRUCT ps ;POINT pt NUM ;switch (iMsg)case WM_SIZE:cxClient = LOWORD (lParam) ;cyClient = HIWORD (lParam) ;return 0 ;case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ; double y16=500.0,363.2211,250.8730,245.2811,343.9816,399.8183,506.0272,596.9804,690.1846,686.1801,688.9
26、648,550.4837,552.8629,499.4146,497.8342,500.0;double x16=500.0,500.0,506.038,269.917,264.999,268.990,346.426,388.125,405.382,466.024,553.062,555.201,651.049,652.317,591.707,500.0;for (i = 0 ; i 16 ; i+)pti.x = xi;pti.y = yi;Polyline (hdc, pt, 16);return 0 ;case WM_DESTROY:PostQuitMessage (0) ;return
27、 0 ;return DefWindowProc (hwnd, iMsg, wParam, lParam) ;C#程序:Form1:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO;using System.
28、Collections.Generic;namespace 导线控制网 public partial class Form1 : Form public Form1() InitializeComponent(); public string jisuanjieguo; public const double p = 180*3600/Math.PI; /定义角度转弧度的函数 public double jiao_hu(double du,double fen,double miao) return (du*3600.0+fen*60.0+miao)/p; /定义矩阵运算的类(包括矩阵的加、减
29、、乘、转置和求逆) public class matrix_yusuan /矩阵相加 public static double, matrix_jia(double, Arry, double, Arry1) int m = Arry.GetLength(0); int n = Arry.GetLength(1); int s = Arry1.GetLength(0); int t = Arry1.GetLength(1); double, temp = new doublem, n; double, tem = 0; if (m = s & n = t) for (int i = 0; i
30、m; i+) for (int j = 0; j n; j+) tempi, j = Arryi, j + Arry1i, j; return temp; else Console.WriteLine(两个矩阵大小不同); return tem ; /矩阵相减 public static double, matrix_jian(double, Arry, double, Arry1) int m = Arry.GetLength(0); int n = Arry.GetLength(1); int s = Arry1.GetLength(0); int t = Arry1.GetLength(
31、1); double, temp = new doublem, n; double, tem = 0 ; if (m = s & n = t) for (int i = 0; i m; i+) for (int j = 0; j n; j+) tempi, j = Arryi, j - Arry1i, j; return temp; else Console.WriteLine(两个矩阵大小不同); return tem; /矩阵转置 public static double, matrix_t(double, Arry) int m = Arry.GetLength(0); int n =
32、Arry.GetLength(1); double, temp = new doublen, m; for (int i = 0; i n; i+) for (int j = 0; j m; j+) tempi,j = Arryj,i; return temp; /矩阵相乘 public static double, matrix_cheng(double, Arry, double, Arry1) int m = Arry.GetLength(0);/矩阵Arry的行数 int r = Arry.GetLength(1);/矩阵Arry的列数 int k = Arry1.GetLength(
33、0);/矩阵Arry的行数 int n = Arry1.GetLength(1);/矩阵Arry1的列数 double, temp = new doublem, n; double, tem = 0 ; if (r = k) for (int i = 0; i m; i+) for (int j = 0; j n; j+) for (int t = 0; t r; t+) tempi, j += Arryi, t * Arry1t, j; return temp; else Console.WriteLine(两个矩阵无法相乘); return tem; /求矩阵Arry的逆矩阵 public static double, matrix_ni(double, Arryni) int Level = Arryni.GetLength(1); double, NArry = new doubleLevel, Level; double HLS = matrix_yusuan.matrix_hls(Arryni); double, BArry = matrix_bansui(Arryni); for (int i = 0; i Level; i+) for (int j = 0; j Level; j+) NA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年番茄红了儿歌教案
- 2024-2025学年新教材高中生物 第2章 群落及其演替 1 群落的结构教学设计 新人教版选择性必修2
- 实验室清洁消毒相关制度
- 完美公司2025年奖金制度
- 2025-2026学年歌曲共鸣的教案
- 2025-2026学年扶物站起教案
- 孝感安全地垫施工指导书
- 现代企业财务分析与管理指南
- 新品市场推广计划执行确认函3篇范本
- 多可丽会员的奖金制度
- 供电局消防培训课件
- 深基坑施工安全与风险控制
- 主动脉夹层查房课件
- 环境化学全部
- 机动车驾驶员培训结业证书(样式)
- 广东药科大学实验报告纸
- 中国政治思想史马工程课件第二章 春秋时期的政治思想
- SB/T 10736-2012酒吧经营服务规范
- GB/T 18663.1-2002电子设备机械结构、公制系列和英制系列的试验第1部分:机柜、机架、插箱和机箱的气候、机械试验及安全要求
- GB/T 14488.1-2008植物油料含油量测定
- GA/T 1567-2019城市道路交通隔离栏设置指南
评论
0/150
提交评论