|  | [ ]

|  | ### Math-Objekt Hier sind ab jetzt vor allem Algorithmen zum numerischen Lösen von mathematischen Problemen zu finden. Allen Algorithmen sind von dieser Seite aus verwendbar, natürlich sind sie auch zum Download bereitgestellt. Die Algorithmen werden unter einem Objekt "Math2" zusammengefasst. Gaußscher Algorithmus mit teilweiser Pivotisierung Gauß-Jordan-Verfahren mit teilweiser Pivotisierung Newton-Verfahren download Math2-Objekt Kommentar #### Gaußscher Algorithmus mit teilweiser Pivotisierung Der Gaußsche Algorithmus formt das Gleichungssystem in eine Dreiecksform um, indem er ein vielfaches einer Zeile zu einer anderen so hinzuaddiert, dass das erste Element Null wird. Anschließend wird das Gleichungssystem rekursiv aufgelöst. Quellcode Beispiel Top Quellcode:
    function Math2_Gauss(A, b, eps)
      {
      var n = A.length-1
      var p, maxp, maxz, z, i, q, k, s;
      var x = new Array(A.length);
      for(var is = 0; is < n; is++)  // Pivotisierung
        {
        p = is;
        maxp = Math.abs(A[p][is]);
        for(i = is+1; i <= n; i++)  // Pivotelement p suchen
          {
          maxz = Math.abs(A[i][is]);
          if(maxz > maxp)
            {
            maxp = maxz;
            p = i;
            }
          }
        if(maxp > eps)  // Prüfen ob größer Null bzw. Epsilon
          {
          if(p != is)  // Zeilen tauschen
            {
            z = A[is];
            A[is] = A[p];
            A[p] = z;
            z = b[is];
            b[is] = b[p];
            b[p] = z;
            }
          }
          else
            {
            alert("Fehler bei Lösung des Gleichungssystem:\n\n\tdet(A) = 0\n\tPivotelement = 0");
            return null;
            }
        for(i = 1+is; i <= n; i++)  // Gaußscher Algorithmus
          {
          q = A[i][is]/A[is][is];
          for(k = is+1; k <= n; k++) A[i][k] = A[i][k] - q*A[is][k];
          b[i] = b[i] - q*b[is];
          }
        }
      if(Math.abs(A[n][n]) >= eps)
        {
        for(i = n; i > -1; i--)  // Rückwertsauflösung
          {
          s = 0;
          for(k = i+1; k <= n; k++) s += A[i][k]*x[k];
          x[i] = (b[i]-s) / A[i][i];
          }
        }
        else
          {
          alert("Fehler bei Lösung des Gleichungssystem:\n\n\tdet(A) = 0");
          return null;
          }
      return x;
      }
