/// <summary>
/// 实现三阶行列式求值计算
/// </summary>
/// <param name="x1"></param>
/// <param name="y1"></param>
/// <param name="z1"></param>
/// <param name="x2"></param>
/// <param name="y2"></param>
/// <param name="z2"></param>
/// <param name="x3"></param>
/// <param name="y3"></param>
/// <param name="z3"></param>
/// <returns></returns>
private double gDeterm3(double x1,
double y1,
double z1,
double x2,
double y2,
double z2,
double x3,
double y3,
double z3)
{
return x1 * y2 * z3 +
y1 * z2 * x3 +
z1 * x2 * y3 -
z1 * y2 * x3 -
y1 * x2 * z3 -
x1 * z2 * y3;
}
private void button1_Click(object sender, EventArgs e)
{ //初始化坐标值
double[] xArr = new double[16] { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 };
double[] yArr = new double[16] { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 };
double[] zArr = new double[16] { 5, 4, 1, 1, 9, 7, 3, -1, 9, 5, 2, -3, 1, -2, 0, 3 };
//初始化需要的变量
double x1 = 0d, x2 = 0d, y1 = 0d, y2 = 0d, z1 = 0d, xz = 0d, yz = 0d, xy = 0d, r = 0d;
//计算
for (int i = 0; i < xArr.Length; i++)
{
x1 += xArr[i];
x2 += xArr[i] * xArr[i];
xz += xArr[i] * zArr[i];
y1 += yArr[i];
y2 += yArr[i] * yArr[i];
yz += yArr[i] * zArr[i];
z1 += zArr[i];
xy += xArr[i] * yArr[i];
}
string res = "";
r = gDeterm3(x2, xy, x1, xy, y2, y1, x1, y1, xArr.Length);
res += "R ="+r+",";
if (r != 0) {
res += "A =" + gDeterm3(xz, xy, x1, yz, y2, y1, z1, y1, xArr.Length) / r + ",";
res += "B =" + gDeterm3(x2, xz, x1, xy, yz, y1, x1, z1, xArr.Length) / r + ",";
res += "C =" + gDeterm3(x2, xy, xz, xy, y2, yz, x1, y1, z1) / r;
}
this.label1.Text = res;
}