Stützstellen (Vektor) erzeugen?

brownSugar

Mitglied
Wie erzeugt man in Java eigentlich Stützstellen? Also bei einem gegebenen Intervall [Anfang, Ende] eine Zahlenfolgen in der Form Anfang:Schrittweite:Ende erstellen. In Matlab/GNU Octave geht das ja bekanntlich mit den Funktionen linspace oder colon. Hab bis jetzt nur das hier gefunden. Ist das eine gute Lösung? Gibt es in Java keine vorgefertigte Methode? In MINT-Fächern braucht man sowas eigentlich relativ oft... ???:L
 
Das Verlinkte ist doch ok?
Allerdings lass' ich in Java normalerweise halt eine for-Schleife laufen:
Java:
for(double f=0.31; f<10.0; f += 0.427)
{
  // ...
}
Das "erzeugt Stützstellen" beginnend mit 0.31 , Schrittweite 0.427 .
 
Zuletzt bearbeitet:
Danke für Eure Tipps. Hab mir was überlegt:

Java:
public class Test3 {
 
	public static void main(String[] args) {
		double start = 0.0;
		double end = 1.0;
		double increment = 0.1;		
		int numberOfSteps = (int) Math.round((end-start)/increment)+1;		
		System.out.println(numberOfSteps);
		double[] samplingPoints = new double[numberOfSteps];		
			for(int i = 0; i < numberOfSteps; i++){ 
			System.out.println("Count is: " + i);  			
			samplingPoints[i] = Math.round(start *100)/100.0;  							
			System.out.println(samplingPoints[i]);
			start = start + increment;	
			}
	}
}

Wäre das grundsätzlich ok so in Java? Ein Fragen hab ich noch zum Lösungsvorschlag von arilou: Ist es in Java empfehlenswert in Schleifen double Zählvariablen zu verwenden? Oder sollte man nicht besser int verwenden? Und wie ist das mit dem Runden?

Java:
samplingPoints[i] = Math.round(start *100)/100.0;

Das macht man so in Java? Hab ich von hier. Es gibt keine interne Methode, die auf beliebige Nachkommastellen rundet?
 
Warum willst du denn an der Stelle überhaupt runden? Damit verlierst du doch nur an Genauigkeit, aber gewinnst nichts dabei. Für die Ausgabe kannst du immer noch die Ausgabe selbst formatieren, aber intern immer noch mit den exakten Werten rechnen.

Zur Berechnung selbst. Das ist im Grund schon ok so. Du solltest du beachten, dass du bei zu vielen Dezimal-Stellen, auf die du Runden willst, oder aber bei zu großen Werten für start oder end ganz schön auf die Nase fallen kannst.
 
Ist es in Java empfehlenswert in Schleifen double Zählvariablen zu verwenden?
Ist voll und ganz legitim. Und man spart sich dein "Stützstellen Erzeugen", denn was machst du mit den Stützstellen? An jeder einen Funktionswert berechnen (o.ä.). Dann kann ich diese Berechnung auch gleich in den Schleifenrumpf packen, fertig.

Ich weis nicht, wie gut Java for-Schleifen beim Compilieren entrollen kann, die einen Gleitkomma-Zähler haben. Möglich dass hier 'int' von Vorteil wäre.
 
Ok, mir ist allerdings noch nicht ganz klar, warum eine double Zählvariable Vorteile hat... ???:L Hier ein Versuch:
Java:
public class Test5 {
     
    public static void main(String[] args) {
    double start = 0.0f;
    double end = 1.0f;
    double increment = 0.01;	
    int numberOfSteps = (int) Math.round((end-start)/increment)+1;	
    System.out.println(numberOfSteps);
    double[] samplingPoints = new double[numberOfSteps];	
    int i = 0;		
		for(double j=start; j<=end; j += increment){
    	        System.out.println("Count is: " + i);
		samplingPoints[i] = j; 
		System.out.println(samplingPoints[i]);		
    	        i = i + 1;	
    	}	
    }
}
Oder geht das viel eleganter und kürzer?

@stg: Also die internen Werte sind demnach "genau" und nur die Ausgabe wird "ungenau" dargestellt?
 
Gleitkommazahlen sind immer von eingeschränkter Genauigkeit.
Frage ist immer "wie ungenau?", also wieviele signifikanten Stellen ("geltende Ziffern") habe/will ich.
Wenn du eine Ausgabe mit 4 geltenden Ziffern willst, und nutzt intern 'double's...
 

Zurück
Oben