int MLS_Calc(int x_val,float x[],float y[])
{
int max_delta=max_x-min_x;//区域半径
float p[M][N]={0};
float sumf[N][N]={0};
float w[M]={0};
for(int j=0;j<M;j++)//求 w
{
float s=fabs((x[j]-x_val))/max_delta;
if(s<=0.5)
w[j]=2/3.0-4*s*s+4*s*s*s;
else
{
if(s<=1)
w[j]=4/3.0-4*s+4*s*s-4*s*s*s/3.0;
else
w[j]=0;
}
p[j][0]=1;//每个采样点计算基函数
p[j][1]=x[j];
p[j][2]=y[j];
p[j][3]=x[j]*x[j];
p[j][4]=x[j]*y[j];
p[j][5]=y[j]*y[j];
}
f(w,x,y,sumf,p);//计算得出 A 矩阵
float p1[N];
Matrix A=Trans_Matrix(sumf,N);
Matrix A_1=m_c.Matrix_copy(&A);
m_c.Matrix_inv(&A_1);//求 A 矩阵的逆 A_1
Matrix B(N,1);//求矩阵 B,N 行 M 列
B.init_Matrix();
for(int j=0;j<M;j++)//求得 B 矩阵的每列
{
p1[0]=1*w[j];
p1[1]=x[j]*w[j];
p1[2]=y[j]*w[j];
p1[3]=x[j]*x[j]*w[j];
p1[4]=x[j]*y[j]*w[j];
p1[5]=y[j]*y[j]*w[j];
Matrix P=Trans_Matrix_One(p1,N);//数组 P1 转成 1 行 N 列的 P 矩阵
if(j==0)//第一列直接赋值
评论0