65,210
社区成员
发帖
与我相关
我的任务
分享
double **A = new double*[8];
A[0] = new double(a11_1,a12_1,a13_1,a14_1,a15_1,a16_1);
A[1] = new double(a21_1,a22_1,a23_1,a24_1,a25_1,a26_1);
A[2] = new double(a11_2,a12_2,a13_2,a14_2,a15_2,a16_2);
A[3] = new double(a21_2,a22_2,a23_2,a24_2,a25_2,a26_2);
A[4] = new double(a11_3,a12_3,a13_3,a14_3,a15_3,a16_3);
A[5] = new double(a21_3,a22_3,a23_3,a24_3,a25_3,a26_3);
A[6] = new double(a11_4,a12_4,a13_4,a14_4,a15_4,a16_4);
A[7] = new double(a21_4,a22_4,a23_4,a24_4,a25_4,a26_4);
//矩阵A的转置矩阵A_zhuan
double **A_zhuan = new double*[6];
A_zhuan[0] = new double(a11_1,a21_1,a11_2,a21_2,a11_3,a21_3,a11_4,a21_4);
A_zhuan[1] = new double(a12_1,a22_1,a12_2,a22_2,a12_3,a22_3,a12_4,a22_4);
A_zhuan[2] = new double(a13_1,a23_1,a13_2,a23_2,a13_3,a23_3,a13_4,a23_4);
A_zhuan[3] = new double(a14_1,a24_1,a14_2,a24_2,a14_3,a24_3,a14_4,a24_4);
A_zhuan[4] = new double(a15_1,a25_1,a15_2,a25_2,a15_3,a25_3,a15_4,a25_4);
A_zhuan[5] = new double(a16_1,a26_1,a16_2,a26_2,a16_3,a26_3,a16_4,a26_4);
//矩阵L
double **L = new double*[8];
L[0] = new double(l_xa);
L[1] = new double(l_ya);
L[2] = new double(l_xb);
L[3] = new double(l_yb);
L[4] = new double(l_xc);
L[5] = new double(l_yc);
L[6] = new double(l_xd);
L[7] = new double(l_yd);
double **B = new double*[6];
for(int i=0; i<6; i++)
B[i] = new double[6];
double **C = new double*[6];
for(int j=0; j<6; j++)
C[j] = new double[8];
double **X = new double*[6];
for(int k=0; k<1; k++)
X[k] = new double[1];
brmul((double*)A_zhuan,(double*)A,6,8,6,(double*)B);
//矩阵A的转置矩阵乘以矩阵A,返回矩阵B
brinv((double*)B,6);
//矩阵B的逆
brmul((double*)B,(double*)A_zhuan,6,6,8,(double*)C);
//矩阵B的转置矩阵乘以矩阵A的转置矩阵,返回矩阵C
brmul((double*)C,(double*)L,6,8,1,(double*)X);
//矩阵C乘以矩阵L,返回矩阵X
//计算m_XS,m_YS,m_ZS,m_alfa,m_w,m_k的值
m_XS = initXS+(*(*(X+1)+1));
m_YS = initYS+(*(*(X+2)+1));
m_ZS = initZS+(*(*(X+3)+1));
m_alfa=initalfa+(*(*(X+4)+1));
m_w = initw+(*(*(X+5)+1));
m_k = initk+(*(*(X+6)+1));
//如果m_alfa或者m_w或者m_k的值大于0.1,
while((fabs(m_alfa)>=0.1)||(fabs(m_w)>=0.1)||(fabs(m_k)>=0.1))
{
initXS += *(*(X+1)+1);
initYS += *(*(X+2)+1);
initZS += *(*(X+3)+1);
initalfa += *(*(X+4)+1);
initw += *(*(X+5)+1);
initk += *(*(X+6)+1);
//释放二维数组所占用的空间
for(int k=0;k<1;k++)
delete [] X[k];
delete []A;
delete []A_zhuan;
for(int i=0;i<6;i++)
delete []B[i];
for(int j=0;j<6;j++)
delete []C[j];
delete []L;
//再从头计算一次
Function(initXS,initYS,initZS,initalfa,initw,initk);
return m_XS,m_YS,m_ZS,m_alfa,m_w,m_k;
}