Seite 2 von 2
Verfasst: 15.08.2008 18:44
von Andreas_S
Ist auch richtig so...
Man verwendet ja auch nicht wo es geht Interger. Aber bei wichtigen Anwendungen
wie zB. einem Rechner oder irgendein Programm das Zinsen usw. berechnet, dort wird dann natürlich auf etwas anderes gesetzt...
Warum keine Ganzzahlen
Verfasst: 15.08.2008 22:46
von heiko
Ich möchte eine Gleichung mit Hilfe der Intervallschachtelung lösen.
Deshalb mit Float oder Double. Mein "Programm" hatte nicht so richtig funktioniert. Beim Fehlersuchen bin ich dann - durch ausprobieren- auf den Punkt gekommen den ich nicht so ganz verstanden hatte.
Ich werde mit den gemachten Anregungen weitermachen.
Nochmal danke.
Heiko
Re: Warum keine Ganzzahlen
Verfasst: 15.08.2008 22:49
von Kaeru Gaman
heiko hat geschrieben:Ich möchte eine Gleichung mit Hilfe der Intervallschachtelung lösen.
dann empfielt es sich vielleicht doch mit integer zu arbeiten?
also, bei jedem nächsten schritt mit 10 multiplizieren, um eine nachkommastelle mehr zu simulieren....
Integer Nachkommastellen
Verfasst: 19.08.2008 13:41
von heiko
Also das mit dem Intger und mit 10 multiplizieren klingt interessant.
Ich habe aber wirklich keine Ahnung wie man das durchführen kann.
Ich werde mal die Debugs aus dem Code entfernen und dann hier posten.
Vielleicht siehst Du dann was mein Problem ist.
Oder ich seh den Wald vor lauter Bäumen nicht.
Gruss
Heiko
Programmcode
Verfasst: 19.08.2008 15:22
von heiko
Hallo also hier ist der Code. Wie gesagt, bin Anfänger.
Code: Alles auswählen
Dim x.d(1000)
Dim y.d(1000)
Global Merker1.d
Global Merker2.d
Define test.d
Global k.i
Procedure.f Funktion(x.f)
Define x.f
Define y.f
;hier die Formel eintragen zum Beispiel y=x*x-4.0
y=x*x-4
;y=x*x-3
;y=-1.5-Log10(x)
;Ende Formel
ProcedureReturn y
EndProcedure
;Startwerte
x(0)=0.0001
x(1)=7.0
For k = 1 To 100
y(k-1)=Funktion(x(k-1))
y(k)=Funktion(x(k))
If y(k-1)*y(k)>0
Debug "Keine Nullstelle"
Goto Fertig
EndIf
x(k+1)=(x(k-1)*y(k)-x(k)*y(k-1))/(y(k)-y(k-1))
;Mittelwert Test
;x(k+1)=(x(k+1)+x(k))/2
y(k+1)= Funktion(x(k+1))
If y(k+1)=0
Debug "Fertig"
; Debug y(k+1)
Debug x(k+1)
Goto Fertig
EndIf
If y(k+1)*y(k-1)<0
Debug "Ist kleiner"
Debug x(k)
Debug x(k+1)
x(k)=x(k-1)
y(k)=y(k-1)
Else
Merker1=x(k+1)
Merker2=y(k+1)
x(k+1)=x(k)
y(k+1)=y(k)
x(k)=Merker1
y(k)=Merker2
Debug "Ist grösser"
Debug x(k)
EndIf
Next k
Fertig:
; Debug y(k-1)
; Debug y(k)
; Debug y(k+1)
; Debug x(k-2)
; Debug x(k-1)
Debug "k"
Debug k
Debug x(k+1)
Debug Funktion(x(k+1))
; Debug x(k+2)
; Debug x(k+3)
; Debug x(k+4)
; Debug x(k+5)
; Debug x(k+6)
Abbruchkriterium ist schwierig.
Vielleicht geht es ja wirklich mit Integer besser.
Heiko