空間直線的最小二乘擬合

2021-08-19 19:45:52 字數 1993 閱讀 2759

**:

注意:用(y-y0)/n = (z-z0)/m1 = x/1推導得出的m1理想狀態下應為m的倒數,但實際情況並非如此。

可推算m*m1 = sqr(p(x,z)) = sqr(conv(x, z))/(var(x)*var(z)), 也就是x和z線性相關係數的平方。

理論推導過程:

求矩陣即可得到m,n,x0,y0,直線方程的各個引數即為所得。

#include 

#include 

#include 

#include 

#define max 10

#define ptsum 38

#define mtx_amt 100

void inverse(double *matrix1,double *matrix2,int n,double d);

double determinant(double* matrix,int n);

double alco(double* matrix,int jie,int row,int column);

double cofactor(double* matrix,int jie,int row,int column);

void empty(double *matrix,int row,int column);

int main(int argc, char* argv)

double x0,y0,m,n;//這是待擬合的四個引數,已知分別對應:1、2、3、2現在我們來擬合

for ( i = 0;i < 2;i++)

empty(matrix,2,2);//將矩陣的前兩行兩列置位0

for (int j = 0;j < ptsum;j++)//

*(matrix[1] + 0) = *(matrix[0] + 1);//matrix[1][0]=z;

*(matrix[1] + 1) = 1.0*ptsum;//matrix[1][1]=n;

//下面兩步是求matrix的逆矩陣並存到imatrix中

//a^(-1)=(1/|a|)×a* ,其中a^(-1)表示矩陣a的逆矩陣,其中|a|為矩陣a的行列式,a*為矩陣a的伴隨矩陣。

double d = determinant(matrix,2);

inverse(matrix,imatrix,2,d);//反轉存到imatrix中

empty(matrix,2,2);

for ( i = 0;i < ptsum;i++)

m = *(matrix[0] + 0)**(imatrix[0] + 0) + *(matrix[0] + 1)**(imatrix[1] + 0);

x0= *(matrix[0] + 0)**(imatrix[0] + 1) + *(matrix[0] + 1)**(imatrix[1] + 1);

n = *(matrix[1] + 0)**(imatrix[0] + 0) + *(matrix[1] + 1)**(imatrix[1] + 0);

y0= *(matrix[1] + 0)**(imatrix[0] + 1) + *(matrix[1] + 1)**(imatrix[1] + 1);

printf("%5.2f\t%5.2f\t%5.2f\t%5.2f\t",x0,y0,m,n);

for ( i = 0;i < 2;i++)

getchar();

return 0; }

void empty(double *matrix,int row,int column)//初始化

} }

void inverse(double *matrix1,double *matrix2,int n,double d) // { 

int i,j; 

for(i=0;i

halcon之最小二乘擬合直線

如果不了解最小二乘演算法 請先閱讀 least squares的演算法細節原理 通常在halcon中擬合直線會用houghline或者 fitline。本文提供一種新的選擇,用halcon的矩陣操作實現最小二乘擬合直線 首先隨機生成一組資料mx 100 10 500 tuple length mx,...

最小二乘擬合 6 7 最小二乘擬合問題

資料擬合問題的一般形式 任給一組離散資料 注 這裡的擬合函式不一定為多項式函式 記殘量的平方和為 求使得殘量平方和最小得一組係數就是線性最小二乘問題,為最小二乘問題得基函式,求得的擬合函式為資料的最小二乘擬合。求解 利用偏導數為零得到極值點的原理可以得到最小二乘問題滿足的方程組,求解方程組中未知係數...

最小二乘擬合

來自 某小皮 最優化函式庫optimization 優化是找到最小值或等式的數值解的問題。scipy.optimization子模組提供函式最小值,曲線擬合和尋找等式的根的有用演算法。最小二乘擬合 假設有一組實驗資料 xi,yi 事先知道它們之間應該滿足某函式關係yi f xi 通過這些已知的資訊,...