disiba
شنبه 29 بهمن 1390, 20:55 عصر
سلام دوستان
من 1 زیربرنامه از اینترنت دانلود کردم ولی چون مبتدی هستم نمیدونم که چطوری باید توی main اونو صدا بزنم . زیربرنامه 1 ماتریس 2 بعدی رو می گیره و بعد از عملیات ماتریس 2 بعدی دیگه ای رو به برنامه اصلی بر میگردونه.
نکته دیگه اینه که min و mout دو بعدی هستند ولی توی زیر برنامه بصورت یک بعدی با اون برخورد میشه .
ممنون میشم که منو راهنمایی کنید
متن زیربرنامه : ( موقع کپی پیست شکل برنامه بهم میریزه )
void mat(double *Min, double *Mout, int actualsize)
{
int i, j, k;
double sum,x;
for(i=0; i<actualsize*actualsize; i++)
{ Mout[i]=Min[i]; }
for(i=0; i<actualsize; i++)
{
j=i*actualsize+i;
if((Mout[j]<1e-12)&&(Mout[j]>-1e-12)){ Mout[j]=1e-12; }
}
if (actualsize <= 1) return;
for (i=1; i < actualsize; i++)
{
Mout[i] /= Mout[0];
}
for (i=1; i < actualsize; i++)
{
for (j=i; j < actualsize; j++)
{
sum = 0.0;
for (k = 0; k < i; k++)
{
sum += Mout[j*actualsize+k] * Mout[k*actualsize+i];
}
Mout[j*actualsize+i] -= sum;
}
if (i == actualsize-1) continue;
for (j=i+1; j < actualsize; j++)
{
sum = 0.0;
for (k = 0; k < i; k++)
{
sum += Mout[i*actualsize+k]*Mout[k*actualsize+j];
}
Mout[i*actualsize+j] = (Mout[i*actualsize+j]-sum) / Mout[i*actualsize+i];
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = i; j < actualsize; j++ )
{
x = 1.0;
if ( i != j )
{
x = 0.0;
for ( k = i; k < j; k++ )
{
x -= Mout[j*actualsize+k]*Mout[k*actualsize+i];
}
}
Mout[j*actualsize+i] = x / Mout[j*actualsize+j];
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = i; j < actualsize; j++ )
{
if ( i == j ) continue;
sum = 0.0;
for ( k = i; k < j; k++ )
{
sum += Mout[k*actualsize+j]*( (i==k) ? 1.0 : Mout[i*actualsize+k] );
}
Mout[i*actualsize+j] = -sum;
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = 0; j < actualsize; j++ )
{
sum = 0.0;
for ( k = ((i>j)?i:j); k < actualsize; k++ )
{
sum += ((j==k)?1.0:Mout[j*actualsize+k])*Mout[k*actualsize+i];
}
Mout[j*actualsize+i] = sum;
}
}
}
من 1 زیربرنامه از اینترنت دانلود کردم ولی چون مبتدی هستم نمیدونم که چطوری باید توی main اونو صدا بزنم . زیربرنامه 1 ماتریس 2 بعدی رو می گیره و بعد از عملیات ماتریس 2 بعدی دیگه ای رو به برنامه اصلی بر میگردونه.
نکته دیگه اینه که min و mout دو بعدی هستند ولی توی زیر برنامه بصورت یک بعدی با اون برخورد میشه .
ممنون میشم که منو راهنمایی کنید
متن زیربرنامه : ( موقع کپی پیست شکل برنامه بهم میریزه )
void mat(double *Min, double *Mout, int actualsize)
{
int i, j, k;
double sum,x;
for(i=0; i<actualsize*actualsize; i++)
{ Mout[i]=Min[i]; }
for(i=0; i<actualsize; i++)
{
j=i*actualsize+i;
if((Mout[j]<1e-12)&&(Mout[j]>-1e-12)){ Mout[j]=1e-12; }
}
if (actualsize <= 1) return;
for (i=1; i < actualsize; i++)
{
Mout[i] /= Mout[0];
}
for (i=1; i < actualsize; i++)
{
for (j=i; j < actualsize; j++)
{
sum = 0.0;
for (k = 0; k < i; k++)
{
sum += Mout[j*actualsize+k] * Mout[k*actualsize+i];
}
Mout[j*actualsize+i] -= sum;
}
if (i == actualsize-1) continue;
for (j=i+1; j < actualsize; j++)
{
sum = 0.0;
for (k = 0; k < i; k++)
{
sum += Mout[i*actualsize+k]*Mout[k*actualsize+j];
}
Mout[i*actualsize+j] = (Mout[i*actualsize+j]-sum) / Mout[i*actualsize+i];
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = i; j < actualsize; j++ )
{
x = 1.0;
if ( i != j )
{
x = 0.0;
for ( k = i; k < j; k++ )
{
x -= Mout[j*actualsize+k]*Mout[k*actualsize+i];
}
}
Mout[j*actualsize+i] = x / Mout[j*actualsize+j];
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = i; j < actualsize; j++ )
{
if ( i == j ) continue;
sum = 0.0;
for ( k = i; k < j; k++ )
{
sum += Mout[k*actualsize+j]*( (i==k) ? 1.0 : Mout[i*actualsize+k] );
}
Mout[i*actualsize+j] = -sum;
}
}
for ( i = 0; i < actualsize; i++ )
{
for ( j = 0; j < actualsize; j++ )
{
sum = 0.0;
for ( k = ((i>j)?i:j); k < actualsize; k++ )
{
sum += ((j==k)?1.0:Mout[j*actualsize+k])*Mout[k*actualsize+i];
}
Mout[j*actualsize+i] = sum;
}
}
}