Προς το περιεχόμενο

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • 0
maria_smile

απορια σε C

Ερώτηση

Γεια σας!

λοιπον..να σας ρωτησω..

θελω να γραψω την εξης πραξη στην C και κολλησα ολιγον τι...γι αυτο βοηθειααααααα

η πραξη ειναι:

[α β ; γ δ]*Α=[αΑ βΑ; γΑ δΑ]

 

( το * δεν ειναι ο κλασσικος πολλαπλασιασμος, αλλα η πραξη οπως οριζεται απο πανω)

ο Α ειναι επισης πινακας διαστασης n*n

 

Οποιος εχει καμια ιδεα για να ξεμπλοκαρω ας βοηθησει...

ευχαριστω

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Προτεινόμενες αναρτήσεις

καταρχην, δεν επιστρεφει κατι η συναρτηση σου....

 

επιπλεον, εισαι σιγουρη πως ο αλγοριθμος ειναι σωστος? Τον εβγαλες εσυ ή το βρηκες καπου?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δέν καταλαβαίνω τι ακριβώς θες να κάνεις. Άμα αναλύσεις λίγο παραπάνω ίσσως μπορώ να βοηθήσω. Ισσως να βοηθούσε τι αν μας έλεγες τι ακιβώς θες να κάνεις μήπως πάς να το πλησιάσεις με λάθος τρόπο.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Λίγο άκυρο να γίνει αυτό που λες μιας και για να πολλαπλασιάσεις δύο πίνακες όπου στην περίπτωση σου ο ένας είναι 2 * 2 και ο άλλος n * n πρέπει να το n να είναι υποχρεωτικά 2 γιατί το αποτελέσμα του γινομένου 2 πινάκων είναι ένας νέος πίνακας με γραμμές τον αριθμό των γραμμών του πρώτου και στήλες τον αριθμό των στηλών του δεύτερου, εφόσον όμως ο αριθμός των στηλών του πρώτου είναι ίσος με τον αριθμό των γραμμών του δεύτερου.Άρα δύσκολο να μοντελοποιήσουμε αλγεβρικά κάτι τέτοιο, μάλλον άκυρο μιας και δεν γίνεται. Και στο φινάλε γιατί θέλεις να το κάνεις αυτό;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Ναι όντως φαίνεται και περίεργο αυτό που θέλεις να κάνεις.

Σε ενδιαφέρει να "πολ/σεις-σύμφωνα-με-αυτή-την-πράξη" ένα πίνακα διαστάσεων k*l με ένα πίνακα A διαστάσεων n*n και να πάρεις ένα πίνακα διαστάσεων kn*ln ; (ή ένα 2*2 με ένα πίνακα A διαστάσεων n*n και να πάρεις ένα πίνακα διαστάσεων 2n*2n; )

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Κάτι σαν το παρακάτω ;

>
int main(int argc, char** argv)
{
//Αρχικοποιείς τους πινακές σου.
//Υποθέτω ένα σταθερό πίνακα arr1 (2x2) και δύο με malloc που κατανέμουν χώρο ανάλογα με την τιμή του n.
int arr1[2][2];
int *arr2;
int *arr_Result;
int n, dummyCounter;
int i1, j1; // gia loop sta stoixeia tou prwtou pinaka 2x2
int i2, j2; // gia loop sta stoixeia tou 2ou pinaka nxn.
int currentPolsths = 0;

//Arxikopoihsh  metablhths n
n = 4;
//
// Arxikopoihsh pinakwn arr1, arr2 kai arr_Result
//
arr2 = (int *)malloc(n*n*sizeof(int));
arr_Result = (int *)malloc(2*n*2*n*sizeof(int));

// pinakas arr1 estw: [1 2;3 4]
dummyCounter = 0;
for(i1=0; i1<2; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   arr1[i1][j1] = ++dummyCounter;
 }
}
// pinakas arr2 estw: olo assoi.
for(i1=0; i1<n; i1++)
{
 for(j1 =0; j1 <n ; j1++)
 {
   arr2[i1*n + j1] = 1;
 }
}
// Telos arxikopoihshs

// pare KA8E ena apo ta stoixeia tou 2x2 pinaka
for(i1 = 0; i1 <2 ; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   currentPolsths = arr1[i1][j1];
   // poll/se ton currentPolsths me KA8E ENA apo ta stoixeia tou pinaka arr2
   for(i2 = 0; i2 <n ; i2++)
   {
     for(j2 =0; j2 <n ; j2++)
     {
       // to apotelesma 8a mpei ston teliko pinaka arr_Result
       // sth 8esh i1*n + i2, j1*n + j2
         arr_Result[((i1*n + i2)*2*n) + (j1*n + j2)] = currentPolsths * arr2[i2*n + j2];
     }
   }
 }
}  


