求用C#编程实现:求一个多元一次方程组解
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/18 18:52:34
求用C#编程实现:求一个多元一次方程组解
要求:1.用c#实现 2.这个多元是未知的例如可能是一元可能是二元等等
各位大哥大姐帮小弟下吧.
是一个线性方程组.网上说可以使用逆矩阵来解但我还是不知道该从何做起,线性代数学得很烂啊.
要求:1.用c#实现 2.这个多元是未知的例如可能是一元可能是二元等等
各位大哥大姐帮小弟下吧.
是一个线性方程组.网上说可以使用逆矩阵来解但我还是不知道该从何做起,线性代数学得很烂啊.
![求用C#编程实现:求一个多元一次方程组解](/uploads/image/z/18529979-59-9.jpg?t=%E6%B1%82%E7%94%A8C%23%E7%BC%96%E7%A8%8B%E5%AE%9E%E7%8E%B0%EF%BC%9A%E6%B1%82%E4%B8%80%E4%B8%AA%E5%A4%9A%E5%85%83%E4%B8%80%E6%AC%A1%E6%96%B9%E7%A8%8B%E7%BB%84%E8%A7%A3)
高斯消元 再代回原方程求解
算法如下
_rows是指方程组行数;_cols是列数
void gaoss(double[,]a)//高斯消元求未知数X,
{
string print = "";
int L = _rows - 1;
int i,j,l,n,m,k = 0;
double[] temp1 = new double[_rows];
/*第一个do-while是将增广矩阵消成上三角形式*/
do
{
n = 0;
for (l = k; l < L; l++)
temp1[n++] = a[l + 1,k] / a[k,k];
for (m = 0,i = k + 1; i < _rows; i++,m++)
{
for (j = k; j < _cols; j++)
a[i,j] -= temp1[m] * a[k,j];
}
k++;
} while (k < _rows);
///*第二个do-while是将矩阵消成对角形式,并且重新给k赋值,最后只剩下对角线和最后一列的数,其它都为0*/
k = L - 1;
do
{
n = 0;
for (l = k; l >= 0; l--)
temp1[n++] = a[k - l,k + 1] / a[k + 1,k + 1];
for (m = 0,i = k; i >= 0; i--,m++)
{
for (j = k; j < _cols; j++)
a[k - i,j] -= temp1[m] * a[k + 1,j];
}
k--;
} while (k >= 0);
/*下一个for是解方程组*/
for (i = 0; i < _rows; i++)
{
double value = a[i,_rows] / a[i,i];
print += "X"+(i+1)+"="+value+" ";
}
MessageBox.Show(print,"方程的解为:");
}
算法如下
_rows是指方程组行数;_cols是列数
void gaoss(double[,]a)//高斯消元求未知数X,
{
string print = "";
int L = _rows - 1;
int i,j,l,n,m,k = 0;
double[] temp1 = new double[_rows];
/*第一个do-while是将增广矩阵消成上三角形式*/
do
{
n = 0;
for (l = k; l < L; l++)
temp1[n++] = a[l + 1,k] / a[k,k];
for (m = 0,i = k + 1; i < _rows; i++,m++)
{
for (j = k; j < _cols; j++)
a[i,j] -= temp1[m] * a[k,j];
}
k++;
} while (k < _rows);
///*第二个do-while是将矩阵消成对角形式,并且重新给k赋值,最后只剩下对角线和最后一列的数,其它都为0*/
k = L - 1;
do
{
n = 0;
for (l = k; l >= 0; l--)
temp1[n++] = a[k - l,k + 1] / a[k + 1,k + 1];
for (m = 0,i = k; i >= 0; i--,m++)
{
for (j = k; j < _cols; j++)
a[k - i,j] -= temp1[m] * a[k + 1,j];
}
k--;
} while (k >= 0);
/*下一个for是解方程组*/
for (i = 0; i < _rows; i++)
{
double value = a[i,_rows] / a[i,i];
print += "X"+(i+1)+"="+value+" ";
}
MessageBox.Show(print,"方程的解为:");
}