2017-08-08 2 views
0

Ich versuche, einige Code zu schreiben, um den Wert von sin (0,75) unter Verwendung der Taylor-Entwicklung und drucken jeder Iteration, bis die absolute Differenz zwischen dem Wert berechnet sich nach der Expansion und der Wert berechnet Fortran intrinsische sin werde berechnen Funktion ist weniger als 1E-6. Hier ist mein Code:Programm zur Berechnung Sin Taylor Expansion funktioniert nicht verwenden?

program taylor 
implicit none 
real :: x = 0.75 
do while (x - sin(0.75) < 10**(-6)) 
    print *, x 
    x = x - ((x**3)/6) + ((x**5)/120) - ((x**7)/5040) 
end do 
end program taylor 

Allerdings druckt dies nichts aus? Warum ist das?

+0

Ernst? Sie fragen, warum Code in einer Schleife mit dieser Bedingung nicht ausgeführt wird? –

Antwort

1

Es sieht zu offensichtlich für die meisten Menschen so niemand selbst beantworten wollte, aber es sollte

Die Bedingung x - sin(0.75) < 10**(-6) ist offensichtlich nicht der Fall, wenn x sehr verschieden von sin(0.75), so dass die do while Schleife explizit gesagt wird, ist nie trat ein.

Auch, wie IanH kommentierte 10**(-6) geben 0, weil das Ergebnis der Potenz von zwei ganzen Zahlen wieder eine ganze Zahl ist. Die Literal real Nummer 10^-6 sollte als 1e-6 ausgedrückt werden.

Wenn Sie es x - sin(0.75) > 1e-6 die Schleife fortfahren wird sich ändern, aber es wird für immer laufen, weil Ihre Iteration falsch ist. Taylor-Reihe anders funktioniert, sollten Sie

y = 0 
y = y + x**1/1! 
y = y - x**3/3! 
y = y + x**5/5! 
y = y - x**7/7! 
... 

und so weiter, berechnen, die eine ganz andere Art von Schleife ist.

Versuchen Sie dieses:

program taylor 
implicit none 
real :: x = 0.75 
real :: y, fact 
integer :: sgn, i 

fact = 1 
sgn = 1 

y = 0 

    do i = 1, 10, 2 
    y = y + sgn * x**i/fact 
    fact = fact*(i+1)*(i+2) 
    sgn = -sgn 
    end do 
    print *, y, sin(x) 
end program taylor 
+2

Auch 10 ** (- 6) == 0. – IanH

+0

auch wert sein kann darauf hingewiesen, dass, wenn Sie zwei reelle Zahlen vergleichen wollen zu prüfen, ob der Unterschied zwischen ihnen klein genug ist, Sie in der Regel die Größe der Differenz nehmen wollen zum Beispiel 'abs (ab)

Verwandte Themen