Norm muss in den fertigen Code eingefügt werden



  • So Leute 🙂

    Ich hoffe Ihr könnt mir irgendwie weiterhelfen. Und zwar muss ich folgende Norm:
    A=maxj=1naij1\parallel A\parallel = max \sum_{j=1}^{n}\mid {a}_{ij}\mid \leq 1
    in den unten aufgeführten Quellcode einfügen. Da ich leider nie programmiert habe, habe ich keine Ahnung, wo ich da anfangen muss.
    Ich hoffe auf schnelle Antworten! Abgabe ist nämlich morgen 😞

    [code="cpp"]
    #include <iostream>
    #include <vector>
    #include <cmath>

    using namespace std;

    int main()
    {

    int size;
    cin >> size;

    vector <vector <long double> > matrix;

    matrix.resize (size);
    for (int i = 0; i < size; i++)
    {
    matrix[i].resize (size + 1);

    for (int j = 0; j < size + 1; j++)
    {
    cin >> matrix[i][j];
    }
    }

    long double eps;
    cin >> eps;

    vector <long double> previousVariableValues (size, 0.0);

    while (true)
    {

    vector <long double> currentVariableValues (size);

    for (int i = 0; i < size; i++)
    {

    currentVariableValues[i] = matrix[i][size];

    for (int j = 0; j < size; j++)
    {
    if (i != j)
    {
    currentVariableValues[i] -= matrix[i][j] * previousVariableValues[j];
    }
    }

    currentVariableValues[i] /= matrix[i][i];
    }

    long double error = 0.0;

    for (int i = 0; i < size; i++)
    {
    error += abs (currentVariableValues[i] - previousVariableValues[i]);
    }

    if (error < eps)
    {
    break;
    }

    previousVariableValues = currentVariableValues;
    }

    for (int i = 0; i < size; i++)
    {
    printf ("%.8llf ", previousVariableValues[i]);
    }

    return 0;
    }



  • deine Problemstellung ist unklar.
    Was ist mit dem i in der Angabe? Es wird über den Laufindex j summiert, aber was ist mit i? Welche Norm soll das sein (Name?).
    D.h. erkläre erst mal ganz genau, was die Problemstellung ist! Einfach drauf los zu programmieren bringt doch nichts.

    Abgesehen davon: wenn du noch nie programmiert hast, warum sollst du auf einmal ein C++ Programm schreiben?

    Hier dein Programm mit korrekten Codetags:

    #include <iostream>
    #include <vector>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
    
    int size;
    cin >> size;
    
    vector <vector <long double> > matrix;
    
    matrix.resize (size);
    for (int i = 0; i < size; i++)
    {
    matrix[i].resize (size + 1);
    
    for (int j = 0; j < size + 1; j++)
    {
    cin >> matrix[i][j];
    }
    }
    
    long double eps;
    cin >> eps;
    
    vector <long double> previousVariableValues (size, 0.0);
    
    while (true)
    {
    
    vector <long double> currentVariableValues (size);
    
    for (int i = 0; i < size; i++)
    {
    
    currentVariableValues[i] = matrix[i][size];
    
    for (int j = 0; j < size; j++)
    {
    if (i != j)
    {
    currentVariableValues[i] -= matrix[i][j] * previousVariableValues[j];
    }
    }
    
    currentVariableValues[i] /= matrix[i][i];
    }
    
    long double error = 0.0;
    
    for (int i = 0; i < size; i++)
    {
    error += abs (currentVariableValues[i] - previousVariableValues[i]);
    }
    
    if (error < eps)
    {
    break;
    }
    
    previousVariableValues = currentVariableValues;
    }
    
    for (int i = 0; i < size; i++)
    {
    printf ("%.8llf ", previousVariableValues[i]);
    }
    
    return 0;
    }
    


  • Warum hast du eine Programmieraufgabe, wenn du noch nie programmiert hast?



  • Oh habe gerade auch gemerkt, dass die Formel falsch wiedergegeben wird, weil ich nicht wusste wie man das i unter das max schreiben kann :'D

    In der Theorie verstehe ich alles und per Hand kann ich auch alles ausrechnen. Dem Buch zufolge hat die Norm keinen Namen. Da steht einfach es gibt 3 Normen und die Auflistung dieser. Ich würde ein Bild davon einstellen. Das Buch ist aber auf russisch...

    Mein Problem ist, ich weiß nicht mal wie ich anfangen soll

    Die Aufgabenstellung lautet diese Norm einzufügen.
    Diese Methode, für die der Code geschrieben ist, kann nicht auf alle Matrizen angewandt werden. Nur auf die Matrizen bei denen die Voraussetzung (Norm kleiner als 1) erfüllt ist.
    Nun muss ich das irgendwie so programmieren, dass wenn die Bedingung erfüllt ist, der Code unten ausgeführt wird, falls die Bedingung nicht erfüllt ist einfach Error angezeigt wird.



  • manni66 schrieb:

    Warum hast du eine Programmieraufgabe, wenn du noch nie programmiert hast?


Anmelden zum Antworten