?? 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合并成為一個增廣矩陣
//這個函數(shù)有一個問題,我想將原來傳入的A變成增廣矩陣a,并負值給A,將它傳回
//可是函數(shù)執(zhí)行完了就變回去了,我想得到一個傳回的增廣矩陣我應改怎么做呀
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 + -