printf("Pinakas 1:\n");
for(i1 = 0; i1 <2 ; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   printf("%d   ", arr1[i1][j1]);    
 }
 printf("\n");
}
printf("Pinakas 2:\n");
for(i1 = 0; i1 <n ; i1++)
{
 for(j1 =0; j1 <n ; j1++)
 {
   printf("%d   ", arr2[i1*n+j1]);
 }
 printf("\n");
}

// ektypwsh twn stoixeiwn tou telikoy pinaka
printf("Telikos pinakas:\n");
for(i1 = 0; i1 <2*n ; i1++)
{
 for(j1 =0; j1 <2*n ; j1++)
 {
   printf("%d   ", arr_Result[i1*2*n + j1]);    
 }
 printf("\n");
}

}

 

edit: ίσως είναι λιιιγο πιο απλό αν τους δύο "δυναμικούς" πίνακες τους αναθέσεις χώρο όχι ως απλά διανύσματα (όπως παραπάνω) αλλά ως εξής:

>
int main(int argc, char** argv)
{
//Αρχικοποιείς τους πινακές σου.
//Υποθέτω ένα σταθερό πίνακα arr1 (2x2) και δύο με malloc που κατανέμουν χώρο ανάλογα με την τιμή του n.
int arr1[2][2];
int **arr2;
int **arr_Result;
int n, dummyCounter;
int i1, j1; // gia loop sta stoixeia tou prwtou pinaka 2x2
int i2, j2; // gia loop sta stoixeia tou 2ou pinaka nxn.
int currentPolsths = 0;

//Arxikopoihsh  metablhths n
n = 4;
//
// Arxikopoihsh pinakwn arr1, arr2 kai arr_Result
//
arr2 = (int **)malloc(n*sizeof(int *));
for(i1=0; i1<n; i1++)
{
arr2[i1] = (int *)malloc(n*sizeof(int));
}

arr_Result = (int **)malloc(2*n*sizeof(int *));
for(i1=0; i1<2*n; i1++)
{
arr_Result[i1] = (int *)malloc(2*n*sizeof(int));
}
// pinakas arr1 estw: [1 2;3 4]
dummyCounter = 0;
for(i1=0; i1<2; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   arr1[i1][j1] = ++dummyCounter;
 }
}
// pinakas arr2 estw: olo assoi.
for(i1=0; i1<n; i1++)
{
 for(j1 =0; j1 <n ; j1++)
 {
   arr2[i1][j1] = 1;
 }
}


// Telos arxikopoihshs

// pare KA8E ena apo ta stoixeia tou 2x2 pinaka
for(i1 = 0; i1 <2 ; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   currentPolsths = arr1[i1][j1];
   // poll/se ton currentPolsths me KA8E ENA apo ta stoixeia tou pinaka arr2
   for(i2 = 0; i2 <n ; i2++)
   {
     for(j2 =0; j2 <n ; j2++)
     {
       // to apotelesma 8a mpei ston teliko pinaka arr_Result
       // sth 8esh i1*n + i2, j1*n + j2
         arr_Result[i1*n + i2][j1*n + j2] = currentPolsths * arr2[i2][j2];
     }
   }
 }
}  


printf("Pinakas 1:\n");
for(i1 = 0; i1 <2 ; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   printf("%d   ", arr1[i1][j1]);    
 }
 printf("\n");
}
printf("Pinakas 2:\n");
for(i1 = 0; i1 <n ; i1++)
{
 for(j1 =0; j1 <n ; j1++)
 {
   printf("%d   ", arr2[i1][j1]);
 }
 printf("\n");
}

// ektypwsh twn stoixeiwn tou telikoy pinaka
printf("Telikos pinakas:\n");
for(i1 = 0; i1 <2*n ; i1++)
{
 for(j1 =0; j1 <2*n ; j1++)
 {
   printf("%d   ", arr_Result[i1][j1]);    
 }
 printf("\n");
}


}

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Να στε καλα....

να ρωτησω κατι ακομα,γιατι κανω διαφορες δοκιμες...

πως γινεται να γραψω στη C εναν πινακα;

