/** * ���������С��������ĺ�˹�ɶ��±任�� * * @param mtxResult - Matrix�����ط��������� * @param mtxQ - Matrix�����غ�˹�ɶ��±任��Q���� * @param mtxR - Matrix�����غ�˹�ɶ��±任��R���� * @return bool �ͣ�����������Ƿ�ɹ� */ public bool GetRootsetMqr(Matrix mtxResult, Matrix mtxQ, Matrix mtxR) { int i,j; double d; // ������ķ�������δ֪������ int m = mtxLECoef.GetNumRows(); int n = mtxLECoef.GetNumColumns(); // ���췽���� if (m < n) return false; // ����������ʼ��Ϊ�������� mtxResult.SetValue(mtxLEConst); double[] pDataConst = mtxResult.GetData(); // ������ʱ��������QR�ֽ� mtxR.SetValue(mtxLECoef); double[] pDataCoef = mtxR.GetData(); // QR�ֽ� if (! mtxR.SplitQR(mtxQ)) return false; // ��ʱ������ double[] c = new double[n]; double[] q = mtxQ.GetData(); // ��� for (i=0; i<=n-1; i++) { d=0.0; for (j=0; j<=m-1; j++) d=d+q[j*m+i]*pDataConst[j]; c[i]=d; } pDataConst[n-1]=c[n-1]/pDataCoef[n*n-1]; for (i=n-2; i>=0; i--) { d=0.0; for (j=i+1; j<=n-1; j++) d=d+pDataCoef[i*n+j]*pDataConst[j]; pDataConst[i]=(c[i]-d)/pDataCoef[i*n+i]; } return true; }