水准网平差、矩阵运算MFC代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
误差理论与测量平差上机指导书
钱建国张恒憬编写
辽宁工程技术大学
测绘与地理科学学院测绘工程系
目录
Visual C++平差编程实现 (2)
1矩阵加法 (2)
2矩阵乘法 (2)
3 矩阵转置 (4)
4 矩阵求逆 (4)
5 水准网间接平差实例(分组选做) (11)
Matlab平差编程实现(分组选做) (19)
1 间接平差 (19)
Visual C++平差编程实现
一、实验名称:解算法方程。
二、实验目的和任务:掌握矩阵加法、乘法与求逆的通用程序的编写。
三、实验要求:
1每人独立编写出矩阵加法与乘法的程序,并上机调试通过;
2采用VC++6.0开发平台,C或者C++语言编写程序;
3写出矩阵运算的结果。
四、实验内容:
1矩阵加法
矩阵加法的示例函数(C语言)
void JZjiafa(double a[15][15],double b[15][15],double c[15][15],int
m,int n)
{
for (int i=0;i<=m-1;i++)
for(int j=0;j<=n-1;j++)
{
c[i][j]=a[i][j]+b[i][j];
}
return;
}
2矩阵乘法
矩阵乘法的示例程序(C语言)
#include "stdafx.h"
void matrixMultiply(double a[14][15],double b[15][13], double
c[14][13],long m,long n,long k)
{
for (long i = 0; i<= m-1; i++)
{
for (long j=0; j<=k-1; j++)
{
c[i][j] =0.0;
for (long q=0; q<=n-1;q++)
{
c[i][j] = c[i][j] + a[i][q] * b[q][j];
}
}
}
return;
}
int main(int argc, char* argv[])
{
long n,m,k,i,j;
double a[14][15],c[14][13],b[15][13];
FILE *stream;
stream = fopen("矩阵输入.txt","r");
fscanf(stream,"%ld %ld",&n,&m);
for (i=0;i { for(j=0;j { fscanf(stream,"%lf",&a[i][j]); } } fscanf(stream,"%ld %ld",&m,&k); for(i=0;i { for(j=0;j { fscanf(stream,"%lf",&b[i][j]); } } fclose(stream); matrixMultiply(a,b,c,4,5,3); stream = fopen("矩阵计算结果.txt","w"); for (i=0;i<=3;i++) { for(j=0;j<=2;j++) fprintf(stream,"%16.7e ",c[i][j]); fprintf(stream,"\n"); } fprintf(stream,"\n"); fclose(stream); return 0; } 3 矩阵转置 矩阵的转置示例函数(C语言) double JZzhuanzhi(double a[15][15], double b[15][15], int m,int n) { { for(int i=0;i for(int j=0;j b[j][i]=a[i][j]; } return 0.0; } 4 矩阵求逆 矩阵求逆的示例函数(C语言) int invGJ(double **a,int n) { int *is,*js,i,j,k,l,u,v; double d,p; is=(int *)malloc(n*sizeof(int)); js=(int *)malloc(n*sizeof(int)); for(k=0;k<=n-1;k++) { d=0.0; for(i=k;i<=n-1;i++) for(j=k;j<=n-1;j++) { l=i*n+j;p=fabs(a[i][j]); if(p>d) {d=p;is[k]=i;js[k]=j;} } if(d+1.0==1.0) { free(is);free(js);printf("error not inv\n"); return (0); } if(is[k]!=k) for(j=0;j<=n-1;j++) { u=k*n+j;v=is[k]*n+j; p=a[k][j];a[k][j]=a[is[k]][j];a[is[k]][j]=p; } if(js[k]!=k) for(i=0;i<=n-1;i++) { u=i*n+k;v=i*n+js[k]; p=a[i][k];a[i][k]=a[i][js[k]];a[i][js[k]]=p; } l=k*n+k; a[k][k]=1.0/a[k][k]; for(j=0;j<=n-1;j++) if(j!=k) { u=k*n+j;a[k][j]=a[k][j]*a[k][k]; }