这里就设为一个方阵吧,设有两个方阵,A1 和A2,
要求: C=A1/A2;
要求: C=A1/A2;
解决方案 »
- C#网络编程关于Accept()函数的问题
- 请教一个List数据传递的问题
- [WinForm]AxWebBrowser浏览网页,怎么获取网页中图片的属性
- C#打印网页问题
- 写类库时应该注意那些问题?希望大家能够讨论一下,交流下经验哦!
- 如何将VB.net项目转换成C#项目
- 请问如何实现点击richtextbox中的超链后在ie中打开该地址
- ??
- 文本文件里如何读出指定文字? 求救!
- (100分)我写了一个WinForm,里面嵌了一个VB写得OCX控件,在当作smartclient运行时出现线程错误.各位高手来看看
- 读网页的方法
- 如何在一个局域网同时使用sql server 7 和sql server 2005
public class MatrixLab
{
private static int N;
private double[,] A;
private double[] U;
private double[] V;
private int[] Z; public MatrixLab(int n, double[,] a)
{
N = n;
A = new double[N, N];
U = new double[N];
V = new double[N];
buildMatrix(a);
} private void buildMatrix(double[,] a)
{
if (a.Rank == A.Rank)
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
A[i, j] = a[i, j];
}
}
}
} public double[,] invertMatrix()
{
int i = 0;
Z = new int[N];
for (i = 0; i < N; i++)
{
Z[i] = i;
} int K = 0;
int L = 0;
double D = 0;
double maxA = 0;
int t = 0;
double Ck = 0;
while (K != N)
{
maxA = Math.Abs(A[K, K]);
L = K;
i = K + 1;
while (i != N)
{
if (Math.Abs(A[i, K]) > maxA)
{
maxA = Math.Abs(A[i, K]);
L = i;
}
i++;
}
i = 0;
D = A[L, K];
Z[K] = L;
if (D == 0)
break; int j = 0;
if (L != K)
{
for (j = 0; j < N; j++)
{
double tmp = A[K, j];
A[K, j] = A[L, j];
A[L, j] = tmp;
}
}
Ck = 1 / A[K, K];
A[K, K] = Ck;
for (j = 0; j < N; j++)
{
if (j != K)
A[K, j] = A[K, j] * Ck;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (i != K && j != K)
A[i, j] = A[i, j] - A[i, K] * A[K, j];
}
}
for (i = 0; i < N; i++)
{
if (i != K)
A[i, K] = -A[i, K] * Ck;
}
K++;
}
K = N - 2;
while (K >= 0)
{
t = Z[K];
if (t != K)
for (i = 0; i < N; i++)
{
double tmp = A[i, K];
A[i, K] = A[i, t];
A[i, t] = tmp;
}
K--;
}
return A;
} public override string ToString()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
sb.Append(A[i, j] + " ");
}
sb.Append("\n");
}
return sb.ToString();
} public static MatrixLab operator /(MatrixLab ml1, MatrixLab ml2)
{
return new MatrixLab(N, MultiplyMatrix(ml1.A, ml2.invertMatrix()));
} public static double[,] MultiplyMatrix(double[,] MatrixEin, double[,] MatrixZwei)
{
double[,] MatrixResult = new double[N, N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
for (int k = 0; k < N; k++)
MatrixResult[i, j] += MatrixEin[i, k] * MatrixZwei[k, j];
return MatrixResult;
}
}class main
{
static void Main()
{
double[,] da1 = {
{1,3,5},
{5,6,7},
{0,1,3}
};
double[,] da2 = {
{3,3,5},
{5,1,7},
{0,7,12}
};
MatrixLab ml1 = new MatrixLab(3, da1);
MatrixLab ml2 = new MatrixLab(3, da2);
Console.Write((ml1 / ml2).ToString());
}
}
感谢 psychese !