PDA

View Full Version : سوال: معکوس ماتریس



saymon
جمعه 17 مهر 1388, 17:04 عصر
لطفا کسی منو در مورد نحوه نوشتن ماتریس وارون 3*3 ویا مرتبه های بالاتر راهنمایی کنه.ممنون می شم کسی بهم بگه چطور میشه این رو نوشت.

اَرژنگ
جمعه 17 مهر 1388, 18:36 عصر
لطفا کسی منو در مورد نحوه نوشتن ماتریس وارون 3*3 ویا مرتبه های بالاتر راهنمایی کنه.ممنون می شم کسی بهم بگه چطور میشه این رو نوشت.
برایه اینکه بتونیم به بهینه‌ترین به شما کمک کنیم اول به این معلومات نیاز داریم:
۱.شما از قوانین ریاضیه حساب کردن معکوس یک ماتریکس آگاهی دارید؟
۲.جواب این روش برایه چه هدفی لازم دارید؟ مثلا فقط اینکه قابل باشید معکوس یک ماتریکس را حساب کنید یا اینکه، معکوس یک ماتریکس را با روش شئیگرائی و اصول درست برنامه ریزی حساب کنید؟
دلیل قسمت دوم این است که با درک کردن بهتر نیاز شما جوابمان را میتونیم برایه هدف شما تنظیم کنیم.

hadavinia
شنبه 18 مهر 1388, 05:30 صبح
اینو من قبلا برای C++‎ نوشتم امیدوارم مفید باشه



void Inverse(float A[][10],float B[][10],int m)
{
int i,j;
float det;
det=determinant1(A,m);
if (m==2) {
B[0][1]=-1*A[0][1];
B[1][0]=-1*A[1][0];
B[0][0]=A[1][1];
B[1][1]=A[0][0];
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
B[i][j]=(1/det)*B[i][j];
}
}



}
else
{ for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
B[i][j]=(1/det)*Hamsaze(A,m,i,j);
}
}
Transpose(B,m,m);
}
}

int determinant1(float x[][10],int m)
{
int i,D=0;
if (m==2)
D = det(x);
else
for (i = 0; i < m; i++)
D+=x[i][0]*Hamsaze(x,m,i,0);

return D;
}

int Hamsaze(float x[][10],int m,int i,int j)
{
float y[10][10];
int neg;
if ((i+j)%2==1)neg=-1;
else neg=1;
Minor(x,m,i,j,y);
return neg*determinant1(y,m-1);
}
void Transpose(float x[][10],int m,int n)
{
float copyx[10][10];
int i,j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
copyx[i][j]=x[i][j];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
x[i][j]=copyx[j][i];
}
}

}