P=new float[StrToInt(ENClas->Text)+1];
M=new float*[StrToInt(ENClas->Text)+1];
L=new float*[StrToInt(ENPer->Text)+1];
g=new float*[StrToInt(ENClas->Text)+1];
for (j=0;j<StrToInt(ENClas->Text)+1;j++)
{
M[j] = new float[StrToInt(ENPer->Text)+1];
g[j] = new float[StrToInt(ENPer->Text)+1];
}
for (j=0;j<StrToInt(ENPer->Text)+1;j++)
L[j] = new float[StrToInt(ENPer->Text)+1];
//Считаю P(s) и M(s,Per)
for(i=1;i<=StrToInt(ENClas->Text);i++)
{
sum=0;
per=i;
for(j=1;j<=StrToInt(ENNab->Text);j++)
{
if(Data[j*(StrToInt(ENPer->Text)+1)]==per) sum=sum+1;
}
P[i]=sum/StrToInt(ENNab->Text);
for(j=1;j<=StrToInt(ENPer->Text);j++)
{
sum1=0;
for(k=1;k<=StrToInt(ENNab->Text);k++)
if(Data[k*(StrToInt(ENPer->Text)+1)]==per)
sum1=sum1+Data[(k-1)*(StrToInt(ENPer->Text)+1)+j];
M[i][j]=sum1/sum;
}
}
//Считаю L
for(i=1;i<=StrToInt(ENPer->Text);i++)
{
for(j=1;j<=StrToInt(ENPer->Text);j++)
{
sum=0;
for(k=1;k<=StrToInt(ENClas->Text);k++)
{
per=k;
for(l=1;l<=StrToInt(ENNab->Text);l++)
{
if(Data[l*(StrToInt(ENPer->Text)+1)]==per)
sum=sum+(Data[(l-1)*(StrToInt(ENPer->Text)+1)+i]-M[k][i])*
(Data[(l-1)*(StrToInt(ENPer->Text)+1)+j]-M[k][j]);
}
}
L[i][j]=sum/(StrToInt(ENNab->Text));
}
}
//Считаю g
float **L1;
float *vec;
float det;
L1=new float*[StrToInt(ENPer->Text)+1];
vec=new float[StrToInt(ENPer->Text)+1];
for (j=0;j<StrToInt(ENPer->Text)+1;j++)
L1[j] = new float[StrToInt(ENPer->Text)+1];
if(StrToInt(ENPer->Text)==1)
{
if(L[1][1]!=0)
{
L1[1][1]=1/L[1][1];
}
else ShowMessage(AnsiString("L1 не существует!!!"));
}
else
if(StrToInt(ENPer->Text)==2)
{
det=L[1][1]*L[2][2]-L[2][1]*L[1][2];
if(det != 0)
{
L1[1][1]=L[2][2]/det;
L1[2][2]=L[1][1]/det;
L1[1][2]=-L[1][2]/det;
L1[2][1]=-L[2][1]/det;
}
else ShowMessage(AnsiString("L1 не существует!!!"));
}
else
if(StrToInt(ENPer->Text)==3)
{
det=L[1][1]*L[2][2]*L[3][3]+L[1][2]*L[2][3]*L[3][1]+L[3][1]*L[2][3]*L[1][2]-L[3][1]*L[2][2]*L[1][3]-L[1][2]*L[2][1]*L[3][3]-L[1][1]*L[2][3]*L[3][2];
if(det != 0)
{
L1[1][1]= (L[2][2]*L[3][3]-L[2][3]*L[3][2])/det;
L1[2][1]=-(L[2][1]*L[3][3]-L[2][3]*L[3][1])/det;
L1[3][1]= (L[2][1]*L[3][2]-L[2][2]*L[3][1])/det;
L1[1][2]=-(L[1][2]*L[3][3]-L[1][3]*L[3][2])/det;
L1[2][2]= (L[1][1]*L[3][3]-L[1][3]*L[3][1])/det;
L1[3][2]=-(L[1][1]*L[3][2]-L[1][2]*L[3][1])/det;
L1[1][3]= (L[1][2]*L[2][3]-L[1][3]*L[2][2])/det;
L1[2][3]=-(L[1][1]*L[2][3]-L[1][3]*L[2][1])/det;
L1[3][3]= (L[1][1]*L[2][2]-L[1][2]*L[2][1])/det;
}
else ShowMessage(AnsiString("L1 не существует!!!"));
}
else
ShowMessage(AnsiString("Не могу найти матрицу L-1 !!!"));
//Поиск g
for(i=1;i<=StrToInt(ENClas->Text);i++)
{
g[i][0]=log(P[i]);
sum1=0;
for(j=1;j<=StrToInt(ENPer->Text);j++)
{
sum=0;
for(k=1;k<=StrToInt(ENPer->Text);k++)
{
sum=sum+L1[j][k]*M[i][k];
}
g[i][j]=sum;
sum1=sum1-sum*M[i][j]/2;
}
g[i][0]=g[i][0]+sum1;
}
//Вывод результатов
AnsiString str;
str="P(s):";
for(i=1;i<=StrToInt(ENClas->Text);i++)
{
str=str+FloatToStrF(P[i],ffFixed,6,6)+" ";
if((str.Length()>55)&&(j<StrToInt(ENPer->Text)))
{
LBG->Items->Add(str);
str=" ";
}
}
LBG->Items->Add(str);
str="";
LBG->Items->Add(str);
for(i=1;i<=StrToInt(ENClas->Text);i++)
{
str="M("+IntToStr(i)+"): ";
for(j=1;j<=StrToInt(ENPer->Text);j++)
{
str=str+' '+FloatToStrF(M[i][j],ffFixed,6,6);
if((str.Length()>55)&&(j<StrToInt(ENPer->Text)))
{
LBG->Items->Add(str);
str=" ";
}
}
LBG->Items->Add(str);
}
str="";
LBG->Items->Add(str);
for(i=1;i<=StrToInt(ENPer->Text);i++)
{
str="L("+IntToStr(i)+"): ";
for(j=1;j<=StrToInt(ENPer->Text);j++)
{
str=str+' '+FloatToStrF(L[i][j],ffFixed,6,6);
if((str.Length()>55)&&(j<StrToInt(ENPer->Text)))
{
LBG->Items->Add(str);
str=" ";
}
}
LBG->Items->Add(str);
}
str="";
LBG->Items->Add(str);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.