📄 matrix.cs
字号:
using System;
namespace szfx
{
/// <summary>
/// Summary description for matrix.
/// </summary>
public class matrix
//矩阵类
{
public matrix()
{
//
// TODO: Add constructor logic here
//
}
public static void printhls(float[,] a)//打印行列式
{
int maxi,maxj,i,j;
maxi = a.GetLength(0);
maxj = a.GetLength(1);
for(i=0;i<maxi;i++)
{
for(j=0;j<maxj;j++)
{
if(a[i,j] < 0.00001)
a[i,j] = 0;
Console.Write("{0,-9}\t",a[i,j]);
}
Console.WriteLine();
}
}
public static bool liezhuyuan(float[,] a)
{
int maxi,n;
n = a.GetLength(0);
for(int k = 0 ;k < n;k++)
{
maxi = FindMaxi(a,k);
if(maxi != k)
{
changeitoj(a,k,maxi);
}
}
return true;
}
//将矩阵A与一个向量组b合并成为一个增广矩阵
//这个函数有一个问题,我想将原来传入的A变成增广矩阵a,并负值给A,将它传回
//可是函数执行完了就变回去了,我想得到一个传回的增广矩阵我应改怎么做呀
public static float[,] addAb(float[,] A,float[] b)
{
int maxi,maxj,maxk,i,j;
maxi = A.GetLength(0);
maxj = A.GetLength(1);
maxk = b.Length;
if( maxi != maxk)
return null;
float[,] a =new float[maxi,maxj+1];
for(i = 0;i < maxi;i++)
for(j = 0;j < maxj;j++)
a[i,j] = A[i,j];
for(i = 0;i < maxi;i++)
a[i,maxj] = b[i];
A = a;
return a;
}
//找出行列式a中j列的最大行
public static int FindMaxiall(float[,] a,int j1)
{
int maxi,maxj;
int i,j;
float temp;
maxi = a.GetLength(0);
maxj = a.GetLength(1);
int i_return = -1;
j = j1;
if( j > maxj )
return -1;
j--;
temp = a[0,j];
for(i=1;i<maxi;i++)
{
if(temp < a[i,j])
{
temp = a[i,j];
i_return = i;
}
}
return i_return;
}
//找出行列式a中j级子式的最大行
public static int FindMaxi(float[,] a,int j1)
{
int maxi,maxj;
int i,j;
float temp;
maxi = a.GetLength(0);
maxj = a.GetLength(1);
int i_return = -1;
j = j1;
if( j > maxj )
return -1;
j--;
temp = a[0,j];
for(i=j+1;i<maxi;i++)
{
if(temp < a[i,j])
{
temp = a[i,j];
i_return = i;
}
}
return i_return;
}
//交换矩阵a的i1行i2行
public static bool changeitoj(float[,] a,int i1,int i2)
{
int maxi,maxj;
int j;
float temp;
maxi = a.GetLength(0);
maxj = a.GetLength(1);
if((i1 > maxi) || i2 >maxi)
return false;
i1--;i2--;
for(j = 0;j < maxj;j++)
{
temp = a[i2,j];
a[i2,j] = a[i1,j];
a[i1,j] = temp;
}
return true;
}
//将增广矩阵a化为上三角增广阵
public static bool eliminant(float[,] a)
{
int maxi,maxj,i,j;
float aik,akk;
maxi =a.GetLength(0);
maxj = a.GetLength(1);
for(j = 0;j < (maxj - 1);j++)
{
akk = a[j,j];
for(i = (j + 1);i < maxi;i++)
{
aik = a[i,j];
add_i1toi2(a,j,-aik/akk,i);
// add_i(a,i,-aik);
}
}
return true;
}
//将上三角增广阵化为对角增广阵
public static float abs(float a)
{
if( a < 0)
a = -a;
return a;
}
public static bool eliminant2(float[,] a)
{
int maxi,maxj,i,j;
float aik,akk;
maxi =a.GetLength(0);
maxj = a.GetLength(1);
// i = maxi - 1;
j = maxj - 2;
for(;j >= 0;j--)
{
akk = a[j,j] ;
for( i = (j - 1);i >= 0;i--)
{
aik = a[i,j];
add_i1toi2(a,j,-aik/akk,i);
}
}
return true;
}
//行列式i1行k倍加到i2行
public static bool add_i1toi2(float[,] a,int i1,float k,int i2)
{
int maxi,maxj,j;
maxi = a.GetLength(0);
maxj = a.GetLength(1);
if((i1 > maxi) || (i2 > maxi))
return false;
for(j = 0;j < maxj;j++)
a[i2,j] = a[i1,j] * k + a[i2,j];
return true;
}
//行列式j1列k倍加到j2列
public bool add_j1toj2(float[,] a,int j1,float k,int j2)
{
int maxi,maxj,i;
maxi = a.GetLength(0);
maxj = a.GetLength(1);
if((j1 > maxj) || (j2 > maxj))
return false;
for(i = 0;i < maxi;i++)
a[i,j2] = a[i,j1] * k + a[i,j2];
return true;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -