Aktien: Börsenforum.de - Aktienhandel - Finanzforum - Fonds - Renditen - Devisen
Forummitglieder sind von der PopUp-Werbung befreit! Klicke hier um Dich kostenlos zu registrieren!
Zurück   Informatik > Programmierung > Algorithmen

Algorithmen

Algorithmen, PAP, Struktogramme



» Forum durchsuchen
» Navigation
» Forum-Navigation
News und Infos
Software
Programmierung
Gaming
Internet / Netzwerke
Informatik Allgemein
PC Hardware
Sonstiges
Informatik Studium
Newsticker und...
» Anmelden
Benutzername:

Kennwort:

Noch kein Mitglied?
Jetzt registrieren!
» Karten
» Benutzer (53)
Wenn du dich kostenlos registrierst kannst du neue Themen verfassen, an Umfragen teilnehmen und vieles mehr. Falls Du bei der Registrierung oder Anmeldung Probleme hast, dann kontaktiere uns.

Antwort
 
Themen-Optionen Thema durchsuchen Thema bewerten
Alt 03.07.2009, 01:08   Statik Berechnung Matrizen Beitrag #1
veggy20
Registrierter Benutzer
 
Registriert seit: 06.2009
Beiträge: 6
Statik Berechnung Matrizen

ich muss aus der Formel "E*A*u=N" (A ist matrix mit haupt und erste nebendiagonalen, u und N sind vektroren) u heruasbekommen. das soll die verschiebung eines statischen systems sein. die diagonalen habe ich als eindimensionales doublefeld geschrieben (sollen wir so machen). nun habe ich programmiert und er zeigt mir fehler an: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Berechnung.Gauss.verschiebung(Gauss.java:2
at Beispiel.anwendung.main(anwendung.java:25)
dabei habe ich versucht zu umschreiben, da ja die nebendiagonalen ihr feld um eins kürzer is als das der hauptdiagonalen.

public double[] verschiebung(double[] n)throws Berechnungsausnahme
{if(u.length!=diag1.length) throw new Berechnungsausnahme("Dimension passt nicht!");


u[0] = (n[0] / E) * (1 / (diag1[0] + diag2[0] ));
for (int i = 1; i <= (diag1.length)-1; i++)
u[i] = (n[i] / E) * (1 / (diag1[i] + diag2[i] + diag3[i - 1]));
int i= diag1.length;
u[i] = (n[i] / E) * (1 / (diag1[i] + diag3[i - 1]));


return u;

}

Seht ihr, was ich anders machen muss, damit er nicht mehr meckert beim ausführen???
veggy20 ist offline   Mit Zitat antworten
Alt 03.07.2009, 09:10   Statik Berechnung Matrizen Beitrag #2
Ezra
Registrierter Benutzer
 
Benutzerbild von Ezra
 
Registriert seit: 05.2009
Beiträge: 401
Hallo veggy,

leider ist aus dem Codestück nicht ersichtlich, welche Eingaben Du für die einzelnen Arrays gemacht hast. Kannst Du mal den gesamten Code posten (in Code-Brackets bitte: [CODE]) oder die Eingabe explizit angeben?

Grüße
Ezra
Ezra ist offline   Mit Zitat antworten
Alt 05.07.2009, 12:31   Statik Berechnung Matrizen Beitrag #3
veggy20
Registrierter Benutzer
 
Registriert seit: 06.2009
Beiträge: 6
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;}

}


__________________________________________________ ____________
veggy20 ist offline   Mit Zitat antworten
Alt 05.07.2009, 14:25   Statik Berechnung Matrizen Beitrag #4
Ezra
Registrierter Benutzer
 
Benutzerbild von Ezra
 
Registriert seit: 05.2009
Beiträge: 401
for (int i = diag1.length; i >= 0; i-- )

Das bedeutet, Dein i zählt von 4 bis 0 runter. Dein Feld geht aber von 3 bis 0.
Ezra ist offline   Mit Zitat antworten
Alt 06.07.2009, 10:01   Statik Berechnung Matrizen Beitrag #5
veggy20
Registrierter Benutzer
 
Registriert seit: 06.2009
Beiträge: 6
Vielen lieben Dank erstmal für deine Hilfe.
ok.das versteh ich nich. meinst du, dass die länge von diag1 zwar vier ist, aba die einträge von 0bis3 gehen??? Was kann ich stattdessen schreiben? weil bei den anderen SChleifen, wo ich diag1.length benutzt habe, hat es ihn ja auch nich gestört...?
veggy20 ist offline   Mit Zitat antworten
Alt 06.07.2009, 10:09   Statik Berechnung Matrizen Beitrag #6
veggy20
Registrierter Benutzer
 
Registriert seit: 06.2009
Beiträge: 6
wenn ich int i= diag1.length -1 setzte verschwindet der fehler in der zeile und dafür zeigt er mir den fehler in der näachsten zeile an und wenn ich da auch ein minus 1 an das diag1.length hänge, meckert er weiter. ich werd noch bekloppt....aaaaaaaaaaah
veggy20 ist offline   Mit Zitat antworten
Alt 06.07.2009, 11:47   Statik Berechnung Matrizen Beitrag #7
Ezra
Registrierter Benutzer
 
