Matrixinversion über Gauß-Jordan Algorithmus / Determinantenberechnung



  • Dein Konzept klingt gut. Das mit den Determinanten ist für n > 3 nicht ganz so trivial, da musste dieses Verfahren mit dem "auskreuzen" nehmen (weis jetz nimmer wie das genau hies).
    Für Input/Output und Erstellen von Feldern findest du in den FAQ was. Basismathematik ist 1:1 vom Papier in Quelltext übertragbar 🙂 Jetzt musst du halt die Hufe schwingen und dir I/O und Felder anschaun, dann kannst du auch alles Programmieren. Wie du dann die Matrix*Vektor einbauen sollst, keine Ahnung. Also die Funktionen implementieren - klar - und dann vielleicht über einen Kommandozeilenparameter oder über ein kleines Menü in der Konsole.



  • ja mit dem zeug befass ich mich ja schon die ganze zeit ... aber ich versteh bei dem ganzen C-zeug leider zu oft bahnhof !

    und wie meinst du das mit "mathe einfach von papier in c übernehmen" ???
    genau das ist ja der knackpunkt warum es bei mir scheitert 😞

    ich hab keine ahnung wie man den gauß-jordan algo inkl. I/O umsetzt !

    aber ich hab glaub ich eine lösung zum umsetzen der multiplikation gefunden !!! 😃



  • bounceboy schrieb:

    aber ich hab glaub ich eine lösung zum umsetzen der multiplikation gefunden

    ach was...

    mit blatt->c meine ich: 1+1 => 1+1 und 1*1 => 1*1. a = b => a = b. Viel Spass beim reinknien in C, darum kommst du wohl nicht rum. Deine Hausaufgaben mache ich dir nicht, ausser gegen Geld vielleicht 🙂



  • hi

    ich bin mittlerweile ganz gut vorangekommen ...

    wie deklariere ich variablen wie a11, a12, a13 usw ????

    weil das will das blöde C nicht 😡



  • int a12 = 5; /* einzelne variable */
    int mat[3][3]; /* 3x3 matrix */
    mat[0][1] = 4; /* das entspricht erster zeile zweites element */
    size_t matrix_dim1 = 7;
    size_t matrix_dim2 = 3;
    int *dyn_mat = (int *)malloc(matrix_dim1 * matrix_dim2 * sizeof(int));
    /* dynmat ist jetz ein eindimensionales array mit 7*3 intfeldern.
     addressierung wie folgt */
    
    int i = 5; // zeile
    int j = 2; // spalte
    
    int elem_5_2 = dyn_mat[ 
                       i*matrix_dim1 /* 'zeile' mal die zeilenlänge überspringen */
                       + j           /* und dann noch bis zur j. spalte gehen */
                   ];
    

    Für andere Datentypen analog. Nur Mut: ein kleines C Tutorial und du hast das alles in 30 minuten drauf!



  • Korbinian schrieb:

    Nur Mut: ein kleines C Tutorial und du hast das alles in 30 minuten drauf!

    Naiv oder arrogant? 🙄



  • Realist. Wer mit diesem Beispiel Variablendeklaration, Zuweisung und Arrayerstellung in 30min nicht versteht lässt das ganze lieber bleiben.



  • danke für die motivation 👍



  • wie krieg ich die eingegebene matrix in matrixform auf den bildschirm ???

    printf("Bitte Zeilenanzahl der Matrix eingeben:  ");
    
    		scanf("%d",&x);
    
    		printf("\nBitte Spaltenanzahl der Matrix eingeben: ");
    
    		scanf("%d",&y);
    
    		printf("\nDie Matrix hat %d",x);
    		printf(" Zeilen und %d",y);
    		printf(" Spalten.\n\n");
    
    		if (x!=y)
    		{
    			printf("Die Matrix ist nicht quadratisch ! Keine Berechnung der Inversen moeglich !\n\n");
    		}
    		else
    		{
    			printf("Berechnung der Inversen Matrix:\n\n");
    
    		//Eingabe der Matrix
    
    		{
    
    			float matrix[100][100];
    			float m;
    			float *pmatrix;
    			pmatrix=&matrix[0][0];
    
    			printf("Bitte zeilenweise die Zahlen der Matrix eingeben: \n\n");
    
    			for(int i=0;i<x;i++)
    			{
    				for(int j=0;j<x;j++)
    				{
    					scanf("%f",&m);
    					matrix[i][j]=m;
    
    				}
    
    			}
    
    		{
    			for (int i=0;i<x;i++)
    			{
    				*pmatrix++;
    				printf("%f", *pmatrix);
    			}
    			for (int j=0;i<x;j++)
    			{
    				*pmatrix++;
    				printf("\n%f", *pmatrix++);
    			}
    

    weil so klappt es leider nicht 😞



  • so jetzt hab ich das doch selbst geschafft ! Matrixeingabe, ausgabe usw. kein problem !

    nur ich habe ein ganz banales problem !

    ich habe mein programm in 2 teile unterteilt !
    1. inverse matrix bilden
    2. multiplikation von matrizen

    am anfang gibt der benutzer 1 oder 2 ein !
    ich wollte jetzt mit if (p==1) bzw. if (p==2) in die einzelnen programme "springen" und bei anderer eingabe else ABBRUCH

    aber es hüpft immer nur ins erste programm !!!

    was ist da los ????? bitte postet



  • bounceboy schrieb:

    am anfang gibt der benutzer 1 oder 2 ein !
    ich wollte jetzt mit if (p==1) bzw. if (p==2) in die einzelnen programme "springen" und bei anderer eingabe else ABBRUCH

    Wie sieht das denn in Quellcode-Form aus?

    if(p==1)
      invert();
    else if(p==2)
      mult();
    else
      exit(1);
    

    (wenn deine Programmstruktur keine Ähnlichkeit damit hat, solltest du nochmal drüber nachdenken)

    PS: Eventuell könntest du auch switch verwenden:

    switch(p)
    {
    case 1: invert();break;
    case 2: mult();break;
    default:exit(1);
    }
    


  • sorry sorry ....

    ich hab alle meine geschweiften klammern nochmal überprüft .... 🙄

    mein problem ist gelöst ! 😃



  • Hi,

    kannst du mal sagen wie du das Problem der Matrixinversion gelöst hast?
    Hatte da auch mal vor Jahren eine Hausarbeit zu geschrieben, bin bis jetzt aber noch nicht dahintergekommen, wie das Funktioniert.

    Hat da vielleicht jemand eine Lösung?


Anmelden zum Antworten