단순 형법 의 코드 실현
4526 단어 C#
주: 다음 코드 는 무한 여 부 를 판정 하 는 상황 이 부족 합 니 다. 코드 에 인증 을 추가 하면 됩 니 다.
1 > 기본 벡터 확인, 즉
// , A, 1
private List al = new List();//
for (int i = 0; i < A.GetLength(1); i++)
{
flag = 0;
for (int j = 0; j < A.GetLength(0); j++)
{
if(A[j, i]==1) flag += 1;
if(A[j, i]==0) flag += 0;
if((A[j, i]!=1)&&(A[j, i]!=0)) flag+=2;
}
if (flag == 1) this.al.Add(i);
}
2 > cj - zj 확인
private void get_c_z() //
{
for (int i = 0; i < this.c_z.Length; i++)
{
this.c_z[i]= this.c[i];
for (int j = 0; j < this.A.GetLength(0); j++)
this.c_z[i] = this.c_z[i] - this.A[j, i] * this.al2[j];
}
}
3 > 주 변 원 찾기
private void get_variable()
{
// c_z
int k = 0;
double temp = this.c_z[0];
for (int i = 1; i < this.c_z.Length; i++)
{
if (this.c_z[i] > temp) { k = i; temp = this.c_z[i]; }
}
// k b/a
int n= 0;
while(this.A[n,k]<=0)
n++;
double ratio=this.b[n]/this.A[n,k];
for (int j = n + 1; j < this.A.GetLength(0); j++)
if ((this.A[j, k] > 0) && (this.b[j] / this.A[j, k] < ratio)) { n = j; ratio = this.b[j] / this.A[j, k]; }
// n k ,
this.al[n] = k;
this.al2[n] = this.c[k];
//
pivot(n,k);
//
get_c_z();
}
4 > 고 스 소원 실현
private void pivot(int n,int k)//n k ,
{
//k 1
double ratio;
for (int i = 0; i < this.A.GetLength(0); i++)
{
if ((this.A[i, k] != 0)&&(this.A[i,k]!=1))// 0,1
{
ratio = Math.Abs(this.A[i, k]) / 1;
for (int j = 0; j < this.A.GetLength(1); j++)
this.A[i, j] = this.A[i, j] / ratio;
this.b[i] = this.b[i] / ratio;
}
}
// n 1 , n
for (int i = 0;i < this.A.GetLength(0); i++)
{
if (i != n)
{
if (this.A[i, k] != 0)//
{
if (this.A[i, k] == 1)
{
for (int j = 0; j < this.A.GetLength(1); j++)
this.A[i, j] = this.A[i, j] - this.A[n, j];
this.b[i] = this.b[i] - this.b[n];
}
if (this.A[i, k] == -1)
{
for (int j = 0; j < this.A.GetLength(1); j++)
this.A[i, j] = this.A[i, j] + this.A[n, j];
this.b[i] = this.b[i] + this.b[n];
}
}
}
}
// , al 1,this.A[i, this.al[i]]==1
for (int i = 0; i < this.A.GetLength(0); i++)
{
if (this.A[i, this.al[i]] != 0)
{
ratio = this.A[i, this.al[i]] / 1;
for (int j = 0; j < this.A.GetLength(1); j++)
this.A[i, j] = this.A[i, j] / ratio;
this.b[i] = this.b[i] / ratio;
}
}
}
5 > 실행 종료 조건
while (is_negative() != true) // ,
{
// , ,
get_variable();
}
private bool is_negative()
{
bool flag = true;
foreach (int i in this.c_z)
if (i > 0)
{
flag = false; break;
}
return flag;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.