Προς το περιεχόμενο

Fortran


PhlegethoN

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα,

 

Ως σχετικα αρχαριος πρεπει να υλοποιησω μια συναρτηση σε fortran95 που να βρισκει το μεγιστο και το ελαχιστο της συναρτησης f(x)=x^4-6x^2+3x+1 στο διαστημα [-10,10] με βημα 0,8.

 

Υπαρχει κανεις που μπορει να με ξελασπωσει εστω για την αρχη? Ξεσκονιζοντας καποια παλια βιβλια του Λυκείου ειδα οτι πρεπει να βρω τη παραγωγο της f(x), να την μηδενισω κτλ. Παρολα αυτα ομως δν καταλαβαινω το "με βημα 0,8" που γραφει η εκφωνηση...

 

Ευχαριστω εκ των προτερων οποιον μπει στο κοπο.

Δημοσ.

Kαλησπέρα.

 

Θα σου δώσω μια λύση επειδή είναι πανεύκολο.

Οι παράγωγοι εδώ δεν οδηγούν σε αριθμητική λύση δότι θα καταλήξουν σε κυβική εξίσωση που απαιτεί σχήμα Horner.

 

Δεν χρειάζονται παράγωγοι.

Βρίσκεις όλες τις τιμές της συνάρτησης στο διάστημα [-10,10] σαρώνοντάς το με βήμα 0.8 .

Από αυτές λαμβάνεις την μέγιστη και την ελάχιστη.

 

Δες το παρακάτω προγραμματάκι :

 

