Hi,
ich habe ein ganz kleines Programm in JAVA geschrieben, das mir 13 Parameter berechnet.
Diese gehören zu einem Objekt Clothoid. Der User kann einen Parameter eingeben und das Tool berechnet die zugehörigen 12 anderen. Problem ist, das man nur aus drei Parametern einen direkte Umkehrrechnung machen kann.
Sollte ein anderer Parameter gegeben sein, so löse ich das iterativ, wobei ich einen der drei direkten Parameter bestimme (in meinem Fall L) und dann eine normale Rechnung starte.
Das funktioniert auch alles, sieht aber augescheinlich recht Quick&Dirty aus und man kann erkennen, das gewisse Regelmäßigkeiten auftauchen, die ich gern zusammengefasst hätte.
Der User gibt einen der Paramert ein, die nur iterativ zu einer Lösung kommen, dann rechne ich durch Intervallverschiebung so:
public void getParametersFromSigma(double value){
int loop = 0;
while (Math.abs(this.end_index - this.start_index)>this.tol && ++loop < stop_loop && this.end_index > this.start_index){
this.getParametersFromL( 0.5*(this.start_index + this.end_index) );
if (this.sigma > value){
this.end_index = 0.5*(this.start_index + this.end_index);
}
else if(this.sigma < value){
this.start_index = 0.5*(this.start_index + this.end_index);
}
else {
break;
}
}
}
Der User hat hier SIGMA eingegeben. Der Parameter L ist _immer_ der Parameter, auf den ich meine ganze Rechnung zurückführe. Mit L kann man also SIGMA berechnen aber nicht umgedreht. Ich habe eine obere und eine untere Grenze für L, die ich solange verschiebe, bis für mein L ein SIGMA kommt, das nahe an dem liegt, was der User eingegeben hat => Lösung.
Diese oben gezeigte Methode habe ich nun noch 9mal in meinem Dokument kopiert. Sie sieht für alle "indirekten" Parameter gleich aus zB für X:
public void getParametersFromX(double value){
int loop = 0;
while (Math.abs(this.end_index - this.start_index)>this.tol && ++loop < stop_loop && this.end_index > this.start_index){
this.getParametersFromL( 0.5*(this.start_index + this.end_index) );
if (this.x > value){
this.end_index = 0.5*(this.start_index + this.end_index);
}
else if(this.x < value){
this.start_index = 0.5*(this.start_index + this.end_index);
}
else {
break;
}
}
}
usw.
Das einzige was sich ändert ist die Bedingung bzw. die Objektvariable, die eingehalten werden muss bspw.:
if (this.x > value){ } else if(this.x < value){ }
Diese Objektvariable wird in der Methode immer erst durch die Methode: getParametersFromL() erzeugt und ist vorher nicht bekannt; diese müsste ich irgendwie übergeben können. Die Methode müsste also "wissen", nach welchem Parameter sie iterativ eine Lösung sucht.
Ist es irgenwie möglich, statt immer wieder die Methode zu kopieren, eine allg. zu verfassen?
Auf java.de hat meine Frage bisher wenig Beachtung gehabt ;)
Micha
Mit freundlichem Gruß
Micha