Top | Gaußscher Algorithmus Beispiel:
Koeffizientenmatrix A: (Spaltentrennung ','; Zeilentrennung '\n') | 2,3,0 1,-5,1 6,8,2
Konstandenvektor b: (Trennung ',') | 2,5,-6
Fehlerfaktor ε: (ε << 1) |
Lösungsvektor x: | 3.5,-1.667,-6.833
Top | Gaußscher Algorithmus #### Gauß-Jordan-Verfahren mit teilweiser Pivotisierung Das Gauß-Jordan-Verfahren stellt eine Modifikation des Gaußschen Algorithmus dar. Bei diesem Verfahren zum Lösen von Gleichungssystemen wird die Koeffizientenmatrix in eine Einheitsmatrix überführt, so das der Lösungsvektor dem modifizierten Konstantenvektor entspricht. Ein rekursives Auflösen wird überflüssig. Quellcode Beispiel Top Quellcode:
    function Math2_GaussJordan(A, b, eps)
      {
      var n = A.length-1;
      var is, k, i, ism1, Q;
      for(is = 0; is <= n; is++)
        {
        // Pievotisierung:
        p = is;
        maxp = Math.abs(A[p][is]);
        for(i = is+1; i <= n; i++)  // Pivotelement p suchen
          {
          maxz = Math.abs(A[i][is]);
          if(maxz > maxp)
            {
            maxp = maxz;
            p = i;
            }
          }
        if(maxp > eps)  // Prüfen ob größer Null bzw. Epselon
          {
          if(p != is)  // Zeilen tauschen
            {
            z = A[is];
            A[is] = A[p];
            A[p] = z;
            z = b[is];
            b[is] = b[p];
            b[p] = z;
            }
          }
          else
            {
            alert("Fehler bei Lösung des Gleichungssystem:\n\n\tdet(A) = 0\n\tPivotelement = 0");
            return null;
            }
        // GaussJordan:
        for(k = is+1; k <= n; k++) A[is][k] = A[is][k]/A[is][is];
        b[is] = b[is]/A[is][is];
        ism1 = is-1;
        for(i = 0; i <= ism1; i++)
          {
          Q = A[i][is];
          for(k = is+1; k <= n; k++)
            {
            A[i][k] -= Q*A[is][k];
            }
          b[i] -= Q*b[is];
          }
        for(i = is+1; i <= n; i++)
          {
          Q = A[i][is];
          for(k = is+1; k <= n; k++)
            {
            A[i][k] -= Q*A[is][k];
            }
          b[i] -= Q*b[is];
          }
        }
      return b;
      }
Top | Gauß-Jordan-Verfahren Beispiel:
Koeffizientenmatrix A: (Spaltentrennung ','; Zeilentrennung '\n') | 0,2,0,3 2,4,3,2 3,-6,0,1 6,1,-6,-2
Konstandenvektor b: (Trennung ',') | 0,-4,-5,6
Fehlerfaktor ε: (ε << 1) |
Lösungsvektor x: | -0.5620,0.4907,-1.3854,-0.3271
Top | Gauß-Jordan-Verfahren #### Newton-Verfahren Das Newton-Verfahren bestimmt über einen Startpunkt analytisch die Funktionstangete um damit die Nullstelle zu approximieren. Das hier gezeigte Script findet allerdings nur reelle Nullstellen bei ganzrationalen Polynomen. Prinzipiell kann das Newton-Verfahren aber auch auf andere Funktionstypen übertragen werden. Quellcode Beispiel Top Quellcode:
    function Math2_Newton(A, x2, itermax, eps1, eps2)
      {
      var x1;
      var fx, fsx;
      var B, C, i, nm1;
      var iter = 0;
      do
        {
        if(iter < itermax)
          {
          iter++;
          x1 = x2;

          // Horner-Schema für Funktionswert und Wert der ersten Ableitung:
          B = A[0]*x1 + A[1];
          C = A[0]*x1 + B;
          nm1 = A.length-1;
          for(i = 2; i < nm1; i++)
            {
            B = B*x1 + A[i];
            C = C*x1 + B;
            }
          fx = B*x1 + A[nm1];
          fsx = C;

          // Division durch NULL verhinern:
          if(fsx == 0)
            {
            alert("Division durch NULL\nProgrammabbruch");
            return x2;
            }

          x2 = x1 - fx/fsx;
          }
        else
          {
          alert("ITERMAX erreicht\nProgrammabbruch");
          return x2;
          }
        } while(Math.abs(fx) > eps1 && Math.abs(x2-x1) > eps2);
      return x2;
      }
Top | Newton-Verfahren Beispiel:
Koeffizientenvektor A: (Trennung ',') |
Startwert: |
max. Iterationsschritte: |
Fehlerfaktoren ε: (ε << 1) | 1. 2.
Lösung: | x =
Top | Newton-Verfahren

[Home] [Menu-Objekt] [Graphics-Objekt] [Math-Objekt] [Objekte u. Funktionen] [alte Scripts] [Copyrigth] [News & Infos] [Info] [Privat] [HTW|Schule] [Webwanze] © 2001-2003 Roland Steffen |