Δεν ισχυει το ιδιο που χουμε στη Matlab; Αν γραψω δηλαδη Α=[1 2 ; 3 4 ] θα μου δωσει τον πινακα;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Λίγο άκυρο να γίνει αυτό που λες μιας και για να πολλαπλασιάσεις δύο πίνακες όπου στην περίπτωση σου ο ένας είναι 2 * 2 και ο άλλος n * n πρέπει να το n να είναι υποχρεωτικά 2 γιατί το αποτελέσμα του γινομένου 2 πινάκων είναι ένας νέος πίνακας με γραμμές τον αριθμό των γραμμών του πρώτου και στήλες τον αριθμό των στηλών του δεύτερου, εφόσον όμως ο αριθμός των στηλών του πρώτου είναι ίσος με τον αριθμό των γραμμών του δεύτερου.Άρα δύσκολο να μοντελοποιήσουμε αλγεβρικά κάτι τέτοιο, μάλλον άκυρο μιας και δεν γίνεται. Και στο φινάλε γιατί θέλεις να το κάνεις αυτό;

 

Μα δεν ειναι ο κλασσικος πολλαπλασιασμος.. Γι αυτο εγραπσα κ την πραξη.

Ουσιαστικα ειναι πολλαπλασιασμος ενοσ πινακα 2*2 με καθενα απτα στοιχεια του Α (οπου ο Α ειναι n*n).

Οποτε γινεται κανονικα ο πολλαπλασιασμος..Αρκει την πρωτη φορα ο Α να ειναι 4* οτιδιποτε..

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Κάτι σαν το παρακάτω ;

>
int main(int argc, char** argv)
{
//Αρχικοποιείς τους πινακές σου.
//Υποθέτω ένα σταθερό πίνακα arr1 (2x2) και δύο με malloc που κατανέμουν χώρο ανάλογα με την τιμή του n.
int arr1[2][2];
int *arr2;
int *arr_Result;
int n, dummyCounter;
int i1, j1; // gia loop sta stoixeia tou prwtou pinaka 2x2
int i2, j2; // gia loop sta stoixeia tou 2ou pinaka nxn.
int currentPolsths = 0;

//Arxikopoihsh  metablhths n
n = 4;
//
// Arxikopoihsh pinakwn arr1, arr2 kai arr_Result
//
arr2 = (int *)malloc(n*n*sizeof(int));
arr_Result = (int *)malloc(2*n*2*n*sizeof(int));

// pinakas arr1 estw: [1 2;3 4]
dummyCounter = 0;
for(i1=0; i1<2; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   arr1[i1][j1] = ++dummyCounter;
 }
}
// pinakas arr2 estw: olo assoi.
for(i1=0; i1<n; i1++)
{
 for(j1 =0; j1 <n ; j1++)
 {
   arr2[i1*n + j1] = 1;
 }
}
// Telos arxikopoihshs

// pare KA8E ena apo ta stoixeia tou 2x2 pinaka
for(i1 = 0; i1 <2 ; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   currentPolsths = arr1[i1][j1];
   // poll/se ton currentPolsths me KA8E ENA apo ta stoixeia tou pinaka arr2
   for(i2 = 0; i2 <n ; i2++)
   {
     for(j2 =0; j2 <n ; j2++)
     {
       // to apotelesma 8a mpei ston teliko pinaka arr_Result
       // sth 8esh i1*n + i2, j1*n + j2
         arr_Result[((i1*n + i2)*2*n) + (j1*n + j2)] = currentPolsths * arr2[i2*n + j2];
     }
   }
 }
}  


printf("Pinakas 1:\n");
for(i1 = 0; i1 <2 ; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   printf("%d   ", arr1[i1][j1]);    
 }
 printf("\n");
}
printf("Pinakas 2:\n");
for(i1 = 0; i1 <n ; i1++)
{
 for(j1 =0; j1 <n ; j1++)
 {
   printf("%d   ", arr2[i1*n+j1]);
 }
 printf("\n");
}

// ektypwsh twn stoixeiwn tou telikoy pinaka
printf("Telikos pinakas:\n");
for(i1 = 0; i1 <2*n ; i1++)
{
 for(j1 =0; j1 <2*n ; j1++)
 {
   printf("%d   ", arr_Result[i1*2*n + j1]);    
 }
 printf("\n");
}

}

 

edit: ίσως είναι λιιιγο πιο απλό αν τους δύο "δυναμικούς" πίνακες τους αναθέσεις χώρο όχι ως απλά διανύσματα (όπως παραπάνω) αλλά ως εξής:

