-
大小: 1.16MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2024-02-05
- 語言: C/C++
- 標(biāo)簽:
資源簡(jiǎn)介
絕對(duì)是好東西啊!基于極大似然估計(jì)的三維定位算法,輸入?yún)⒖键c(diǎn)的坐標(biāo)以及觀察點(diǎn)的距離,通過極大似然估計(jì)算法計(jì)算出觀察點(diǎn)的坐標(biāo),附送支持矩陣運(yùn)算的C++類庫!

代碼片段和文件信息
//?LMLE.cpp?:?定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
#include?“stdafx.h“
//
//
//int?_tmain(int?argc?_TCHAR*?argv[])
//{
// return?0;
//}
//?LMLE.cpp?:?定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
///////////////////////////必要的包含頭///////////////////////////////////
//如果要使用Matrix類,就必須包含下面文件
#include?“matrix.h“
//為保證正確使用計(jì)算空間,進(jìn)行如下的命名空間引用以及宏定義
#ifndef?_NO_NAMESPACE
using?namespace?std;
using?namespace?math;
#define?STD?std
#else
#define?STD
#endif
#ifndef?_NO_TEMPLATE
typedef?matrix?Matrix;
#else
typedef?matrix?Matrix;
#endif
//如果要講LMLE函數(shù)進(jìn)行移植的話,請(qǐng)將上面部分保留到移植的文件中
//////////////////////////////////////////////////////////////////////////
//?LMLE用于計(jì)算已知n個(gè)觀測(cè)點(diǎn)P的三維坐標(biāo),以及到被觀測(cè)目標(biāo)的距離L的情況下,估算觀測(cè)目標(biāo)的三維坐標(biāo)
//?因L存在誤差因此采用LMLE即線性最大似然比模型求估計(jì)解
//?為保證計(jì)算不會(huì)出錯(cuò),請(qǐng)一定保證每個(gè)觀測(cè)點(diǎn)位置是不一樣,即觀測(cè)值不能完全一樣,這樣保證矩陣滿秩,才可以求逆
double?*?LMLE(double?*?Pdouble?*Lint?n)
{
Matrix?A(n3);//觀測(cè)矩陣
Matrix?b(n1);//觀測(cè)結(jié)果
Matrix?X(31);//求解坐標(biāo),xdydhd
//下面根據(jù)PL生成觀測(cè)矩陣H
int?ijk;
double?xkxjykyjhkhjljlk;
for?(i=0;i {
j?=?i;?k?=?(i+1)%n;//后面的點(diǎn)與前面的點(diǎn)求差,最后一個(gè)與第一個(gè)求差
xk?=?*(P+3*k);
xj?=?*(P+3*j);
yk?=?*(P+3*k+1);
yj?=?*(P+3*j+1);
hk?=?*(P+3*k+2);
hj?=?*(P+3*j+2);
lk?=?*(L+k);
lj?=?*(L+j);
A(i0)?=?2*(xk-xj);
A(i1)?=?2*(yk-yj);
A(i2)?=?2*(hk-hj);
b(i0)=?lj*lj-lk*lk+xk*xk-xj*xj+yk*yk-yj*yj+hk*hk-hj*hj;//即公式:lj^2-lk^2+xk^2-xj^2+yk^2-yj^2+hk^2-hj^2
}
X?=?(!((~A)*A))*(~A)*b;//即(AT*A)*(AT)*bAT表示A的轉(zhuǎn)置
double?*?P0?=?new?double[3];
P0[0]?=?X(00);
P0[1]?=?X(10);
P0[2]?=?X(20);
return?P0;
}
int?main(int?argc?char*?argv[])
{
double?*?P;??//已知的幾個(gè)觀測(cè)位置坐標(biāo),格式:x1y1h1x2y2h2....
double?*?L;??//觀測(cè)到的距離,格式:L1L2L3...
int?n; ?//觀測(cè)站的數(shù)目:3到8
//以下是數(shù)據(jù)輸入初始化,請(qǐng)根據(jù)自己需要,自行設(shè)置:
n?=?4;
P?=?new?double[12];
P[0]?=?4.2;
P[1]?=?20.0;
P[2]?=?0.0;
P[3]?=?8.2;
P[4]?=?13.7;
P[5]?=?0.5;
P[6]?=?4.7;
P[7]?=?17.2;
P[8]?=?1.0;
P[9]?=?5.5;
P[10]?=?10.5;
P[11]?=?0;
L?=?new?double[4];
L[0]?=?2.881996;
L[1]?=?2.881996;
L[2]?=?2.998050;
L[3]?=?2.939451;
//調(diào)用LMLE()計(jì)算輸出結(jié)果如果前面數(shù)據(jù)初始化了,下面兩行可以去除注釋,可以計(jì)算結(jié)果
double?*?p0;//計(jì)算出來的結(jié)果,p0[3]方式存儲(chǔ)
p0?=?LMLE(PLn);
//輸出p0
printf(“xd=%fyd=%fhd=%f\n“p0[0]p0[1]p0[2]);
scanf(“%d“&n);
return?0;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????61440??2012-11-02?14:01??LMLE\debug\LMLE.exe
?????文件?????387516??2012-11-02?14:01??LMLE\debug\LMLE.ilk
?????文件?????584704??2012-11-02?14:01??LMLE\debug\LMLE.pdb
?????文件??????20944??2012-11-02?14:01??LMLE\LMLE\Debug\BuildLog.htm
?????文件????????406??2012-11-02?14:00??LMLE\LMLE\Debug\LMLE.exe.em
?????文件????????472??2012-11-02?14:00??LMLE\LMLE\Debug\LMLE.exe.em
?????文件????????388??2012-11-02?14:01??LMLE\LMLE\Debug\LMLE.exe.intermediate.manifest
?????文件??????77715??2012-11-02?14:01??LMLE\LMLE\Debug\LMLE.obj
?????文件????1048576??2012-11-02?14:00??LMLE\LMLE\Debug\LMLE.pch
?????文件?????????65??2012-11-02?14:01??LMLE\LMLE\Debug\mt.dep
?????文件??????10868??2012-11-02?14:00??LMLE\LMLE\Debug\stdafx.obj
?????文件?????183296??2012-11-02?14:01??LMLE\LMLE\Debug\vc80.idb
?????文件?????249856??2012-11-02?14:01??LMLE\LMLE\Debug\vc80.pdb
?????文件???????2600??2012-11-02?14:01??LMLE\LMLE\LMLE.cpp
?????文件???????4538??2012-09-05?14:27??LMLE\LMLE\LMLE.vcproj
?????文件???????1403??2012-11-02?14:03??LMLE\LMLE\LMLE.vcproj.HZT.Administrator.user
?????文件??????27343??2012-09-05?14:27??LMLE\LMLE\matrix.h
?????文件????????932??2012-09-05?14:27??LMLE\LMLE\ReadMe.txt
?????文件??????21804??2012-11-02?14:03??LMLE\LMLE\Release\BuildLog.htm
?????文件????????383??2012-11-02?14:03??LMLE\LMLE\Release\LMLE.exe.intermediate.manifest
?????文件?????463479??2012-11-02?14:03??LMLE\LMLE\Release\LMLE.obj
?????文件????1048576??2012-11-02?14:03??LMLE\LMLE\Release\LMLE.pch
?????文件?????????65??2012-11-02?14:03??LMLE\LMLE\Release\mt.dep
?????文件??????29508??2012-11-02?14:03??LMLE\LMLE\Release\stdafx.obj
?????文件?????101376??2012-11-02?14:03??LMLE\LMLE\Release\vc80.idb
?????文件?????217088??2012-11-02?14:03??LMLE\LMLE\Release\vc80.pdb
?????文件????????209??2012-09-05?14:27??LMLE\LMLE\stdafx.cpp
?????文件????????378??2012-09-05?14:27??LMLE\LMLE\stdafx.h
?????文件????2059264??2012-11-02?14:03??LMLE\LMLE.ncb
?????文件????????877??2012-09-05?14:27??LMLE\LMLE.sln
............此處省略12個(gè)文件信息
評(píng)論
共有 條評(píng)論