关于c#求解行列式的问题

我用c#设计求解行列式的程序代码如下namespacevcp{publicpartialclassForm3:Form{publicForm3(){InitializeC... 我用c#设计求解行列式的程序代码如下

namespace vcp
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}

private void Form3_Load(object sender, EventArgs e)
{
double[,] m = new double[3, 3] { {1, 2, 2.3 }, { 4, 5, 7 }, { 6, 17, 12 } }; dmat dm = new dmat(m); label1.Text = dm.det().ToString();

}
}
class dmat
{private double[,] a,b;
public dmat(double[,] a_)//构造函数
{
a = new double[a_.GetLength(0), a_.GetLength(1)]; b = new double[a.GetLength(0), a.GetLength(1)];
for (int i = 0; i < a_.GetLength(0); i++)
{
for (int j = 0; j < a_.GetLength(1); j++)
{ a[i, j] = a_[i, j]; b[i, j] = a_[i, j]; ; }
}
}
public void row_change(int m, int n)//交换两行
{
for (int i = 0; i < b.GetLength(1); i++)
{ double p = b[m - 1, i]; b[m - 1, i] = b[n - 1, i]; b[n - 1, i] = p; }
}
public void row_kadd(int m, int n, double k)//一行倍加到另一行上
{
for (int i = 0; i < b.GetLength(1); i++)
{ b[m - 1, i] = b[m - 1, i] + b[n - 1, i] * k; }
}
public double det()
{
int m = 0;
for (int i = 0; i < b.GetLength(1); i++)
{
int j = 0;
if (b[i, i] == 0)//主对角线上元素为0与另一行交换
{
for (j = i + 1; j < b.GetLength(0); j++)
if (b[j, i] != 0) break;
if (j < b.GetLength(0)) { row_change(i + 1, j + 1); m++; }
}
for (j = i + 1; j < b.GetLength(0); j++)//把第i列上不为0的元素通过倍加变为0
{ if (b[j, i] != 0) row_kadd(j + 1, i + 1, -b[j, i] / b[i, i]); }
}
//我认为上面已经变为上三角行列式,但是输出的结果不是行列式的值,我找不到原因
double y = 1;
for (int i = 0; i < b.GetLength(1); i++)
y = y * b[i, i];
return Math.Pow(-1,m) * y;
}
}
}
通过上面调用det函数我认为上面已经把二维数组b变为上三角行列式,但是输出的结果不是行列式的值,我找不到原因,请各位网友问题出在哪里,拜托了各位 ,多谢多谢!
展开
 我来答
yy...1@sohu.com
2018-10-26 · 超过72用户采纳过TA的回答
知道小有建树答主
回答量:224
采纳率:0%
帮助的人:27.2万
展开全部
这一句错了
set { myAge = Age; }
把它改成
set { myAge = value; }
你的myAge是你定义的一个字段,开始的时候它拥有一个初始值0,当你个你的属性Age赋值的时候,会首先调用你的set方法,而在你的set方法中使用到了myAge = Age 这里又用到了你的属性Age 而用它的时候会调用它的get方法,你的get方法返回的是myAge的值(此时它为0),所以你又将0给了它,所以你的值一直没有发生改变,一直为0! 我们在设置属性时它本身虚厅有一个默认的参数value 它代表赋给的值,所以你的语句应该改成上面的! 能理解吗?将明岁我上面的话激誉睁多读几次就能理解了!书读百遍,其义自现!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式