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