Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: scipy bisect (μεθοδος διχοτομησης)

scipy bisect (μεθοδος διχοτομησης) 7 Χρόνια 10 Μήνες πριν #4118

  • johnnyb
  • Το Άβαταρ του/της johnnyb
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 1
Καλησπέρα και καλή χρονιά,
στον κώδικα που παραθέτω αντιμετοπίζω το εξής πρόβλημα

ValueError: f(a) and f(b) must have different signs

Η εξίσωση είναι σωστή καθώς την έχω δοκιμάσει με γνωστές τις μεταβλητές ma, gam και άγνωστο το fld με σωστά αποτέλεσματα. Το πρόβλημα παρουσιάζεται μόνο όταν χρησιμοποιώ την μέθοδο διχοτόμησης (bisect).Να αναφέρω επίσης ότι έχω δοκιμάσει με διαφορετικά όρια (f(a),f(b))χωρίς κάποιο αποτέλεσμα, όμως οι λύσεις που ψάχνω ξέρω ότι είναι στο (1,10).


 
from scipy.optimize import bisect
from math import log
 
gam = 1.4
fld = 0.305
 
def f(ma):
        return fld - (1/gam)*((1/(ma**2))-1) + ((gam+1)/(2*gam))*log((((gam+1)/2)*(ma**2))/(1+((gam-1)/2)*(ma**2)))
ma = float (bisect(f , 1 , 10 , xtol=1e-5 ))
 
print(ma)
 

Όποιοαδήποτε ιδέα καλοδεχούμενη.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

scipy bisect (μεθοδος διχοτομησης) 7 Χρόνια 10 Μήνες πριν #4119

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
@johnnyb
Η bisect είναι εν γένει η πιο αργή μέθοδος που μπορείς να χρησιμοποιήσεις. Γενικά προτείνουν την brent.

1. Τσέκαρες το προφανές;
if f(1) * f(10) > 0:
    print("Hiouston, we've got a problem...")

2. Η συνάρτηση σου είναι σίγουρα μονότονη στο διάστημα αυτό; Μήπως έχεις πολλές λύσεις; Μήπως δεν έχει καμία; πλότταρε τη να δεις

3. Αν έχεις όρεξη, μπορείς να τσεκάρεις και ένα package που είχα κάνει πιο παλιά, το οποίο νομίζω ότι έχει λίγο πιο ωραίο API από το scipy.
github.com/pmav99/pyroots
Τελευταία διόρθωση: 7 Χρόνια 10 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.388 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου