hallo,d anke für die antowrt. ich habe den code ein wenig umgeschrieben,d a ich übersehen hatte, dass man das mit matrizenauflösung, sprich gauss machen soll. aber das problem bleibt das gleiche: zwar zweigt er jetz keinen nullpointer-fehler mehr an aber einen "java.lang.ArrayIndexOutOfBoundsException"

. Da wo es rot gefärbt ist, verweist mich eclipse auf einen eben solchen fehler. aber an sich is der code fehlerlos laut eclipse, also es sind keine roten markierungen an der seite, sondern erst beim run sagt er dass da eben sowas vorkommt....
ich habe drei 2 pakete, 3 klassen:
Paket Beispiel-Klasse Eingabe;
Paket Berechnung- Klasse Berechnungsausnahme und Klasse Gauss
hier der code:
package Beispiel;
import Berechnung.Gauss;
import Berechnung.Berechnungsausnahme;
public class Eingabe {
public static void main(String[] args) {
double l1=1;
double l2=1;
double l3=1;
double l4=1;
double N1=1;
double N2=1;
double N3=1;
double N4=2;
double A1=1;
double A2=2;
double A3=1;
double A4=1;
double[]diag1=new double[]{A1/l1,((A1/l1)+(A2/l2)),((A2/l2)+(A3/l3)),((A3/l3)+(A4/l4))};
double[]diag2=new double[]{-A1/l1,-A2/l2,-A3/l3};
double[]diag3=new double[]{A1/l1,-A2/l2,-A3/l3};
double[]n =new double[]{N1,N2,N3,N4};
try {
Gauss m =
new Gauss(diag1,diag2,diag3);
n = m.loese(n);
System.out.println(n[0]);
// System.out.println("x:"+Arrays.toString(n));
} catch (Berechnungsausnahme e) {
e.printStackTrace();
}
}
}
__________________________________________________ ___________
package Berechnung;
public class Berechnungsausnahme extends Exception {
private static final long serialVersionUID = -7285427317025387673L;
public Berechnungsausnahme(String meldung) {
super(meldung);
}
}
__________________________________________________ _____________
package Berechnung;
public class Gauss {
private double[] diag1;
private double[] diag2;
private double[] diag3;
private boolean zerlegt = false;
public Gauss(double[] diag1,double[] diag2,double[] diag3) throws Berechnungsausnahme {
if (diag2.length != diag3.length)
throw new Berechnungsausnahme("Nebendiagonalen " +
"müssen übereinstimmen !");
if (diag2.length >= diag1.length)
throw new Berechnungsausnahme("Nebendiagonale"+
"muss kleiner sein als die " +
"Dimension der Matrix!");
this.diag1 = diag1;
this.diag2 = diag2;
this.diag3 = diag3;
this.zerlegt = false;
}
private void zerlege() throws Berechnungsausnahme {
//Hauptdiagonale
diag1[0]=diag1[0];
for (int i = 1; i < (diag1.length); i++ ) {
if (diag1[i] == 0.)
throw new Berechnungsausnahme("Zerlegung der Matrix nicht" +
" möglich, da einige Diagonalelemente gleich 0 sind!");
if (i==diag1.length)
{diag1[i]=diag1[i]-diag3[i-1];}else
diag1[i] = diag1[i]-((diag3[i-1])/(diag1[i-1]));
}
for (int i = 0; i < diag2.length; i++ ) {
diag2[i]=diag3[i]-diag2[i];
}
for (int i = 0; i < diag3.length; i++ ) {
diag3[i]=diag3[i]/diag1[i];
}
this.zerlegt = true;
}
public double[] loese(double[] n) throws Berechnungsausnahme {
if (n.length != diag1.length)
throw new Berechnungsausnahme("Die Dimension des Vektors der " +
"rechten Seite muss mit der Dimension der Matrix " +
"übereinstimmen!");
if (!this.zerlegt) this.zerlege();
// Vorwaertsaufloesung
n[0]=n[0];
for (int i = 1; i < diag1.length; i++) {
n[i]-=diag3[i-1]*n[i-1];
}
// Rueckwaertsaufloesung
for (int i = diag1.length; i >= 0; i-- ) {
if (i==diag1.length){n[i]=1.0/diag1[i];}
else{
n[i]-=n[diag1.length];
n[i]=n[i]/diag1[i];
}
}
return n;}
}
__________________________________________________ ____________