maria_smile Δημοσ. 10 Φεβρουαρίου 2008 Δημοσ. 10 Φεβρουαρίου 2008 Γεια σας! λοιπον..να σας ρωτησω.. θελω να γραψω την εξης πραξη στην C και κολλησα ολιγον τι...γι αυτο βοηθειααααααα η πραξη ειναι: [α β ; γ δ]*Α=[αΑ βΑ; γΑ δΑ] ( το * δεν ειναι ο κλασσικος πολλαπλασιασμος, αλλα η πραξη οπως οριζεται απο πανω) ο Α ειναι επισης πινακας διαστασης n*n Οποιος εχει καμια ιδεα για να ξεμπλοκαρω ας βοηθησει... ευχαριστω
ReVoM Δημοσ. 10 Φεβρουαρίου 2008 Δημοσ. 10 Φεβρουαρίου 2008 Δέν καταλαβαίνω τι ακριβώς θες να κάνεις. Άμα αναλύσεις λίγο παραπάνω ίσσως μπορώ να βοηθήσω. Ισσως να βοηθούσε τι αν μας έλεγες τι ακιβώς θες να κάνεις μήπως πάς να το πλησιάσεις με λάθος τρόπο.
Moderators Praetorian Δημοσ. 10 Φεβρουαρίου 2008 Moderators Δημοσ. 10 Φεβρουαρίου 2008 Ναι όντως φαίνεται και περίεργο αυτό που θέλεις να κάνεις. Σε ενδιαφέρει να "πολ/σεις-σύμφωνα-με-αυτή-την-πράξη" ένα πίνακα διαστάσεων k*l με ένα πίνακα A διαστάσεων n*n και να πάρεις ένα πίνακα διαστάσεων kn*ln ; (ή ένα 2*2 με ένα πίνακα A διαστάσεων n*n και να πάρεις ένα πίνακα διαστάσεων 2n*2n; )
maria_smile Δημοσ. 11 Φεβρουαρίου 2008 Μέλος Δημοσ. 11 Φεβρουαρίου 2008 Θελω να πολλαπλασιασω (αλλα δεν ειναι ακριβως πολλαπλασιασμος πινακων. Ειναι πολλαπλασιασμος συμφωνα με την πραξη που περιγραφω) εναν πινακα 2*2 με εναν πινακα n*n και να παρω εναν πινακα 2n*2n.
bokarinho Δημοσ. 11 Φεβρουαρίου 2008 Δημοσ. 11 Φεβρουαρίου 2008 Λίγο άκυρο να γίνει αυτό που λες μιας και για να πολλαπλασιάσεις δύο πίνακες όπου στην περίπτωση σου ο ένας είναι 2 * 2 και ο άλλος n * n πρέπει να το n να είναι υποχρεωτικά 2 γιατί το αποτελέσμα του γινομένου 2 πινάκων είναι ένας νέος πίνακας με γραμμές τον αριθμό των γραμμών του πρώτου και στήλες τον αριθμό των στηλών του δεύτερου, εφόσον όμως ο αριθμός των στηλών του πρώτου είναι ίσος με τον αριθμό των γραμμών του δεύτερου.Άρα δύσκολο να μοντελοποιήσουμε αλγεβρικά κάτι τέτοιο, μάλλον άκυρο μιας και δεν γίνεται. Και στο φινάλε γιατί θέλεις να το κάνεις αυτό;
Moderators Praetorian Δημοσ. 11 Φεβρουαρίου 2008 Moderators Δημοσ. 11 Φεβρουαρίου 2008 Κάτι σαν το παρακάτω ; > 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"); } }
maria_smile Δημοσ. 11 Φεβρουαρίου 2008 Μέλος Δημοσ. 11 Φεβρουαρίου 2008 Λίγο άκυρο να γίνει αυτό που λες μιας και για να πολλαπλασιάσεις δύο πίνακες όπου στην περίπτωση σου ο ένας είναι 2 * 2 και ο άλλος n * n πρέπει να το n να είναι υποχρεωτικά 2 γιατί το αποτελέσμα του γινομένου 2 πινάκων είναι ένας νέος πίνακας με γραμμές τον αριθμό των γραμμών του πρώτου και στήλες τον αριθμό των στηλών του δεύτερου, εφόσον όμως ο αριθμός των στηλών του πρώτου είναι ίσος με τον αριθμό των γραμμών του δεύτερου.Άρα δύσκολο να μοντελοποιήσουμε αλγεβρικά κάτι τέτοιο, μάλλον άκυρο μιας και δεν γίνεται. Και στο φινάλε γιατί θέλεις να το κάνεις αυτό; Μα δεν ειναι ο κλασσικος πολλαπλασιασμος.. Γι αυτο εγραπσα κ την πραξη. Ουσιαστικα ειναι πολλαπλασιασμος ενοσ πινακα 2*2 με καθενα απτα στοιχεια του Α (οπου ο Α ειναι n*n). Οποτε γινεται κανονικα ο πολλαπλασιασμος..Αρκει την πρωτη φορα ο Α να ειναι 4* οτιδιποτε..
maria_smile Δημοσ. 11 Φεβρουαρίου 2008 Μέλος Δημοσ. 11 Φεβρουαρίου 2008 Κάτι σαν το παρακάτω ; > 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"); } } Ενταξει μου φαινεται αυτο... Σ' ευχαρισιτω πολυ!! Καλο σαβατοκυριακο
bokarinho Δημοσ. 11 Φεβρουαρίου 2008 Δημοσ. 11 Φεβρουαρίου 2008 Ενταξει μου φαινεται αυτο...Σ' ευχαρισιτω πολυ!! Καλο σαβατοκυριακο What the f**k? Καλό Σαββατοκύριακο; Δευτέρα έχουμε...
maria_smile Δημοσ. 12 Φεβρουαρίου 2008 Μέλος Δημοσ. 12 Φεβρουαρίου 2008 What the f**k? Καλό Σαββατοκύριακο; Δευτέρα έχουμε... Ε καλα...μπλεχτηκα λιγο στις μερες..
myle Δημοσ. 12 Φεβρουαρίου 2008 Δημοσ. 12 Φεβρουαρίου 2008 Γεια σας!λοιπον..να σας ρωτησω.. θελω να γραψω την εξης πραξη στην C και κολλησα ολιγον τι...γι αυτο βοηθειααααααα η πραξη ειναι: [α β ; γ δ]*Α=[αΑ βΑ; γΑ δΑ] ( το * δεν ειναι ο κλασσικος πολλαπλασιασμος, αλλα η πραξη οπως οριζεται απο πανω) ο Α ειναι επισης πινακας διαστασης n*n Οποιος εχει καμια ιδεα για να ξεμπλοκαρω ας βοηθησει... ευχαριστω Αυτή η "ειδική πράξη" λέγεται πολλαπλασιασμός Kronecker και αν το ψάξεις όλο και κάτι θα βρεις στο web.
maria_smile Δημοσ. 17 Φεβρουαρίου 2008 Μέλος Δημοσ. 17 Φεβρουαρίου 2008 Γεια και παλι! Τωρα θέλω εφαρμοζοντας αυτην την πραξη να κανω: V(n)=[1 0; -1 1]* V(n-1) για n>=1 (αναδρομικος τυπος) Εκανα το παρακατω,αλλα δεν δουλευει. Αν καποιος μπορει να βοηθησει.... Ευχαριστω!!! Vn.txt
georgemarios Δημοσ. 18 Φεβρουαρίου 2008 Δημοσ. 18 Φεβρουαρίου 2008 καταρχην, δεν επιστρεφει κατι η συναρτηση σου.... επιπλεον, εισαι σιγουρη πως ο αλγοριθμος ειναι σωστος? Τον εβγαλες εσυ ή το βρηκες καπου?
Directx Δημοσ. 18 Φεβρουαρίου 2008 Δημοσ. 18 Φεβρουαρίου 2008 Δεν ξέρω τι προσπαθείς να κάνεις (από μαθηματικά τα τυπικά μόνο ) , απλά ως έχει η συνάρτηση σπάει με access violation στην γραμμή, οπότε πρόσεξε τους πίνακες σου: > Vn[i*k+in][j*k+jn]=t*Vn[in][jn]; Καλή συνέχεια.
maria_smile Δημοσ. 19 Φεβρουαρίου 2008 Μέλος Δημοσ. 19 Φεβρουαρίου 2008 Να στε καλα.... να ρωτησω κατι ακομα,γιατι κανω διαφορες δοκιμες... πως γινεται να γραψω στη C εναν πινακα; Δεν ισχυει το ιδιο που χουμε στη Matlab; Αν γραψω δηλαδη Α=[1 2 ; 3 4 ] θα μου δωσει τον πινακα;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.