《众所周知》,在线性代数这门课中,我们学习了两种解线性方程组的方法:克莱姆法则(Cramer's Rule)和矩阵消元法。但是在考研数学李永乐的课堂上了解到,由于计算量太大,克莱姆法则并不适合解线性方程组(亏我还在洪老师课堂上给学弟学妹们安利这种方法解方程组,我错了)。那么,使用克莱姆法则的效率到底能低到什么程度呢?本文将使用C#语言在Debug模式下分别使用两种方法解10000个含有30个未知数,30个方程的非齐次线性方程组,以比较它们的优劣。为了简化测评,本程序的测试数据均排除了方程组无解的情况,确保方程组有且仅有唯一解。
C#代码如下:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace ConsoleApp1
{
class Program
{
class Dets
{
public double[,] xishu, zengguang;
public double[][,] replace;
}
const int N = 30;
static void Main(string[] args)
{
Random rand = new Random();
List<Dets> dets = new List<Dets>();
while (dets.Count < 10000)
{
Dets d = new Dets();
d.xishu = new double[N, N];
d.zengguang = new double[N, N + 1];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
d.zengguang[i, j] = d.xishu[i, j] = rand.NextDouble();
}
d.zengguang[i, N] = rand.NextDouble();
}
if (getDet(d.xishu) == 0) continue;
d.replace = new double[N][,];