Java:lineare Gleichungssysteme < Lineare Gleich.-sys. < Lin. Algebra/Vektor < Oberstufe < Schule < Mathe < Vorhilfe
|
Hallo,
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Ich programmiere für meine Facharbeit ein Programm zur Splineinterpolation, wobei ich notgedrungen ein Gleichungssystem mit n*4 - 4 unbekannten und genausovielen Gleichungen lösen muss. Dazu brauchte ich am besten ein subprogramm, was das erledigt
Ich habe die ausdrückliche Erlaubnis meines betreuenden Lehrers das Subprogramm nicht selber schreiben zu müssen, also ist es keine direke frage zur FA.
Also hat da jamand ne Ahnung wo ich sowas finde?
würde mich sehr über eine Antwort freuen,
ger_cornholio
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 10:58 Mi 16.08.2006 | Autor: | Palin |
Hi ich hab einfach mal den Java Quellcode geschrieben zum lösen einer Matrix mit dem "Gauß" verfahen.
double [] loese(double [][]a,double[]x){
int lenge = x.length;
for(int i=0;i<lenge;i++){
//Tauscht 2 Zeilen der Matrix fals a[i][i]=0
if(a[i][i]==0){
int j=i+1;
while(a[j][i]==0 && j<lenge){
j =j+1;
}
double tauscher= x[i];
x[i]=x[j];
x[j]=tauscher;
for(int k=i;j<lenge;k++){
tauscher= a[i][k];
a[i][k]=a[j][k];
a[j][k]=tauscher;
}
}
// a[i][i] wird 1
// unter der Dagonalen wird alles 0
// bsp;
// (1 | x1,2 |x1,3) (L1(L2(L3)))
// (0 | 1 |x2,3) (L2(L3))
// (0 | 0 | 1 ) (L3)
double div = a[i][i];
x[i]=x[i]/div;
for(int j=i;j<lenge;j++){
a[i][j]=a[i][j]/div;
}
for(int z=i+1;z<lenge;z++){
double mult=a[z][i];
x[z]=x[z]-x[i]*mult;
for(int y=i;y<lenge;y++){
a[z][y]=a[z][y]-a[i][y]*mult;
}
}
// über der Dagonalen wird alles 0
// bsp;
// (1 | 0 |0) (L1)
// (0 | 1 |0) (L2)
// (0 | 0 |1) (L3)
for(int z=lenge-1;z>=0;z--){
double mult=a[z][i];
x[z]=x[z]-x[i]*mult;
for(int y=z-1;y>=0;y--){
x[y]=x[y]-x[z]*a[z][y];
a[z][y]=0;
}
}
}
return x;
}
Solte eigentlich Funktionieren, hab aber grad keine Matrix da, um das zu überprufen.
Ich geh überigens davon aus das die Matrix Lösbar ist, Fehler werden hier nicht abgefangen.
Wie gesagt ist mal "eben" runter geschrieben, solte aber funktionieren.
Wenn es probleme gibt einfach noch mal melden.
|
|
|
|
|
Hey Danke Palin,
ich komm grad aus dem Urlaub zurück und hab begeistert deinen Beitrag gelesen.
Dein Lösungsweg ist viel solider und fehlerresistenter, als der den ich in der Schule zu dem Thema gelernt hab
Die besagte Matrix sollte auf jeden Fall lösbar sein, aber enthält viele 0er, was mein grösstes Problem war.
Nun gut, ich werde das Programm noch auf Splines optimieren, und schaun obs läuft. Auf jeden Fall hast du mir ordendlich Zeit gespart.
Tilman Luschnat
aka: ger_cornholio
|
|
|
|