Μάθημα: ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ (5 Ο ΕΞΑΜΗΝΟ, 2018-19) Υλοποίηση αριθμητικών μεθόδων σε Fortran και Mathematica Δευτέρα 12 Νοεμβρίου 2018, 6-8μμ, Αμφιθέατρο ΤΜΜ Επιμέλεια και παρουσίαση σεμιναρίου: Νίκος Βασιλειάδης (Υποψήφιος διδάκτωρ, ΤΜΜ) 1
Υλοποίηση πηγαίου κώδικα σε Fortran Το παρόν υλικό ενδείκνυται για την εκμάθηση εκτέλεσης κώδικα Fortran μέσω του Plato. Για την εκμάθηση ανάπτυξης κώδικα σε Fortran συνίστανται: Σημειώσεις: Προγραμματισμός Η/Υ (ΜΜ101). Βιβλίο: Δ. Ματαράς, Φ. Κουτελιέρης, «Fortran 90/95 για Επιστήμονες και Μηχανικούς», Εκδόσεις Τζίολα, 2011. Website: https://gcc.gnu.org/onlinedocs/gfortran/ Εγκατάσταση FTN95 Personal Edition Πρόκειται για μεταγλωττιστή (compiler) fortran 95 για Windows ο οποίος παρέχεται δωρεάν για προσωπική χρήση. Η ανάπτυξη πηγαίου κώδικα (source code) γίνεται με την βοήθεια του ολοκληρωμένου περιβάλλοντος ανάπτυξης Plato IDE. 2
Η εγκατάσταση της FTN95 Personal Edition απαιτεί το κατέβασμα και τρέξιμο του εκτελέσιμου αρχείου ftn95_personal.exe από τη ιστοσελίδα της silverfrost: https://www.silverfrost.com/32/ftn95/ftn95_personal_edition.aspx. Εγκατάσταση Notepad++ (προαιρετικά) Πρόκειται για επεξεργαστή κειμένου (text editor) ο οποίος προσφέρει αυξημένες δυνατότητες σε σχέση με τον προκαθορισμένο text editor των windows (Notepad). Συνίσταται για το άνοιγμα και την επεξεργασία των αρχείων αποτελεσμάτων κειμένου τα οποία έχουν την μορφή txt ή dat. Κατέβασμα και τρέξιμο του εκτελέσιμου αρχείου Notepad++ Installer 32-bit x86 από την ιστοσελίδα https://notepad-plus-plus.org/download/. 3
Εκτέλεση κώδικα Fortran μέσω Plato 1. Άνοιγμα Plato από την Έναρξη προγραμμάτων. 2. Δημιουργία νέου αρχείου: File New (Ctrl+N) Free format Fortran file Open 3. Στο αρχείο που δημιουργήθηκε: Ανάπτυξη νέου κώδικα: program MyProgram!Main code contains!subroutines and functions end program MyProgram Αντιγραφή και επικόλληση των ανεβασμένων προγραμμάτων του μαθήματος: program HelloWorld open(100,file="results.dat") write(*,*) "Hello World" write(100,*) "Hello World" end program HelloWorld 4
4. Αποθήκευση του αρχείου: File Save (Ctrl+S) Επιλογή ονόματος και τοποθεσίας αρχείου Save! Στο όνομα και στην τοποθεσία αποθήκευσης δεν πρέπει να περιέχονται Ελληνικά. Όνομα: MyProgram.f95 Σωστό Όνομα: ΤοΠρογραμμαΜου.f95 Λαθος Τοποθεσία αποθήκευσης: C:\Users\Nikos\Desktop\MyCodes Σωστό Τοποθεσία αποθήκευσης: C:\Users\Νίκος\Desktop\MyCodes Λάθος 5. Μετατροπή του πηγαίου κώδικα σε εκτελέσιμο αρχείο: Build Build (Ctrl+Shift+B) Εφόσον δεν υπάρχουν συντακτικά λάθη στον κώδικα δημιουργείται στην τοποθεσία αποθήκευσης (βήμα 4) εκτελέσιμο αρχείο exe. 6. Εκτέλεση του εκτελέσιμου αρχείου μέσω Plato: Build Start Run (Ctrl+F5) 7. Αποτελέσματα: Μετά την εκτέλεση του προγράμματος τα αποτελέσματα μπορούν να εμφανίζονται στην οθόνη του χρήστη αλλά και να γράφονται σε αρχεία κειμένου. 5
Υλοποίηση πηγαίου κώδικα σε Mathematica Το παρόν υλικό ενδείκνυται για την εκμάθηση των βασικών εντολών και συναρτήσεων καθώς και για την εκτέλεση κώδικα σε Mathematica. Εισαγωγή Το Mathematica είναι ένα υπολογιστικό πακέτο με πολλές δυνατότητες σε σχεδόν όλους τους τομείς των μαθηματικών. Αποτελείται από δύο μέρη: Τον πυρήνα (Kernel) για την επεξεργασία και εκτέλεση των εντολών. Το Notebook interface για την επικοινωνία χρήστη και πυρήνα. Το Mathematica περιλαμβάνει εκατοντάδες εντολές και συναρτήσεις από τις οποίες στα πλαίσια του μαθήματος θα εξεταστούν τρεις κυρίως κατηγορίες: 1. Αριθμητικοί υπολογισμοί: απλοί υπολογισμοί όπως αριθμητικές πράξεις αλλά και σύνθετοι υπολογισμοί όπως π.χ ο υπολογισμός ριζών εξισώσεων και ολοκληρωμάτων με αριθμητικές μεθόδους. 6
2. Συμβολικός λογισμός: την απλοποίηση μαθηματικών εκφράσεων, την εύρεση της παραγώγου οποιασδήποτε συνάρτηση ή την εύρεση ενός αόριστου ολοκληρώματος. 3. Γραφικές παραστάσεις: συναρτήσεων σε μία ή περισσότερες διαστάσεις. Οι εντολές εισάγονται στο Notebook μετά το In[i]:= και εκτελούνται διαδοχικά μέσω του πυρήνα πατώντας Shift+Enter (απλό Enter για αλλαγή γραμμής) ενώ τα αποτελέσματα εμφανίζονται στο Out[i]=. Αν υπάρχει κάποιο λάθος στο In τότε εμφανίζεται μήνυμα σφάλματος στο Out. Αν υπάρχει άνω τελεία (;) στο τέλος κάποιας εντολής τότε το αποτέλεσμα της δεν εμφανίζεται στην έξοδο. Αν ζητηθεί η εκτέλεση σύνθετων εντολών και το πρόγραμμα δεν αποκρίνεται τότε η εκτέλεση μπορεί να διακοπεί: Evaluation Quit Kernel Local Υπάρχει διάκριση μεταξύ πεζών και κεφαλαίων (root Root). Τέλος υπάρχουν και πολλές εντολές χειρισμού δομών δεδομένων (λίστες, πίνακες), δομές επανάληψης, λογικές δομές και εντολές εμφάνισης αποτελεσμάτων που μπορούν να χρησιμοποιηθούν για την ανάπτυξη ολοκληρωμένων προγραμμάτων. 7
Ορισμός μεταβλητών Ορισμός μεταβλητής: x=value Κατάργηση μεταβλητής: x=. ή Clear[x] Από την στιγμή που ορίζονται οι μεταβλητές εξακολουθούν να ισχύουν μέχρι να καταργηθούν, να κλείσει το Notebook ή να κλείσει ο πυρήνας. Ορισμός τοπικών μεταβλητών: Sin[x] + Cos[y] /. {x -> 0.5, y -> 1.5} Οι τοπικές μεταβλητές ισχύουν μόνο για μία εντολή και μετά δεν υφίστανται. Αριθμητικοί και λογικοί τελεστές Αριθμητική πράξη Σύμβολο Λογική πράξη Σύμβολο Πρόσθεση + Ισότητα == Αφαίρεση - Ανισότητα!= Πολλαπλασιασμός * Μικρότερο < Διαίρεση / Μεγαλύτερο > Ύψωση σε δύναμη ^ Μεγαλύτερο ή ίσο >= Μικρότερο ή ίσο <= 8
Ακριβή και προσεγγιστικά αποτελέσματα Στην Mathematica εμφανίζονται τα ακριβή αποτελέσματα (όταν αυτό είναι δυνατό). Για προσεγγιστικό (αριθμητικό) αποτέλεσμα τότε ορίζεται όπως φαίνεται παρακάτω. Αριθμητική πράξη Αποτέλεσμα 2/5 2/5 (ακριβές) 2/5. 0.4 (προσεγγιστικό) 2./5 0.4 (προσεγγιστικό) 2/5//Ν 0.4 (προσεγγιστικό) N[2/5] 0.4 (προσεγγιστικό) N[2/5, 4] 0.4000 (προσεγγιστικό) Κλασσικά μαθηματικά σύμβολα Μαθηματικό σύμβολο e π i Σύμβολο E Pi Infinity I 9
Βασικές συναρτήσεις Συνάρτηση Εντολή Συνάρτηση Εντολή Τετραγωνική Ρίζα Sqrt[x] Τόξο εφαπτομένης ArcTan[x] Δύναμη με βάση e Exp[x] Τόξο συνεφαπτομένης ArcCot[x] Λογάριθμος με βάση e Log[x] Απόλυτο Abs[x] Λογάριθμος με βάση b Log[b,x] Παραγοντικό x! Ημίτονο Sin[x] Πλησιέστερος ακέραιος Round[x] Συνημίτονο Cos[x] Ακέραιο μέρος Floor[x] Εφαπτομένη Tan[x] Υπόλοιπο διαίρεσης a με b Mod[a,b] Συνεφαπτομένη Cot[x] Ελάχιστο Min[x1,x2,..] Τόξο ημιτόνου ArcSin[x] Μέγιστο Max[x1,x2,..] Τόξο συνημιτόνου ArcCos[x] Τυχαίος αριθμός [0,1] Random[] Τα ορίσματα των συναρτήσεων γράφονται μέσα σε αγκύλες και το πρώτο γράμμα των λέξεων κάθε συνάρτησης είναι κεφαλαίο. 10
Ορισμός λιστών Μία μεταβλητή που ορίζεται ως μια συλλογή στοιχείων ονομάζεται λίστα. Ορισμός λίστας: list={1,2,3} Στοιχείο i της λίστας: list[[i]] Πράξεις με λίστες: 3*list-1 Μια λίστα μπορεί να περιέχει οτιδήποτε όπως αριθμούς, αλγεβρικές παραστάσεις, γραφήματα ή και άλλες λίστες. Άρα για την αναπαράσταση ενός διανύσματος πρέπει να γίνει χρήση μια λίστας με μία διάσταση ενώ για την αναπαράσταση ενός δισδιάστατου πίνακα πρέπει να γίνει χρήση μιας λίστας δύο διαστάσεων. 11
Ορισμός και πράξεις πινάκων Ορισμός πίνακα δύο διαστάσεων: T={{1,2,3},{4,5.6},{7,8,9}} Πράξη πίνακα Εντολή Στοιχείο (i,j) T[[i.j]] Γραμμή(i) T[[i]] Στήλη(j) T[[All,j]] Παρουσίαση σε μορφή πίνακα MatrixForm[Τ] Μοναδιαίος πίνακας IndentityMatrix[n] Πολλαπλασιασμός πινάκων T1.T2 Πολλαπλασιασμός στοιχείο-στοιχείο T1*T2 Ύψωση σε δύναμη πίνακα MatrixPower[T, n] Ανάστροφος Transpose[T] Αντίστροφος Inverse[T] Ορίζουσα Det[T] Ακριβείς ιδιοτιμές Eigenvalues[T] Προσεγγιστικές ιδιοτιμές Eigenvalues[N[T]] Ακριβή ιδιοδανύσματα Eigenvectors[T] Προσεγγιστικά ιδιοδανύσματα Eigenvectors[N[T]] 12
Παραδείγματα: T1=IdentityMatrix[3] T2={{1,2,3},{4,5,6},{7,8,9}} MatrixForm[T1] MatrixForm[T2] MatrixForm[T1.T2] MatrixForm[T1*T2] T={{3,1,1},{1,5,0},{1,1,4}}; Det[T] MatrixForm[Inverse[T]] Eigenvalues[T] Eigenvectors[T] T={{1,0,1},{1,2,3},{1,4,2}}; Det[T] MatrixForm[Inverse[T]] Eigenvalues[T] Eigenvalues[N[T]] Eigenvectors[T] Eigenvectors[N[T]] 13
Ορισμός συναρτήσεων Ορισμός συνάρτησης μίας μεταβλητής: f[x_]:=x^2 Ορισμός συνάρτησης πολλών μεταβλητών: g[x_,y_]:= x^2+2*y Παραδείγματα: f[x_]:=x^2; f[x] f[2.]!προσοχή: Όταν η συνάρτηση f ορίζεται με f[x_] := κάθε φορά που ζητείται η τιμή f[x0] τοποθετείται όπου x το x0 και μετά γίνονται οι πράξεις. Αντίθετα όταν η συνάρτηση f ορίζεται με f[x_] = πρώτα εκτελούνται όλες οι πράξεις και στην συνέχεια αντικαθίσταται το x0 στην θέση του x. Π.χ αν οριστεί g[x_]:=random[]*x το g[1] θα δίνει κάθε φορά διαφορετική τιμή ενώ αν οριστεί g[x_]=random[]*x το g[1] θα δίνει την ίδια τιμή. Παραδείγματα: g1[x_]:=random[]*x; g2[x_]=random[]*x; g1[1] g2[1] 14
Γραφικές παραστάσεις Είδος γράφηματος Διδιάστατο γράφημα μίας συνάρτησης Διδιάστατο γράφημα πολλών συναρτήσεων Τριδιάστατο γράφημα μίας συνάρτησης Τριδιάστατο γράφημα πολλων συναρτήσεων Γράφημα ισοϋψών καμπύλων Εντολή Plot[f,{x,xmin,xmax}, option1->value, option2- >value, ] Plot[{f1,f2,..},{x,xmin,xmax}, option->value] Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}, option1- >value, option2->value, ] Plot3D[{f1,f2, },{x,xmin,xmax},{y,ymin,ymax}, option1->value, option2->value, ] ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}, option1->value, option2->value, ] Στις επιλογές option1->value η Mathematica δίνει στον χρήστη αρκετές δυνατότητες μορφοποίησης των γραφημάτων. Μερικές από αυτές είναι Frame, AxesLabel, PlotRange, PlotStyle, Viewpoint, Shading, ContourShading, Mesh και άλλες. Επίσης εκτός από τα παραπάνω γραφήματα υπάρχουν και δισδιάστατα και τρισδιάστατα γραφήματα για λίστες (διακριτά σημεία) καθώς και παραμετρικά γραφήματα. 15
Παραδείγματα: Plot[x+x^x-100,{x,0.01,4}] f=x+x^x-100; Plot[f,{x,0.01,4}] g[x_]:=x+x^x-100; Plot[g[x],{x,0.01,4}] h[x_,y_]:=x^2*sin[y]; Plot3D[h[x,y],{x,-2Pi,2Pi},{y,-2Pi,2Pi}] ContourPlot[h[x,y],{x,-2Pi,2Pi},{y,-2Pi,2Pi}] 16
Συμβολικός λογισμός Το κύριο πλεονέκτημα της Mathematica σε σχέση με τα υπόλοιπα υπολογιστικά πακέτα είναι η δυνατότητα πραγματοποίησης πράξεων με σύμβολα. Μετασχηματισμοί παραστάσεων Συμβολικές πράξεις Εντολή Ανάπτυγμα σε άθροισμα απλών όρων Expand[expr] Αναπαράσταση σε γινόμενο παραγόντων Factor[expr] Ομαδοποίηση δυνάμεων του x Collect[expr, x] Απλοποίηση παράστασης με αλγεβρικούς μετασχηματισμούς Simplify[expr] Απλοποίηση παράστασης με περισσότερους αλγεβρικούς μετασχηματισμούς FullSimplify[expr] Μετασχηματισμός για κοινός παρονομαστή Together[expr] Χωρισμός παράστασης σε απλά κλάσματα Apart[expr] Παραδείγματα: Expand[(x-1)*(y^2+2)] Simplify[-2+2*x-y^2+x*y^2] 17
Παράγωγοι Παράγωγος Εντολή f x D[expr,x] n f n x D[expr,{x,n}] n f x... 1 xn D[expr,x1,,xn] n m f, k i 1 k k = n m x... x = 1 D[expr, {x1,k1},,{xm,km}] 1 m i Παραδείγματα: D[x*Log[x],x] f = x*log[x]; D[f,x] g[x_]:= x^2 + 3*x; D[g[x],{x, 2}] h[x_,y_]:=x^2*sin[y]+y; D[h[x,y],{x, 2},y] D[h[x,y],{x, 2},{y,2}] 18
Ολοκληρώματα y y max min Ολοκλήρωμα Εντολή f ( x) dx Integrate[f, x] x x x x max min ( ) f x dx Integrate[f, {x,xmin,xmax}] max min (, ) f x y dxdy Integrate[f, {x,xmin,xmax},{y,ymin,ymax}] Όταν δεν είναι δυνατός ο αναλυτικός υπολογισμός του ολοκληρώματος χρησιμοποιείται η εντολή NIntegrate[f, {x,xmin,xmax}]. Παραδείγματα: f=exp[-x^2]; Integrate[f,x] Integrate[f,{x,0,Infinity}] g[x_,y_]:=(x^2+y)*exp[-x^2-y^2] Integrate[g[x, y],x, y] Integrate[g[x,y],{x,0,Infinity},{y,-Infinity,Infinity}] 19
Αθροίσματα, γινόμενα και όρια Ολοκλήρωμα lim f( x) x x 0 lim f( x) x x + 0 lim f( x) i x x 0 Εντολή Limit[exp,x->a] Limit[expr, x->a,direction->-1] Limit[expr, x->a,direction->1] max f() i Sum[expr, {i,imin,imax}] i= i i min max f() i Product[expr, {i,imin,imax}] i= i min Παραδείγματα: Plot[1/(3+2^(1/x)),{x,-1,1}] Limit[1/(3+2^(1/x)),x->0, Direction->1] Limit[1/(3+2^(1/x)),x->0, Direction->-1] Sum[x^i/i!,{i,0,5}] Product[(i+x^i),{i,0,5}] 20
Αναλυτική επίλυση αλγεβρικών εξισώσεων Για την αναλυτική λύση μιας αλγεβρικής χρησιμοποιείται η εντολή: Solve[lhs==rhs,x,option->value] Η εντολή Solve μπορεί να χρησιμοποιηθεί για συστήματα αλγεβρικών εξισώσεων ως: Solve[{lhs1==rhs1,lhs2==rhs2, },{x,y, }, option->value] Για περίπλοκες εξισώσεις η εύρεση της αναλυτικής λύσης δεν είναι πάντα δυνατή και η Solve επιστρέφει μη χρήσιμα αποτελέσματα χρησιμοποιώντας το αντικείμενο Root. Παραδείγματα: Solve[x^2+2*x-7==0,x] Solve[x^2+2*x==7,x] Solve[x*Exp[x]-100==0,x] Solve[Sin[x]==a,x] Solve[{x+y==1,x*y==2},{x,y}] Solve[x^5-x^3+2==0,x] 21
Προσεγγιστική και αριθμητική επίλυση αλγεβρικών εξισώσεων Στην περίπτωση που η αλγεβρική εξίσωσή ή το αλγεβρικό σύστημα δεν μπορεί να λυθεί αναλυτικά μέσω της Solve πρέπει να γίνει προσεγγιστική επίλυση ή αριθμητική επίλυση μέσω των εντολών NSolve ή FindRoot. Η εντολή NSolve αντιμετωπίζει κυρίως γραμμικές και πολυωνιμικές εξισώσεις προσεγγιστικά και συντάσεται (παρόμοια με την Solve) για μία εξίσωση ως: NSolve[lhs==rhs,x,option->value] Για σύστημα εξισώσεων ως: NSolve[{lhs1==rhs1,lhs2==rhs2, },{x,y, }, option->value] Παραδείγματα: NSolve[x^2+2*x-7==0,x] NSolve[x*Exp[x]-100==0,x] NSolve[Sin[x]==a,x] NSolve[{x+y ==1,x*y==2},{x, y}] NSolve[x^5-x^3+2==0,x] 22
Η εντολή FindRoot αντιμετωπίζει αριθμητικά τις δοσμένες εξισώσεις και μπορεί να λύσει μια μεγάλη γκάμα εξισώσεων στις οποίες οι εντολές Solve και Nsolve αδυνατούν. Για μία εξίσωση η εντολή FindRoot συντάσεται ως: FindRoot[lhs==rhs,{x,x0},option->value] Για σύστημα εξισώσεων ως: FindRoot[{lhs1==rhs1,lhs2==rhs2, },{{x,x0},{y,y0}, },option->value] Η μόνη διαφορά στην σύνταξη της FindRoot με την Solve και NSolve είναι το δευτερο όρισμα {x,x0} όπου είναι αναγκαίο να δοθεί η αρχική εκτίμηση x0 της μεταβλητής x. Όταν το όρισμα είναι της μορφής {x,x0} η FindRoot χρησιμοποιεί την μέθοδο Newton ενώ όταν είναι της μορφής {x,xl,xr} χρησιμοποιεί μια παραλλαγή της μεθόδου γραμμικής παρεμβολής. Τέλος όταν το όρισμα είναι της μορφής {x,xstart,xmin,xmax} η FindRoot τερματίζει όταν βγει εκτός των ορίων (xmin,xmax) 23
Παραδείγματα: f[x_]:=x+x^x-100; Plot[f[x],{x,0.01,4}] NSolve[f[x]==0,x] FindRoot[f[x]==0,{x,3.5}] f[x_]:= x*sin[x] Plot[f[x], {x,-10,10}] FindRoot[f[x]==0,{x,0}] FindRoot[f[x]==0,{x,1}] FindRoot[f[x]==0,{x,3}] FindRoot[f[x]==0,{x,5}] FindRoot[f[x]==0,{x,6}] f[x_,y_]=exp[x-2]-y; g[x_,y_]=y^2-x; NSolve[{f[x,y]==0,g[x,y]==0},{x,y}] FindRoot[{f[x, y]==0,g[x,y]==0},{{x,1},{y,1}}] FindRoot[{f[x, y]==0,g[x,y]==0},{{x,2},{y,2}}] 24
Επίλυση γραμμικών αλγεβρικών συστημάτων Για την επίλυση γραμμικών αλγεβρικών συστημάτων Ax = b συνίσταται η χρήση της εντολής LinearSolve η οποία συντάσεται ως: LinearSolve[A,b] Για την επίλυση πολλαπλών συστημάτων με τον ίδιο πίνακα συντελεστών A και διαφορετικά δεξιά μέλη b η LinearSolve συντάσεται ως: L=LinearSolve[A] L[b] (=LinearSolve[A,b]) Παραδείγματα: A={{1,2,1},{1,0,4},{2,1,2}}; b={2,1,4}; c={1,2,2}; LinearSolve[A,b] LinearSolve[A,b]//N L=LinearSolve[A]; L[b] L[c] 25
Επίλυση διαφορικών εξισώσεων Η επίλυση συνήθων και μερικών διαφορικών εξισώσεων στη Mathematica γίνεται με την βοήθεια της εντολής DSolve. Η βασική της σύνταξη είναι: DSolve[{equation, condition1, condition2, }, unkown function, dummy varialbe] Παραδείγματα: dy( x) Επίλυση διαφορικής εξίσωσης = x με αρχική συνθήκη y ( 0) = 0: dx DSolve[{y'[x] == x,y[0]==0},y[x],x] Επίλυση διαφορικής εξίσωσης dy( x) = x και παραμετρικό γράφημα της λύσης: dx sol = DSolve[{y'[x] == x}, y[x], x] Manipulate[Plot[Evaluate[y[x]/.sol[[1]]]/.{C[1]->C1},{x,- 5,5}],{C1,-4,4}] 26
( ) 2 d y x Επίλυση διαφορικής εξίσωσης = y x με αρχικές συνθήκες y (0) = 0, 2 dx DSolve[{y''[x]==y[x],y[0]==0,y'[0]==1},y[x],x] ( ) dy 1 dx = : 0 Επίλυση διαφορικής εξίσωσης ( ) 2 d y x 2 ( ) = y x και παραμετρικό γράφημα της λύσης: dx sol = DSolve[y''[x]==y[x],y[x],x] Manipulate[Plot[Evaluate[y[x]/.sol[[1]]]/.{C[1]->C1,C[2]-> C2},{x,-1,1}],{C1,-4,4},{C2,-4,4}] Επίλυση διαφορικής εξίσωσης μεταφοράς θερμότητας σε ένα ορθογώνιο έλασμα 2 2 T T + = 0 και παραμετρικό γράφημα της λύσης: 2 2 x y xmin=0 ; xmax=1; ymin=0; ymax=1; TD=0;TR=0;TL=0;TU=100; sol=dsolve[{d[t[x,y],{x,2}]+d[t[x,y],{y,2}]==0,t[xmin,y]==t L,T[xmax,y]==TR,T[x,ymin]==TD,T[x,ymax]==TU},T[x,y],x,y] Plot3D[Evaluate[T[x,y]/.sol[[1]]]/.Infinity- >100//Activate,{x,xmin,xmax},{y,ymin,ymax}] ContourPlot[Evaluate[T[x,y]/.sol[[1]]]/.Infinity- >100//Activate,{x,xmin,xmax},{y,ymin,ymax}] 27
Τα παραπάνω παραδείγματα σκοπίμως περιορίστηκαν στην επίλυση απλών προβλημάτων τα οποία είναι γνωστό ότι επιδέχονται αναλυτική λύση. Στην περίπτωση μη γραμμικών ΔΕ ή ΔΕ με μεταβλητούς συντελεστές δεν είναι πάντα δυνατή η εύρεση αναλυτικής λύσης και άρα είναι αναγκαία η επίλυση μέσω αριθμητικών τεχνικών (μέθοδοι Runge-Kutaa, πεπερασμένες διαφορές, κλπ) Επισημαίνεται ότι η DSolve παρέχει την δυνατότητα επίλυσης και συστημάτων ΔΕ. Για την πλήρη κατανόηση της DSolve όσο και των δυνατοτήτων που παρέχει συνίσταται ο οδηγός https://reference.wolfram.com/language/tutorial/dsolveoverview.html. 28