📄 间接平差.cpp
字号:
// 间接平差.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
void matrixMultiply(double a[15][15],double b[15][15],double c[15][15],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 i0=0;i0<=n-1;i0++)
{
c[i][j]=c[i][j]+a[i][i0]*b[i0][j];
}
}
}
return;
}
double Zhuanzhi(double a[15][15], double b[15][15], long m,long n)
{
{
for(long i=0;i<m;i++)
for(long j=0;j<n;j++)
b[j][i]=a[i][j];
}
return 0.0;
}
long Juzhenqiuni(double a[15][15],long n)
{
double a1,a2;
for(long ii=0;ii<=n-1;ii++) a[ii][ii]+=1.0;
for(long k=0;k<=n-1;k++)
{
a1=a[k][k]-1.0;
for(long jj=0;jj<=n-1;jj++)
a[k][jj]=a[k][jj]/a1;
for(long i=0;i<=n-1;i++)
{
if(i==k) continue;
a2=a[i][k];
for(long j=0;j<=n-1;j++)
a[i][j]-=a2*a[k][j];
}
}
for(long i=0;i<=n-1;i++) a[i][i]-=1.0;
return 2;
}
void Juzhenxiangjia(double a[15][15],double b[15][15],double c[15][15],long m,long n)
{
for (long i=0;i<=m-1;i++)
for(long j=0;j<=n-1;j++)
{
c[i][j]=a[i][j]+b[i][j];
}
return;
}
void Juzhenxiangjian(double a[15][15],double b[15][15],double c[15][15],long m,long n)
{
for (long i=0;i<=m-1;i++)
for(long j=0;j<=n-1;j++)
{
c[i][j]=a[i][j]-b[i][j];
}
return;
}
long main(int argc, char* argv[])
{
long r,n,i,j,m,t;
double a[15][15],c[15][15],b[15][15],p[15][15],nbb[15][15],z[15][15],w[15][15],v1[15][15],v[15][15],l[15][15],l1[15][15],x[15][15];
FILE *stream;
stream=fopen("in.txt","r");//读取文件用,
fscanf(stream,"%ld %ld",&r,&n);//调用in里面的数据
for(i=0;i<r;i++)
{
for(j=0;j<n;j++)
{
fscanf(stream,"%lf",&a[i][j]);
}
}
fscanf(stream,"%ld %ld",&t,&t);
for(i=0;i<=t-1;i++)
{
for(j=0;j<=t-1;j++)
{
fscanf(stream,"%lf",&p[i][j]);
}
}
fscanf(stream,"%ld %ld",&r,&m);
for(i=0;i<r;i++)
{
for(j=0;j<m;j++)
{
fscanf(stream,"%lf",&l[i][j]);
}
}
fclose(stream);
Zhuanzhi(a,b,r,n);
matrixMultiply(b,p,c,r,t,t);
matrixMultiply(c,a,nbb,t,t,t);
for(i=0;i<=n-1;i++)
for(long j=0;j<=n-1;j++)
z[i][j]=nbb[i][j];
Juzhenqiuni(nbb,n);
matrixMultiply(b,p,l1,n,r,r);
matrixMultiply(l1,l,w,n,r,n);
matrixMultiply(nbb,w,x,n,n,n);
matrixMultiply(a,x,v1,r,n,n);
Juzhenxiangjian(v1,l,v,r,n);
stream=fopen("out.txt","w");
fprintf(stream,"法方程系数 Nbb 为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
fprintf(stream,"%16e ",z[i][j]);
}
fprintf(stream,"\n");
}
fprintf(stream,"\n");
fprintf(stream,"法方程系数的逆 Nbb- 为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
fprintf(stream,"%16e",nbb[i][j]);
}
fprintf(stream,"\n");
}
fprintf(stream,"\n");
fprintf(stream," w 为:\n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<m;j++)
{
fprintf(stream,"%16e",w[i][j]);
}
fprintf(stream,"\n");
}
fprintf(stream,"\n");
fprintf(stream," x 为:\n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<m;j++)
{
fprintf(stream,"%16e",x[i][j]);
}
fprintf(stream,"\n");
}
fprintf(stream,"\n");
fprintf(stream,"改正数 v 为:\n");
for(i=0;i<=r-1;i++)
{
for(j=0;j<m;j++)
{
fprintf(stream,"%16e",v[i][j]);
}
fprintf(stream,"\n");
}
fclose(stream);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -