View Full Version : ماتریس و معکوس
mahtab2
چهارشنبه 05 دی 1386, 23:52 عصر
با سلام
من یه کاربر نو آموز C++ هستم .می خواستم ببینم کسی می تونه به من کمک کنه که یه برنامه بنویسم که یه ماتریس 4*4 رو گرفته و معکوس اون رو چاپ کنه.راستش خودم زیاد سر در نیاورم داشتم یه کتاب آموزشی می خوندم که این تمرین رو داده بود می خواستم ببینم چی حوریه ...
mahtab2
پنج شنبه 06 دی 1386, 14:42 عصر
کسی نبود کمک کنه ؟؟؟ بابا نه پروزه ی دانشجویی نه چیزه دیگه... فقط خودم می خوام یاد بگیرم ..
amir_cpp
جمعه 07 دی 1386, 20:53 عصر
// example:
// matrix = 1 2 3 4
// 5 6 7 8
// 9 10 11 12
// 13 14 15 16
//includes ...
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
void main()
{
int i,j;
int a=0;
int b=0;
int matrix[4][4];
int newmatrix[4][4];
int c=1;
for (i=0;i<=3;i++)
for (j=0;j<=3;j++) {
matrix[i][j]=0;
}
// putting numbers in 'matrix'
for (i=0;i<=3;i++)
for (j=0;j<=3;j++) {
matrix[i][j]=c;
c++;
}
for (i=3;i>=0;i--)
{
b=0;
for (j=3;j>=0;j--)
{
newmatrix[i][j]=matrix[a][b];
b++;
}
a++;
}
//clrscr();
for (i=0;i<=3;i++)
{
for (j=0;j<=3;j++)
cout << newmatrix[i][j] << " ";
cout << endl;
}
getch();
}
amir_cpp
جمعه 07 دی 1386, 20:54 عصر
البته این کد برای Visual C++ می باشد!
ضمنا، ببخشید که دیر جواب دادیم!!
aser12
جمعه 07 دی 1386, 21:06 عصر
سلام
ابن یه برنامه ی محاسبه ی ماتریس nn است می خوام تو t c
اجراش کنم .ولی نمیدونم چطوری .کسی هست ک
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<dos.h>
int main(void)
{
double det,B[70][70],C[60][120],A[70][70],temp;
int a,c,u,p,r,b,s,i,j,k,m,n;
clrscr();
printf("\n\tEMATRIX v1.0");
printf("\n\tEnter number of columns:");
scanf("%d",&n);
if(n>58)
{
printf("\n\tThat order is too big for computer memory.");
printf("\n\n\t(Press any Key).");
getch();
exit(1);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("\n\tA(%d,%d):",i,j);
scanf("%lf",&A[i][j]);
}
}
/* SO LET'S NOW EXTEND THE COLUMNS, SO THAT WE CAN HAVE
THE ENTERED MATRIX ON THE LEFT AND AN IDENTITY MATRIX
ON THE RIGHT.
*/
for(i=1;i<=n;i++)
{
for(j=1;j<=(2*n);j++)
{
if(j<=n)
{
C[i][j]=A[i][j];
}
else if(j>n && j<=(2*n))
{
if(i==(j-n))
{
C[i][j]=1;
}
else if(i!=(j-n))
{
C[i][j]=0;
}
}
}
}
/* CALCULATIONS BEGIN HERE */
det=1;
a=0;
for(i=1;i<=n;i++)
{
a++;
if(C[i][i]==0 && i<n)
{
for(p=(i+1);p<=n;p++)
{
for(r=(n*2);r>=1;r--)
{
if( C[p][i]==0)
{
continue;
}
else if( C[p][i]!=0)
{
temp=C[i][r];
C[i][r]=C[p][r];
C[p][r]=temp;
}
}
}
}
if(C[i][i]==0)
{
printf("\nThe matrix is Singular.(That is;It has no inverse.)");
printf("\nThe determinant is 0.");
printf("\n(Press any Key)");
getch();
exit(2);
}
else if(C[i][i]!=0)
{
det*=C[i][i]; /*Inserting this line yields the determinant
It is what I call the katamba Tonny
algorithm */
for(j=(n*2);j>=i;j--)
{
C[i][j]=C[i][j]/C[i][i];
}
for(s=n;s>=1;s--)
{
for(k=(n*2);k>=i;k--)
{
if(s==a)
{
continue;
}
else
{
C[s][k]=((-1)*(C[s][i]*C[i][k]))+C[s][k];
}
}
}
}
}
/* SO, LET'S NOW PLUCK OUT THE INVERSE FROM THE MATRIX
THAT WE EXTENDED.
*/
for(i=1;i<=n;i++)
{
for(j=(n+1);j<=(2*n);j++)
{
B[i][j-n]=C[i][j];
}
}
printf("\nThe matrix is non-singular.");
printf("\n(That is;The matrix has an inverse)");
printf("\n\tInverse");
if(n<=9)
{
for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=n;j++)
{
printf("%8.2lf",B[i][j]);
}
}
printf("\n\n\tThe determinant is %.3lf",det);
printf("\n\n\t(Press any Key)");
}
else if(n>9 && n<=58)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("\n\tA(%d,%d%2
msseng
دوشنبه 01 بهمن 1386, 13:43 عصر
البته این کد برای Visual C++ می باشد!
ضمنا، ببخشید که دیر جواب دادیم!!
البته ببخشیدا...
این برنامه ای که شما نوشتین، ماتریس رو برعکس میکنه نه معکوس!!!
silverhand
یک شنبه 09 تیر 1387, 12:18 عصر
سلام
ابن یه برنامه ی محاسبه ی ماتریس nn است می خوام تو t c
اجراش کنم .ولی نمیدونم چطوری .کسی هست ک
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<dos.h>
int main(void)
{
double det,B[70][70],C[60][120],A[70][70],temp;
int a,c,u,p,r,b,s,i,j,k,m,n;
clrscr();
printf("\n\tEMATRIX v1.0");
printf("\n\tEnter number of columns:");
scanf("%d",&n);
if(n>58)
{
printf("\n\tThat order is too big for computer memory.");
printf("\n\n\t(Press any Key).");
getch();
exit(1);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("\n\tA(%d,%d):",i,j);
scanf("%lf",&A[i][j]);
}
}
/* SO LET'S NOW EXTEND THE COLUMNS, SO THAT WE CAN HAVE
THE ENTERED MATRIX ON THE LEFT AND AN IDENTITY MATRIX
ON THE RIGHT.
*/
for(i=1;i<=n;i++)
{
for(j=1;j<=(2*n);j++)
{
if(j<=n)
{
C[i][j]=A[i][j];
}
else if(j>n && j<=(2*n))
{
if(i==(j-n))
{
C[i][j]=1;
}
else if(i!=(j-n))
{
C[i][j]=0;
}
}
}
}
/* CALCULATIONS BEGIN HERE */
det=1;
a=0;
for(i=1;i<=n;i++)
{
a++;
if(C[i][i]==0 && i<n)
{
for(p=(i+1);p<=n;p++)
{
for(r=(n*2);r>=1;r--)
{
if( C[p][i]==0)
{
continue;
}
else if( C[p][i]!=0)
{
temp=C[i][r];
C[i][r]=C[p][r];
C[p][r]=temp;
}
}
}
}
if(C[i][i]==0)
{
printf("\nThe matrix is Singular.(That is;It has no inverse.)");
printf("\nThe determinant is 0.");
printf("\n(Press any Key)");
getch();
exit(2);
}
else if(C[i][i]!=0)
{
det*=C[i][i]; /*Inserting this line yields the determinant
It is what I call the katamba Tonny
algorithm */
for(j=(n*2);j>=i;j--)
{
C[i][j]=C[i][j]/C[i][i];
}
for(s=n;s>=1;s--)
{
for(k=(n*2);k>=i;k--)
{
if(s==a)
{
continue;
}
else
{
C[s][k]=((-1)*(C[s][i]*C[i][k]))+C[s][k];
}
}
}
}
}
/* SO, LET'S NOW PLUCK OUT THE INVERSE FROM THE MATRIX
THAT WE EXTENDED.
*/
for(i=1;i<=n;i++)
{
for(j=(n+1);j<=(2*n);j++)
{
B[i][j-n]=C[i][j];
}
}
printf("\nThe matrix is non-singular.");
printf("\n(That is;The matrix has an inverse)");
printf("\n\tInverse");
if(n<=9)
{
for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=n;j++)
{
printf("%8.2lf",B[i][j]);
}
}
printf("\n\n\tThe determinant is %.3lf",det);
printf("\n\n\t(Press any Key)");
}
else if(n>9 && n<=58)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("\n\tA(%d,%d%2
دوست عزیز سلام میخواستم بگم در tc سر فایلی به نام string وجود نداره!!!!!!!!!!!!!
jalil_m
دوشنبه 10 تیر 1387, 01:33 صبح
البته ببخشیدا...
این برنامه ای که شما نوشتین، ماتریس رو برعکس میکنه نه معکوس!!!
کاملا درسته.این برنامه فقط ماتریس رو برعکس میکنه.
برای محاسبه ی ماترس معکوس نیاز به دترمینان ماتریس داریم.
کسی روش دترمینان گیری ماتریس 4*4 رو بلده؟
A.S.Roma
دوشنبه 10 تیر 1387, 18:20 عصر
کاملا درسته.این برنامه فقط ماتریس رو برعکس میکنه.
برای محاسبه ی ماترس معکوس نیاز به دترمینان ماتریس داریم.
کسی روش دترمینان گیری ماتریس 4*4 رو بلده؟
سلام
روش ساروس :
اگر ماتریس به صورت زیر باشد :
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
دترمینان بدین شکا محاسبه می شود :
1 2 3 4 1 2
5 6 7 8 5 6
9 10 11 12 9 10
13 14 15 16 13 14
P = ( 1 * 6 * 11 * 16 ) + ( 2 * 7 * 12 * 13 ) + ( 3 * 8 * 9 * 14 )
Q = ( 2 * 5 * 12 * 15 ) + (1 * 8 * 11 * 14 ) + ( 4 * 7 * 10 * 13 )
Determinant = P - Q
البته یک روش دیگر نیز وجود دارد که باید کهاد و ... را حساب کنید که درست خاطرم نیست.
jalil_m
دوشنبه 10 تیر 1387, 23:49 عصر
سلام
روش ساروس :
اگر ماتریس به صورت زیر باشد :
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
دترمینان بدین شکا محاسبه می شود :
1 2 3 4 1 2
5 6 7 8 5 6
9 10 11 12 9 10
13 14 15 16 13 14
P = ( 1 * 6 * 11 * 16 ) + ( 2 * 7 * 12 * 13 ) + ( 3 * 8 * 9 * 14 )
Q = ( 2 * 5 * 12 * 15 ) + (1 * 8 * 11 * 14 ) + ( 4 * 7 * 10 * 13 )
Determinant = P - Q
البته یک روش دیگر نیز وجود دارد که باید کهاد و ... را حساب کنید که درست خاطرم نیست.
سلام.از پستت تشكر ميكنم.راستي الگوريتمي داري كه دترمينان ماتريس n*n رو محاسبه كنه؟
emad_67
سه شنبه 11 تیر 1387, 12:00 عصر
سلام.از پستت تشكر ميكنم.راستي الگوريتمي داري كه دترمينان ماتريس n*n رو محاسبه كنه؟
بفرمایید: http://barnamenevis.org/forum/showthread.php?t=87497
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.