Benutzerbild von Ezra
 
Registriert seit: 05.2009
Beiträge: 401
Ein Feld der Länge n geht immer von 0 bis n-1.

Bei anderen Schleifen hat er nicht gemeckert, weil Du da bspw stehen hast:

for (int i = 1; i < (diag1.length); i++ )
Sobald i = diag1.length ist, bricht die Schleife ab. ( Du hast < als Bedingung und nicht <=)
Ich denke aber, dass Du der Korrektheit wegen bei i=0 starten musst.

Deine Korrekturen waren erstmal richtig. Du musst jedes diag1.length mit diag1.length-1 ersetzen in dem rot markieren Code. Welche Fehlermeldung kommt denn jetzt?
Ezra ist offline   Mit Zitat antworten
Alt 06.07.2009, 15:32   Statik Berechnung Matrizen Beitrag #8
veggy20
Registrierter Benutzer
 
Registriert seit: 06.2009
Beiträge: 6
n[i]-=n[diag1.length];

hierbei, also wie egsagt eine zeile dadrunter, sagt er, dass der selbe fehler da is. also out of bounds exception, auch wenn ich diag1.length mit minus eins versehe...

da oben bin ich nicht mit i=0 gestartet, weil diag1[0]=diag1[0] bleibt. und da dieag2 und diag3 um eins kleiner sind als diag 1, also von der feldlänge her, würde da ein fehler auftreten, weil ja, wenn man sich die matrix vorstellt, diag3 die untere nebendiagonale darstellt und erst anfängt, wenn diag1 schon bei [1] ist und diag 2 aufhört, wenn diag1 erst bei [2] ist...
veggy20 ist offline   Mit Zitat antworten
Alt 06.07.2009, 15:48   Statik Berechnung Matrizen Beitrag #9
Ezra
Registrierter Benutzer
 
Benutzerbild von Ezra
 
Registriert seit: 05.2009
Beiträge: 401
Das kann eigentlich nicht sein. Ich hab Deinen Quelltext mal getestet und mit

Code:
for (int i = diag1.length-1; i >= 0; i-- ) {
	if (i == diag1.length-1){
		n[i] = 1.0/diag1[i];
	}
	else{
		n[i] -= n[diag1.length-1];
		n[i] = n[i]/diag1[i];
	}
}
return n;}
kommt keine IndexOutOfBoundsException mehr und auch keine andere Exception.

PS: Die Zeilen n[0]=n[0]; und diag1[0]=diag1[0]; sind reichlich überflüssig. Damit änderst Du nichts.

Geändert von Ezra (06.07.2009 um 16:06 Uhr)
Ezra ist offline   Mit Zitat antworten
Antwort

Zurück   Informatik > Programmierung > Algorithmen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:


Ähnliche Themen zu Statik Berechnung Matrizen
Thema Autor Forum Antworten Letzter Beitrag
Mehr Datenschutz bei der Berechnung des Arbeitslosengelds II
Mehr Datenschutz bei der Berechnung des Arbeitslosengelds II: Mehr Datenschutz bei der Berechnung des...
Informatik News heise online News 0 04.09.2007 11:21
Hartz-IV-Software: Keine Berechnung weiterer Schadensersatzansprüche
Hartz-IV-Software: Keine Berechnung weiterer Schadensersatzansprüche: Hartz-IV-Software: Keine Berechnung weiterer...
Informatik News heise online News 0 16.04.2007 19:08

Weitere Themen von veggy20
Thema Datum Forum Antworten Letzter Beitrag
gaußsche trapezformel
gaußsche trapezformel: hallo, ich studiere Bauingenieur und hab eine...
29.06.2009 Algorithmen 0 29.06.2009 14:03

Andere Themen im Forum Algorithmen
Thema Datum Autor Antworten Letzter Beitrag
Hashing mit doppelt verketteter Liste
Hashing mit doppelt verketteter Liste: Hallo Leute, ich sitze hier gerade an meinen...
21.06.2009 vensch 3 22.06.2009 22:00
HeapSort
HeapSort: Hallo Leute, ich hab da mal eine Frage... ...
14.06.2009 vensch 3 15.06.2009 20:13
Provisionsrechnung
Provisionsrechnung: Hi, ich habe seit ungefähr einem viertel Jahr...
25.10.2008 Afrorechner 2 27.10.2008 20:30
Mergesort - Rechenaufwand etc.
Mergesort - Rechenaufwand etc.: Hallo Community :) Wir haben neulich in der...
21.01.2008 gurkenhobel 3 21.01.2008 22:57
3n+1-Algorithmus
3n+1-Algorithmus: Hi, Ich hab mal eine Frage zum...
17.10.2006 Leader 0 17.10.2006 10:27

Powered by vBadvanced CMPS v3.2.1

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:23 Uhr.


Computer Online-Shop: Onlineshop: PC Hard & Software Medien Center / Computer Hassloch

Fitness, Aerobic, Bodybuilding, Forum | Diät


Computerzubehör im Preisvergleich
Online Shopping

Scanner

Hewlett Packard Drucker

Druckerpatrone

Notebook Zubehör

www.linux-forum.de


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Sie betrachten gerade Statik Berechnung Matrizen.