>
program func_max_min
implicit none 
integer::numVals,c
real:,a,b,step,max_val,min_val,pos_max(1),pos_min(1)
real,allocatable::funcValues(

a=-10 ; b=10 ; step=.8

numVals=nint( (b-a)/step )

allocate(funcValues(numVals))

c=0
do x=a,b,step
  c=c+1 
  funcValues(c)=x**4-6*x**2+3*x+1
end do

max_val=maxval(funcValues) ; pos_max=a+(maxloc(funcValues)-1)*step
min_val=minval(funcValues) ; pos_min=a+(minloc(funcValues)-1)*step

print *,"max value of f : ", max_val, "at x=", pos_max
print *,"min value of f : ", min_val, "at x=", pos_min

end program

 

Οι μεταβλητές pos_max(1), pos_min(1) κρατούν τη θέση που βρίσκεται το μέγιστο και ελάχιστο f(x).

Eίναι πίνακες με ένα στοιχείο διότι οι συναρτήσεις maxloc και minloc επιστρέφουν πίνακα.

Δεν το επαλήθευσα. Βάλε μια ομαλή συνάρτηση που ξέρεις πώς συμπεριφέρεται για να ελέγξεις ότι δουλεύει.

Δημοσ.

πωπω τοσο απλο ηταν? :confused:

Εβλεπα το step αλλα δεν πηγαινε το μυαλο μου να σαρωσω το πινακα μιας και φανταζομουν οτι θα εβγαζε απειρες τιμες, αλλα ειναι οντως μονο 25 για τη συγκεκριμενη.

Να'σαι καλα V.I.Smirnov. :-)

 

Edit: Εκανα μια μικροδιορθωση στο numValues=nint( (b-a)/step) το εκανα nint( (b-a)/step) +1 γτ σε καποιες συναρτησεις που δοκιμασα μου εβγαινε εκτος bounds.

Δημοσ.

Να ακριβολογούμε : δεν σαρώνεις πίνακα, το διάστημα σαρώνεις και αποθηκεύεις 'δειγματικές' τιμές.

Μπορείς να βρεις την μέγιστη & ελάχιστη τιμή καθώς κάνεις την σάρωση του διαστήματος στο βρόγχο, δηλ. χωρίς να τις βάλεις σε πίνακα.

 

Ωστόσο, αν οι τιμές αποθηκευτούν σε πίνακα μπορείς να τις επεξεργαστείς πολύ ευκολότερα και κομψά.

Οι ευκολίες που δίνει η F95 στην διαχείριση πινάκων είναι εξαιρετικά βολικές - δες το help.

Εδώ π.χ. το να βρεις την max, min και την θέση τους στον πίνακα είναι μια εντολή.

 

Η nint στρογγυλεύει το όρισμα στον πλησιέστερο ακέραιο.

Η ceil στον πλησιέστερο προς τα άνω και η int στον πλησιέστερο προς τα κάτω (το ακέραιο μέρος που λέμε στην ανάλυση).

Πρέπει όμως να προσέχεις όταν δίνεις αρνητικά ορίσματα.

Π.χ. το int(2.6) ισούται με 2 ενώ το int(-2.6) ισούται με -3.

 

Καλή συνέχεια....

Δημοσ.
V.I.Smirnov, πάντα είχα την απορία, τι έχεις σπουδάσει;

 

Mην ρωτάς !

 

Είμαι παν - επιστήμων !!!

 

 

Πέραν της αστειότητας πάντως, δυο πράγματα έχω να σου πω :

Η επιστήμη είναι τρόπος σκέψης και ζωής και δεν αποκτάται βεβιασμένα λίγο καιρό πριν τις όποιες εξετάσεις.

Επιπλέον, πολύ σημαντικά πράγματα διδάσκονται στα ακαδημαϊκά προγράμματα ημιτελώς, αποσπασματικά ή καθόλου.

Αν δεν έχεις ευρύτερη οπτική και γνώσεις, το πολύ να αποκτήσεις μια εξειδίκευση που αρκεί μεν για τον τομέα σου

αλλά δεν σου επιτρέπει να δεις τα καλύτερα ή να αναπτυχθείς περαιτέρω.

 

Ο προγραμματισμός μόνος του δεν αρκεί και συνήθως στα ενδιαφέρονται προβλήματα είναι το τελευταίο μέρος και μάλιστα το εύκολο....

 

Δημοσ.
Mην ρωτάς !

 

Είμαι παν - επιστήμων !!!

 

 

Πέραν της αστειότητας πάντως, δυο πράγματα έχω να σου πω :

Η επιστήμη είναι τρόπος σκέψης και ζωής και δεν αποκτάται βεβιασμένα λίγο καιρό πριν τις όποιες εξετάσεις.

Επιπλέον, πολύ σημαντικά πράγματα διδάσκονται στα ακαδημαϊκά προγράμματα ημιτελώς, αποσπασματικά ή καθόλου.

Αν δεν έχεις ευρύτερη οπτική και γνώσεις, το πολύ να αποκτήσεις μια εξειδίκευση που αρκεί μεν για τον τομέα σου

αλλά δεν σου επιτρέπει να δεις τα καλύτερα ή να αναπτυχθείς περαιτέρω.

 

Ο προγραμματισμός μόνος του δεν αρκεί και συνήθως στα ενδιαφέρονται προβλήματα είναι το τελευταίο μέρος και μάλιστα το εύκολο....

Δεν διαφωνώ, αλλά σε έχω δει να απαντάς σε θέματα φυσικής, προγραμματισμού, μαθηματικών και λέω τι στο καλό... :P
Δημοσ.

Ο προγραμματισμός μόνος του δεν αρκεί και συνήθως στα ενδιαφέρονται προβλήματα είναι το τελευταίο μέρος και μάλιστα το εύκολο....

 

.. επειδή χιλιάδες άλλοι επιστήμονες έχουν φάει τη ζωή τους για να το κάνουν εύκολο για τον average Joe programmer.

Δημοσ.

πάντα μου άρεσε η λέξη πανεπιστήμων.. και η αλήθεια είναι οτι και γώ τέτοιο σε θεωρούσα απ το λίγο που σ έχω διαβάσει εδώ..

 

anyway.. νομίζω πως αυτό ακριβώς είναι και αυτό που χρειαζόμαστε (η ανθρωπότητα εννοώ) για να ξεκολλήσουμε απ το βούρκο. Και νομίζω οτι πάμε προς τα κεί..

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...