panakart Δημοσ. 4 Ιανουαρίου 2011 Δημοσ. 4 Ιανουαρίου 2011 Καλησπέρα, έχω την εξής άσκηση:Να λύσετε με την εξίσωση Schrodinger y''=-B(x)*y του αρμονικού ταλαντωτή όπου V(x)=(1/2)*x^2,E=k+1/2,B(x)=2[E-V(x)] για y(0)=y(n)=0,xε[-R,R] R=3,4,5 n=100,1000 k=0,1,2 τις εξής: i)y(n+1)-2*y(n)+y(n-1)=h^2*f(n) και ii)y(n+1)-2*y(n)+y(n-1)=h^2/12(f(n+1)+10*f(n)+f(n-1)). Θα ήθελα αν μπορούσατε να μου λύσετε κάποιες απορίες: 1.το h βγαίνει απο τον τύπο (x(n)-x(0))/n και είναι 1(και στις 2 περιπτώσεις); 2.αφού ολοκληρώσω 2 φορές και βρω την y(n),για να υπολογίσω y(0),θέτω κ=0 και x=3,για y(1) κ=1,x=4 κ.ο.κ; 3.το f(n) είναι f(x,y) δηλαδή -B(x)*y; και 4.αφού όλα είναι δωσμένα,εγώ τι ακριβώς ψάχνω να βρω; Σας παρακαλώ αν μπορείτε απαντήστε μου-ευχαριστώ προκαταβολικά για τον χρόνο σας.
bokarinho Δημοσ. 4 Ιανουαρίου 2011 Δημοσ. 4 Ιανουαρίου 2011 Καλησπέρα, έχω την εξής άσκηση:Να λύσετε με την εξίσωση Schrodinger y''=-B(x)*y του αρμονικού ταλαντωτή όπου V(x)=(1/2)*x^2,E=k+1/2,B(x)=2[E-V(x)] για y(0)=y(n)=0,xε[-R,R] R=3,4,5 n=100,1000 k=0,1,2 τις εξής: i)y(n+1)-2*y(n)+y(n-1)=h^2*f(n) και ii)y(n+1)-2*y(n)+y(n-1)=h^2/12(f(n+1)+10*f(n)+f(n-1)). Θα ήθελα αν μπορούσατε να μου λύσετε κάποιες απορίες: 1.το h βγαίνει απο τον τύπο (x(n)-x(0))/n και είναι 1(και στις 2 περιπτώσεις); 2.αφού ολοκληρώσω 2 φορές και βρω την y(n),για να υπολογίσω y(0),θέτω κ=0 και x=3,για y(1) κ=1,x=4 κ.ο.κ; 3.το f(n) είναι f(x,y) δηλαδή -B(x)*y; και 4.αφού όλα είναι δωσμένα,εγώ τι ακριβώς ψάχνω να βρω; Σας παρακαλώ αν μπορείτε απαντήστε μου-ευχαριστώ προκαταβολικά για τον χρόνο σας. Ρε φίλε αντικειμενικά μήπως έχεις ποστάρει σε λάθος φόρουμ; Το γεγονός ότι αυτό είναι φόρουμ Προγραμματισμού δεν σου λέει κάτι; Άντε το section έχει πάρει την κάτω βόλτα, παλαιότερα ήταν αλλιώς τα πράγματα. Αν αναμένεις βοήθεια μάλλον από ένα άτομο εδώ μέσα θα σου έρθει για το θέμα αυτό, ανάλογα με τις ορέξεις του και αυτός ακούει στο όνομα V.I S.
V.I.Smirnov Δημοσ. 5 Ιανουαρίου 2011 Δημοσ. 5 Ιανουαρίου 2011 @bokarihno Έχεις δίκιο, αλλά παραβλέπεις κάτι : από την εκφώνηση είναι φανερό ότι ζητείται αριθμητική επίλυση (δηλ. πώς να γίνει με πρόγραμμα), όχι αναλυτική. Καθαρά προγραμματιστικό είναι το θέμα. Και μάλλον ούτε και ο panakart έχει καταλάβει τι γίνεται, αλλιώς θα ρωτούσε άλλα πράγματα ! @panakart Ζητείται αριθμητική επίλυση στo διάστημα [-R,R]. Η αναλυτική λύση είναι τελείως διαφορετική ιστορία - πολύ δυσκολότερη - και δεν έχει θέση εδώ. Το n=2R/h είναι το πλήθος των διαστημάτων μήκους h στα οποία χωρίζεται το διάστημα ολοκλήρωσης [-R,R]. Άρα το βήμα είναι h=2R/n όπου δίνεται n=100 ή n=1000. ( Το 1 που λες είναι λάθος. ) Για n διαστήματα έχεις n+1 σημεία που αριθμώνται μετρώντας από το 0 έως τo και το n. Με y(0) εννοεί το y στο πρώτο σημείο, δηλ. το y(i=0). Όμοια το y(i=n) είναι το τελευταίο. Προφανώς κατά την επίλυση κάπου θα πρέπει να βρίσκεις τις τιμές του x, δηλ. x = xo + i*h, όπου xo=-R. Για i=0 και i=n είναι x=xo=-R και x=R αντίστοιχα. H εξ. Schrodinger με τις δεδομένες συνθήκες είναι ένα συνοριακό πρόβλημα 2ης τάξης (2nd order boundary value problem). Τέτοια προβλήματα λύνονται αριθμητικά με την μέθοδο "στόχευσης" (Shooting method) ή με πεπερασμένες διαφορές (finite difference method). Στην εν λόγω εξίσωση συνηθίζεται περισσότερο ο δεύτερος τρόπος, δηλ. λύση με πεπερασμένες διαφορές. Και τα υπόλοιπα δεδομένα υπονοούν ότι αυτήν ζητά. Δες τι πρέπει να κάνεις για τη μέθοδο αυτή. α) οι παράγωγοι προσεγγίζονται από πεπερασμένες διαφορές και αντικαθίστανται στην αρχική διαφορική εξίσωση. - 1η παράγωγος : y'(i) = ( y(i+1)-y(i-1) )/(2*h) - 2η παράγωγος : y''(i) = ( y(i+1)-2*y(i)+y(i-1) )/(h^2) Τα y' και y'' από τις παραπάνω σχέσεις τα βάζεις στην αρχική εξίσωση και κάνεις τις πράξεις. Προκύπτει μια σχέση για τα x,y, ας την πούμε (Σ). Η (Σ) δεν θα έχει πλέον παραγώγους αφού αυτές αντικαταστάθηκαν με τις προσεγγίσεις τους. β) η σχέση (Σ) που προέκυψε, εφαρμόζεται σε όλα τα σημεία xi που χώρισες το διάστημα λύσης. Τα xi τα ξέρεις. Προφανώς όλες οι ποσότητες που εξαρτώνται μόνον από τα xi, δηλ. εδώ το V(x), είναι επίσης γνωστές. Τα yi, δηλ. τις τιμές της συνάρτησης στα xi, ΔΕΝ τα ξέρεις παρά μόνον στα σημεία που δίνονται. Π.χ. εδώ δίνει ότι y(i=0) = y(i=n) =0. Έτσι, εφαρμόζοντας στα σημεία του διαστήματος την (Σ), στήνεται ένα σύστημα που πρέπει να λύσεις ως προς τα yi. Αν τα βρεις, έχεις βρει τις τιμές της εξίσωσης στα δεδομένα σημεία και άρα έλυσες την εξίσωση στο δοθέν διάστημα. Οι πεπερασμένες διαφορές σε συνοριακά προβλήματα όπως το παραπάνω καταλήγουν σε τριδιαγώνια συστήματα. Αν το πρόβλημα είναι γραμμικό όπως αυτό εδώ, το σύστημα είναι επίσης γραμμικό και λύνεται εύκολα με μια κοινή μέθοδο όπως gauss, crout, thomas, κλπ. Aν είναι μη γραμμικό, προκύπτει μη γραμμικό σύστημα που είναι πιο δύσκολο αλλά μπορεί να λυθεί με Newton-Raphson. Για να βοηθηθείς περισσότερο με τις πράξεις, να λίγα ακόμα σε γενική μορφή. Έστω ότι θέλεις να λύσεις το πρόβλημα p(x)y'' + q(x)y' + r(x)y = w(x) , με x στο [a,b] και y(a)=ya, y( b )=yb Τα p,q,r,w προϋποτίθεται ότι είναι γνωστές συνεχείς συναρτήσεις του x. Χωρίζεις το διάστημα [a,b] σε n=(b-a)/h διαστήματα (ή βρίσκεις το βήμα h αν δίνεται το n) οπότε xi=a+i*h, x(i=0)=a, x(i=n)=b. H παραπάνω σχέση διακριτοποιείται : p(i)y(i)'' + q(i)y(i)' + r(i)y(i) = w(i) , όπου το i έχει τιμές i = 0,1,2,...n . Bάζεις τις σχέσεις των παραγώγων που είπαμε, κάνεις πράξεις και λαμβάνεται τελικά ( p(i)/(h^2) - q(i)/(2*h) ) y(i-1) + (-2* p(i)/(h^2) + r(i) ) y(i) + ( p(i)/(h^2) + q(i)/(2*h) ) y(i+1) = w(i) Aυτή είναι η γενική μορφή της (Σ) που λέγαμε πιο πάνω. To y(i-1) σημαίνει η (άγνωστη) τιμή του y(x) στο σημείο i. Όμοια και για τα y(i), y(i+1). Το pi ή p(i) σημαίνει η γνωστή τιμή του του p(x) στο σημείο i, δηλ. το p(xi) με xi=a+i*h. Όμοια και για τα q(i),r(i),w(i). Παρακάτω χρησιμοποιώ εναλλακτικά τα pi και p(i) κλπ αφού σημαίνουν το ίδιο. Tο [a,b] έχει n+1 σημεία. Στα άκρα δίνεται ότι y(0)=ya, y(n)=yb, άρα υπάρχουν n-1 άγνωστοι y(i), αυτοί στα εσωτερικά σημεία του [a,b]. Παρατήρησε ότι κάθε φορά που εφαρμόζεις την (Σ) εμπλέκονται 3 σημεία του διαστήματος, τα y(i-1) , y(i), y(i+1). Το σύστημα θα έχει την μορφή ΑΧ=Β και θα αφορά τα n-1 εσωτερικά σημεία του διαστήματος. Μετά από τις πράξεις βρίσκεται η μορφή των A,B : Ο Β έχει τους όρους (όλοι γνωστοί) στο i = 1 : w1 -( p1/(h^2) - q1/(2*h) ) y(0) στο i = 2,3,..n-2 : wi στο i = n-1 : w(n-1) - ( p(n-1)/(h^2) + q(n-1)/(2*h) ) y(n) O Χ έχει τους αγνώστους y1 y2 ... y(n-3) y(n-2) y(n-1) O A έχει στο j = i και i = 1,2,..n-1 : -2*pi/(h^2) + ri στο j = i+1 και i = 1,2,...n-2 : pi/(h^2) + qi/(2*h) στο j = i-1 και i = 2,...n-1 : pi/(h^2) - qi/(2*h) Τα υπόλοιπα στοιχεία του είναι μηδενικά. Να και σε πολύ αδρές γραμμές ένα (κακογραμμένο) απόσπασμα ψευδοκώδικα που φτιάχνει το σύστημα, δηλ τους πίνακες Α,Β. Τα σύμβολα είναι περίπου αυτά που έβαλα πριν (p,q,r,w κλπ). >int i,j; double h double **a,*b; double *p,*q,*r,*w; b=new double [M+1]; p=new double [M+1]; q=new double [M+1]; r=new double [M+1]; w=new double [M+1]; a=new double *[M+1]; h=...; m=(int)(b-a))/h; x[0]=xo=a x[m]=xi=x+(double)m*h = b; y[0]=ya; y[m]=yb; // fill the p,q,r,w with their appropriate values in [a,b] for (i=1;i<=m-1;i++) { p[i]=... q[i]=... r[i]=... w[i]=... } // make the matrices A,B for the system AX=B and zero them for (i=0;i<=n;i++) a[i]=new double [n+1]; for (i=1;i<=n-1;i++) { for (j=1;j<=n-1;j++) { a[i][j]=0; } b[i]=0; } // fill the matrices A, B to be ready for solving the system b[1]=w[1]-(p[1]/(h*h)-q[1]/(2*h))*y[0]; b[n-1]=w[n-1]-(p[n-1]/(h*h)+q[n-1]/(2*h))*y[n]; for (i=1;i<=n-1;i++) { a[i][i]=-2*p[i]/(h*h)+r[i]; if (i>1) a[i-1][i]=p[i-1]/(h*h)+q[i-1]/(2*h); if (i<n-1) a[i+1][i]=p[i+1]/(h*h)-q[i+1]/(2*h); if (i>1 && i<n-1) b[i]=w[i]; } SolveTheSystem(a,; Tα παραπάνω αφορούν πώς λύνεται ένα συνοριακό πρόβλημα του εν λόγω είδους με πεπερασμένες διαφορές. Στην δική σου περίπτωση η εκφώνηση λέει "να λύσετε με την....τις ...." και παραθέτει δυο σχέσεις. Δηλ. εννοεί ότι πρέπει να βρεις την f κι' όχι την y. Να τι πρέπει να κάνεις. Οι τιμές (λύση) της y βρίσκονται όπως είπαμε πριν (πάρε τους τύπους έτοιμους και βάλε τα δικά σου δεδομένα για τα p,q,r,w). Αφού λύσεις την εξίσωση Schrodinger, δηλ. βρεις τα yi, πρέπει για καθεμιά από τις δυο σχέσεις να βρεις τις τιμές της f στα αντίστοιχα σημεία. Aυτό είναι και το τελικό ζητούμενο. i) στην πρώτη σχέση, η f βρίσκεται άμεσα διότι είναι ( y(i+1)-2*y(i)+y(i-1) )/(h^2)=y''(i)=-B(i)*y(i)=f(i) , δηλ. f(i)=-B(i)*y(i) όπου τα y(i) έχουν βρεθεί με τον παραπάνω τρόπο. ii) στην δεύτερη σχέση είναι ( y(i+1)-2*y(i)+y(i-1) )/(h^2)=y''(i)=-B(i)*y(i)=(f(i+1)+10*f(i)+f(i-1))/12 , δηλ. f(i+1)+10*f(i)+f(i-1) = -12*B(i)*y(i) Eδώ, παρόλο που τα yi είναι γνωστά, τα f(i) δεν μπορούν να βρεθούν αμέσως. Για να τα βρεις πρέπει να φτιάξεις σύστημα. Αυτή η σχέση με τα f(i+1),f(i),f(i-1) που μόλις βρήκαμε είναι τώρα η σχέση (Σ). Kάνεις ότι και πριν αλλά με αυτή την νέα (Σ). Δηλαδή, όπως έγινε για την y, πρέπει να βρεις την μορφή των πινάκων A, B που τώρα θα αφορούν την f. Γράψε μερικά στοιχεία στην αρχή/μέση/τέλος και θα φανεί ποιά είναι. Λύσε το σύστημα και αυτό ήταν - έχεις τα fi ! Όσα έγραψα επαρκούν με το παραπάνω για να λύσεις το πρόβλημα. Καλή επιτυχία... -
sphinxgr Δημοσ. 5 Ιανουαρίου 2011 Δημοσ. 5 Ιανουαρίου 2011 Χαρά στο κουράγιο σου V.I...... Και λίγα λες!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.