>
int main(int argc, char** argv)
{
//Αρχικοποιείς τους πινακές σου.
//Υποθέτω ένα σταθερό πίνακα arr1 (2x2) και δύο με malloc που κατανέμουν χώρο ανάλογα με την τιμή του n.
int arr1[2][2];
int **arr2;
int **arr_Result;
int n, dummyCounter;
int i1, j1; // gia loop sta stoixeia tou prwtou pinaka 2x2
int i2, j2; // gia loop sta stoixeia tou 2ou pinaka nxn.
int currentPolsths = 0;

//Arxikopoihsh  metablhths n
n = 4;
//
// Arxikopoihsh pinakwn arr1, arr2 kai arr_Result
//
arr2 = (int **)malloc(n*sizeof(int *));
for(i1=0; i1<n; i1++)
{
arr2[i1] = (int *)malloc(n*sizeof(int));
}

arr_Result = (int **)malloc(2*n*sizeof(int *));
for(i1=0; i1<2*n; i1++)
{
arr_Result[i1] = (int *)malloc(2*n*sizeof(int));
}
// pinakas arr1 estw: [1 2;3 4]
dummyCounter = 0;
for(i1=0; i1<2; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   arr1[i1][j1] = ++dummyCounter;
 }
}
// pinakas arr2 estw: olo assoi.
for(i1=0; i1<n; i1++)
{
 for(j1 =0; j1 <n ; j1++)
 {
   arr2[i1][j1] = 1;
 }
}


// Telos arxikopoihshs

// pare KA8E ena apo ta stoixeia tou 2x2 pinaka
for(i1 = 0; i1 <2 ; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   currentPolsths = arr1[i1][j1];
   // poll/se ton currentPolsths me KA8E ENA apo ta stoixeia tou pinaka arr2
   for(i2 = 0; i2 <n ; i2++)
   {
     for(j2 =0; j2 <n ; j2++)
     {
       // to apotelesma 8a mpei ston teliko pinaka arr_Result
       // sth 8esh i1*n + i2, j1*n + j2
         arr_Result[i1*n + i2][j1*n + j2] = currentPolsths * arr2[i2][j2];
     }
   }
 }
}  


printf("Pinakas 1:\n");
for(i1 = 0; i1 <2 ; i1++)
{
 for(j1 =0; j1 <2 ; j1++)
 {
   printf("%d   ", arr1[i1][j1]);    
 }
 printf("\n");
}
printf("Pinakas 2:\n");
for(i1 = 0; i1 <n ; i1++)
{
 for(j1 =0; j1 <n ; j1++)
 {
   printf("%d   ", arr2[i1][j1]);
 }
 printf("\n");
}

// ektypwsh twn stoixeiwn tou telikoy pinaka
printf("Telikos pinakas:\n");
for(i1 = 0; i1 <2*n ; i1++)
{
 for(j1 =0; j1 <2*n ; j1++)
 {
   printf("%d   ", arr_Result[i1][j1]);    
 }
 printf("\n");
}


}

 

 

Ενταξει μου φαινεται αυτο...

Σ' ευχαρισιτω πολυ!!

Καλο σαβατοκυριακο

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Ενταξει μου φαινεται αυτο...

Σ' ευχαρισιτω πολυ!!

Καλο σαβατοκυριακο

 

What the f**k?

 

Καλό Σαββατοκύριακο; Δευτέρα έχουμε...

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Όχι. Η εντολή του Matlab δεν ισχύει στην C.

Μπορείς να το κάνεις όπως στον κώδικα σου ή να αρχικοποιήσεις τον πίνακα A ταυτόχρονα με τη δήλωσή του.

>
int A[2][2] = {{1, 2}, {3, 4}};

 

Κάποια σχετικά links:

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/aryin.htm

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/designators.htm

http://publications.gbdirect.co.uk/c_book/chapter6/initialization.html

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δεν ξέρω τι προσπαθείς να κάνεις (από μαθηματικά τα τυπικά μόνο :P) , απλά ως έχει η συνάρτηση σπάει με access violation στην γραμμή, οπότε πρόσεξε τους πίνακες σου:

 

>
Vn[i*k+in][j*k+jn]=t*Vn[in][jn];

 

Καλή συνέχεια.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Γεια και παλι!

Τωρα θέλω εφαρμοζοντας αυτην την πραξη να κανω:

V(n)=[1 0; -1 1]* V(n-1) για n>=1 (αναδρομικος τυπος)

Εκανα το παρακατω,αλλα δεν δουλευει. Αν καποιος μπορει να βοηθησει....

Ευχαριστω!!!

Vn.txt

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Θελω να πολλαπλασιασω (αλλα δεν ειναι ακριβως πολλαπλασιασμος πινακων. Ειναι πολλαπλασιασμος συμφωνα με την πραξη που περιγραφω) εναν πινακα 2*2 με εναν πινακα n*n και να παρω εναν πινακα 2n*2n.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...