同样的代码为什么编译成DLL文件以后引用就报错呢?求高手解惑。
我是新手代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace matrix
{
public class Matrix
{
public double[,] ReverseMatrix(double[,] dMatrix, int Level)
{
double dMatrixValue = MatrixValue(dMatrix, Level);
if (dMatrixValue == 0)
return null;
double[,] dReverseMatrix = new double[Level, 2 * Level];
double x, c;
// Init Reverse matrix
for (int i = 0; i < Level; i++)
{
for (int j = 0; j < 2 * Level; j++)
{
if (j < Level)
dReverseMatrix[i, j] = dMatrix[i, j];
else
dReverseMatrix[i, j] = 0;
}
dReverseMatrix[i, Level + i] = 1;
}
for (int i = 0, j = 0; i < Level && j < Level; i++, j++)
{
if (dReverseMatrix[i, j] == 0)
{
int m = i;
for (; dMatrix[m, j] == 0; m++)
;
if (m == Level)
return null;
else
{
// Add i-row with m-row
for (int n = j; n < 2 * Level; n++)
dReverseMatrix[i, n] += dReverseMatrix[m, n];
}
}
// Format the i-row with "1" start
x = dReverseMatrix[i, j];
if (x != 1)
{
for (int n = j; n < 2 * Level; n++)
if (dReverseMatrix[i, n] != 0)
dReverseMatrix[i, n] /= x;
}
// Set 0 to the current column in the rows after current row
for (int s = Level - 1; s > i; s--)
{
x = dReverseMatrix[s, j];
for (int t = j; t < 2 * Level; t++)
dReverseMatrix[s, t] -= (dReverseMatrix[i, t] * x);
}
}
// Format the first matrix into unit-matrix
for (int i = Level - 2; i >= 0; i--)
{
for (int j = i + 1; j < Level; j++)
if (dReverseMatrix[i, j] != 0)
{
c = dReverseMatrix[i, j];
for (int n = j; n < 2 * Level; n++)
dReverseMatrix[i, n] -= (c * dReverseMatrix[j, n]);
}
}
double[,] dReturn = new double[Level, Level];
for (int i = 0; i < Level; i++)
for (int j = 0; j < Level; j++)
dReturn[i, j] = dReverseMatrix[i, j + Level];
return dReturn;
}
public static double MatrixValue(double[,] MatrixList, int Level)
{
double[,] dMatrix = new double[Level, Level];
for (int i = 0; i < Level; i++)
for (int j = 0; j < Level; j++)
dMatrix[i, j] = MatrixList[i, j];
double c, x;
int k = 1;
for (int i = 0, j = 0; i < Level && j < Level; i++, j++)
{
if (dMatrix[i, j] == 0)
{
int m = i;
for (; dMatrix[m, j] == 0; m++)
;
if (m == Level)
return 0;
else
{
// Row change between i-row and m-row
for (int n = j; n < Level; n++)
{
c = dMatrix[i, n];
dMatrix[i, n] = dMatrix[m, n];
dMatrix[m, n] = c;
}
// Change value pre-value
k *= (-1);
}
}
// Set 0 to the current column in the rows after current row
for (int s = Level - 1; s > i; s--)
{
x = dMatrix[s, j];
for (int t = j; t < Level; t++)
dMatrix[s, t] -= dMatrix[i, t] * (x / dMatrix[i, j]);
}
}
double sn = 1;
for (int i = 0; i < Level; i++)
{
if (dMatrix[i, i] != 0)
sn *= dMatrix[i, i];
else
return 0;
}
return k * sn;
}
}
}