所有代碼:
#include <iostream>
#include <cmath>
using namespace std;
double B[7][3], b[3][7], P[7][7], l[7], S[7];
double NBB[3][3], w[3][7], W[7], Nbb[3][3], x[3], V[7];
class leveling_adjustment {
public:
/*-------------------計算高程-----------------------------------------*/
void calculate_elevation();
/*-------------------計算中誤差------------------------------------------*/
void middle_error_different();
private:
double H1=5.016,H2=6.016,H3, H4, H5;
double L13 = 1.359, L14 = 2.009, L52 = -0.595;
};
/*-------------------計算高程-----------------------------------------*/
void leveling_adjustment::calculate_elevation() {
/*-------------------------------輸入l矩陣*/
cout << "請輸入l矩陣" << endl;
for (int i = 0; i < 7; i++)
cin >> l[i];
cout << "請輸入s矩陣" << endl;
for (int i = 0; i < 7; i++)
cin >> S[i];
/*------------------------------------輸入B矩陣*/
cout << "請輸入B矩陣" << endl;
for (int i = 0; i < 7; i++)
for (int j = 0; j < 3; j++) {
cin >> B[i][j];
}
cout << "請輸入b矩陣" << endl;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 7; j++)
cin >> b[i][j];
cout << "輸出B矩陣" << endl;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 3; j++)
cout << B[i][j] << ' ';
cout << endl;
}
cout << "取5公里的觀測高差為單位權觀測" << endl;
for (int i = 0; i < 7; i++)
P[i][i] = 5.0 / S[i];
for (int i = 0; i < 7; i++)
for (int j = 0; j < 7; j++)
if (i != j)
P[i][j] = 0;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++)
cout << P[i][j] << ' ';
cout << endl;
}
/*--------------------------計算NBB矩陣----------------------------*/
/*----------------------計算W矩陣-------------------------------*/
NBB[0][0] = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 7; j++)
for (int k = 0; k < 7; k++) {
NBB[i][j] += b[i][k] * P[k][j];
}
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 7; k++) {
NBB[i][j] += NBB[j][k] * B[k][j];
}
cout << "輸出NBB矩陣" << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++)
cout << NBB[i][j] << ' ';
cout << endl;
}
w[0][0] = 0;
W[0] = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 7; j++)
for (int k = 0; k < 7; k++) {
w[i][j] += b[i][k] * P[k][j];
}
for (int i = 0; i < 3; i++)
for (int j = 0; j < 7; j++) {
W[j] += w[i][j] * l[j];
}
cout << "輸出W矩陣" << endl;
for (int i = 0; i < 7; i++)
cout << W[i] << ' ' << endl;
/*---------------------------計算NBB矩陣的逆-----------------*/
/*---------------------------計算引數改正數------------------*/
/*---------------------------計算改正數----------------------*/
cout << "輸入Nbb矩陣" << endl;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
cin >> Nbb[i][j];
x[0] = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
x[i] += Nbb[i][j] * W[j];
V[0] = 0;
for (int i = 0; i < 7; i++)
for (int j = 0; j < 3; j++)
V[i] += B[i][j] * x[j];
H3 = H1 + L13 + V[0] / 1000;
H4 = H1 + L14 + V[1] / 1000;
H5 = H2 + L52 + V[7] / 1000;
cout << "第三點的高程:" << H3 << endl;
cout << "第四點的高程:" << H4 << endl;
cout << "第五點的高程:" << H5 << endl;
}
可能出問題的地方:
/*-------------------計算中誤差------------------------------------------*/
void leveling_adjustment::middle_error_different(){
double a0=0,a[7],a3,a4,ah,Q[3],q=0,f[3];
a[0] = 0;
for (int i = 0; i < 7; i++)
for (int j = 0; j < 7; j++)
a[i] += V[j] * P[i][j];
for (int j = 0; j < 7; j++)
a0+= a[j] * V[j];
cout << a0 << endl;
/*------------------------------------單位權中誤差----------------------------*/
a0 = sqrt(a0/4);
cout << "單位權中誤差為:" << a0 << endl;
/*--------------------高程中誤差----------------------------------------------*/
a3 = a0 * sqrt(Nbb[0][0]);
cout << "3號點的高程中誤差為:" << a3 << endl;
a4 = a0 * sqrt(Nbb[1][1]);
cout << "4號點的高程中誤差為:" << a4 << endl;
/*---------------------------高差中誤差----------------------------------------*/
Q[0] = 0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Q[i] += f[i] * Nbb[j][i];
for (int i = 0; i < 3; i++)
q += Q[i] * f[i];
ah = a0 * sqrt(q/4);
cout << "34號點間的高差中誤差為:" << ah << endl;
}
/*------------------計算高程中誤差-------------------------------------------*/
int main() {
leveling_adjustment c;
c.calculate_elevation();
c.middle_error_different();
return 0;
}


輸入驗證資料:
0 0 4 3 7 2 0
1.1 1.7 2.3 2.7 2.4 1.4 2.6
1 0 0
0 1 0
1 0 0
0 1 0
-1 1 0
-1 0 1
0 0 -1
1 0 1 0 -1 -1 0
0 1 0 1 1 0 0
0 0 0 0 0 1 -1
0.1063 0.0324 0.0696
0.0324 0.1548 0.0212
0.0696 0.0212 0.2274
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/24083.html
標籤:C++ 語言
上一篇:咨詢C++ 資料批量處理問題
下一篇:請求幫助TT TT
