ggeo1 Δημοσ. 27 Ιουλίου 2011 Δημοσ. 27 Ιουλίου 2011 Καλησπέρα, Λοιπόν , προσπαθώ σε c++ να βρω τους συντελεστές lagrange. Η άσκηση λέει "Find Lagrange's polynomial approximation for y(x)=cos(π x), x ∈−1,1 using 5 points (x = -1, -0.5, 0, 0.5, and 1)." Αυτό που προσπαθώ να πετύχω και δεν μπορώ (διότι κάτι λάθος κάνω μάλλον) είναι το εξής: Στον pointer d θέλω να κρατώ τις τιμές του πολυωνύμου για κάθε συντελεστή lagrange. Για παράδειγμα , για τον συντελεστή L1(x) ,το d[0] θα είναι "x-x2/x1-x2" ,d[1] θα είναι (x-x2/x1-x2)*(x-x3/x1-x3) κτ (Επισυνάπτω και τη λύση της άσκησης με το χέρι.) Επίσης , τα προβλήματά μου είναι : 1) πώς θα αρχικοποιήσω την d (έχω κάνει d[0]=(z-x)/(x[k]-x) αλλά νομίζω ότι δεν είναι σωστό το "d[0]" 2) πώς θα αρχικοποιήσω το L_coeff. ( χρησιμοποιώ L_coeff=new double[0] αλλά δεν ξέρω αν είναι σωστό. Ο κώδικας : >#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> using namespace std; const double pi=3.14159265358979323846264338327950288; // my function double f(double x){ return (cos(pi*x)); } //function to compute lagrange polynomial double lagrange_polynomial(int N,double *x){ //N = degree of polynomial double z,y; double *L_coeff=new double [0];//L_coefficients of every Lagrange L_coefficient double *d;//hold the polynomials values for every Lagrange coefficient int k,i; //computations for finding lagrange polynomial //double sum=0; for (k=0;k<N+1;k++){ for ( i=0;i<N+1;i++){ if (i==0) continue; d[0]=(z-x[i])/(x[k]-x[i]);//initialization if (i==k) L_coeff[k]=1.0; else if (i!=k){ L_coeff[k]*=d[i]; } } cout <<"\nL("<<k<<") = "<<d[i]<<"\t\t\tf(x)= "<<f(x[k])<<endl; } } int main() { double deg,result; double *x; cout <<"Give the degree of the polynomial :"<<endl; cin >>deg; for (int i=0;i<deg+1;i++){ cout <<"\nGive the points of interpolation : "<<endl; cin >> x[i]; } cout <<"\nThe Lagrange L_coefficients are: "<<endl; result=lagrange_polynomial(deg,x); return 0; } Eπίσης, εδώ έχει μια λύση αλλά δεν την πολυκαταλαβαίνω. (καλοκαιριάτικα τώρα Lagrange,τι μας λες .. )
V.I.Smirnov Δημοσ. 27 Ιουλίου 2011 Δημοσ. 27 Ιουλίου 2011 Εδώ που είμαι τώρα δεν μπορώ να δώσω πλήρη απάντηση. Δες το παρακάτω απόσπασμα κώδικα. Θα πάρεις μιαν ιδέα πώς να διορθώσεις το δικό σου. (Τα παρακάτω τα γράφω απ έξω - ελπίζω να μην έχω λάθος...) > nPt : πλήθος δοθέντων σημείων (0 ως n) ipt : πίνακας με τις συντεταγμένες (x,y) των σημείων αυτών. Τα σημεία αυτά χρησιμοποιούνται για την εύρεση των συντελεστών. h : βήμα μεταξύ των δοθέντων σημείων (θεωρούνται ισαπέχοντα) m : πλήθος σημείων όπου ζητούνται οι τιμές με παρεμβολή (0 ως m) pt : πίνακας με τις συντεταγμένες (x,y) των σημείων στα οποία ζητουνται οι τιμές με παρεμβολή Οι τιμές pt.x δίνονται. Σε αυτές τις θέσεις θα βρεθούν οι pt.y με παρεμβολή. typedef struct { double x,y; } PT; PT *pt,*ipt; int i,j,k; double L, h=(ipt[nPt-1].x-ipt[0].x)/m; pt[0].x=ipt[0].x; pt[0].y=ipt[0].y; for (i=0;i<=m;i++) { pt[i].y=0; for (j=0;j<=nPt-1;j++) { L=1; for (k=0;k<=nPt-1;k++) if (j!=k) L *= (pt[i].x-ipt[k].x)/(ipt[j].x-ipt[k].x); pt[i].y += ipt[j].y*L; } if (i<m) pt[i+1].x=pt[i].x+h; } Η παρεμβολή με το πολυώνυμο Langrange έχει κάποια μειονεκτήματα. Στην πράξη, όταν χρειάζεται πολυωνυμική παρεμβολή, εφαρμόζεται ο αλγόριθμος Neville's... Tέλος, το πλήθος των συντελεστών είναι όσο αυτό των δοθέντων σημείων, δηλ n, συνεπώς το L_coeff=new double[0] που γράφεις είναι λάθος.... -
ggeo1 Δημοσ. 27 Ιουλίου 2011 Μέλος Δημοσ. 27 Ιουλίου 2011 Καταρχήν , ευχαριστώ πολύ για την απάντηση! Δεν προλαβαίνω να το κοιτάξω πολύ ,θα το δω αύριο πιο λεπτομερώς μπας και βγάλω άκρη. Απλά,θα με βοηθούσε να μπορέσω να το υλοποιήσω όπως το έχω στο μυαλό μου (δηλ να μπορώ κάπως να αποθηκεύω και έπειτα να εκτυπώνω τον κάθε πολυωνυμικό όρο (κάθε κλάσμα όπως λέω και παραπάνω) που βρίσκεται σε κάθε έναν συντελεστή lagrange)για να μάθω , τον τρόπο. Ευχαριστώ και πάλι για το χρόνο σου.
ggeo1 Δημοσ. 29 Ιουλίου 2011 Μέλος Δημοσ. 29 Ιουλίου 2011 Δυστυχώς , δε βγάζω άκρη!Με παιδεύει πολύ!Δεν μπορώ να χειριστώ τον κάθε όρο από κάθε έναν συντελεστή Lagrange. Έκανα κάποιες αλλαγές. Έβαλα τον όρο term ως pointer για να κρατά τον τις τιμές του πολυωνύμου για κάθε συντελεστή lagrange. Για παράδειγμα , για τον συντελεστή L1(x) ,το term[0] θα είναι "x-x2/x1-x2" ,term[1] θα είναι (x-x2/x1-x2)*(x-x3/x1-x3) κτλ Kαι τον συντλεστή Lagrange τον χρησιμοποιώ ως double. Τρέχοντας το πρόγραμμα μου εμφανίζει : Give the degree of the polynomial :4 Give the points of interpolation : -1 Give the points of interpolation : -0.5 Give the points of interpolation : 0 Give the points of interpolation : 0.5 Give the points of interpolation : 1 The Lagrange coefficients are: L(0) = 0.5 f(x)= -1 L(1) = 0.666667 f(x)= 4.63268e-05 L(2) = 1 f(x)= 1 L(3) = 2 f(x)= 4.63268e-05 L(4) = -1 f(x)= -1 1) Δεν μου εμφανίζει για κάθε συντελεστή Lagrange 5 όρους(το term) όπως θα έπρεπε αλλά μόνο έναν. 2) Φυσικά είναι λάθος τα αποτελέσματα! 3) Εντάξει,δεν έχω ασχοληθεί για να φαίνεται με σωστή μορφή π.χ L(0)=0.67x^4-0.67x^3-0.17x^2+0.17x+0 αλλά αυτό αργότερα! >double lagrange_polynomial(int N,double *x){ //N = degree of polynomial double z; //double *L_coeff=new double [N];//L_coefficients of every Lagrange L_coefficient double *term=new double [N];//hold the polynomials values for every Lagrange coefficient double L_coeff; int k,i; //computations for finding lagrange polynomial for (k=0;k<N+1;k++){ for ( i=0;i<N+1;i++){ if (i==0) continue; if (i==k) L_coeff=1.0; else if (i!=k){ term[k]=(z-x[i])/(x[k]-x[i]); L_coeff*=term[k]; } } cout <<"\nL("<<k<<") = "<<term[k]<<"\t\t\tf(x)= "<<f(x[k])<<endl; } }
V.I.Smirnov Δημοσ. 29 Ιουλίου 2011 Δημοσ. 29 Ιουλίου 2011 Nα κάτι πιο κοντα σε αυτό που θέλεις. Έστω ότι δίνονται τα n+1 σημεία (xv,yv) και ένα σημείο x όπου όπου ζητείται να γίνει παρεμβολή. Η ρουτίνα lagrange_polynomial, επιστρέφει τον πίνακα li ο οποίος περιέχει τις τιμές των συντελεστών langrange για τα (xv,yv) στο σημείο x . Επίσης επιστρέφει την τιμή y της παρεμβολής στο x. >#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> using namespace std; const double Pi=4.*atan(1.); // my function double f(double x){ return cos(Pi*x); } //function to compute lagrange polynomial double lagrange_polynomial(int n, double x, double *xv, double *yv, double *li) { int i,j; double y, xi, denom; double eps= 10E-9; y=0.; for (i=0; i<n; i++) { li[i]=1.; xi=xv[i]; for (j=0; j<n; j++) { if (j != i) { denom = xi-xv[j]; if (fabs(denom)<eps) { cout << "error : coincident nodes. Aborting..."; exit(1); } li[i] *= (x-xv[j])/denom; } } y += yv[i]*li[i]; } return y; } int main() { int deg; double x, result; cout <<"Give the degree of the polynomial : "; cin >> deg; double *xv=new double[deg+1]; double *yv=new double[deg+1]; double *li=new double[deg+1]; cout <<"\nGive the known values x y : " << endl; for (int i=0;i<deg+1;i++){ cout << "\n" << i << " :\n" << " x = "; cin >> xv[i]; cout << " y = "; cin >> yv[i]; } //double xv[]={2, 3, 4, 5}; //double yv[]={.5, .333333, .25, .2}; //double li[4]; //deg=3; cout <<"\nGive a x to interpolate : "; cin >> x; result = lagrange_polynomial(deg+1, x, xv, yv, li); cout << "\nThe interpolated value at at x = " << x << " is " << result << endl; cout << "\nThe Langrange coefficients for the given points are :" << endl; for (int i=0;i<deg+1;i++) cout <<"L(" << xv[i] << ") = " << li[i] << endl ; cout << endl ; return 0; } Οι συντελεστές langrange εξαρτώνται από το σημείο όπου ζητείται η παρεμβολή. To να βρεις τους μεμονωμένους όρους για καθέναν απο αυτούς που τον απαρτίζουν ως πολυώνυμο γίνεται επισης αλλά δεν έχει νόημα διότι δεν χρειάζονται πουθενά. Νόημα θα είχε να βρεθεί η μορφή του παρεμβολικού πολυωνύμου για τα δεδομένα σημεία (xv,yv). -
ggeo1 Δημοσ. 30 Ιουλίου 2011 Μέλος Δημοσ. 30 Ιουλίου 2011 Καλησπέρα! Καταρχήν ευχαριστώ πάρα πολύ!Να σαι καλά για τη βοήθεια! 1) Δεν καταλαβαίνω γιατί ο κώδικας δεν δουλεύει σωστά να βάλεις "if (i==j) li=1.0;" αντί για li=1.0; 2) To να βρεις τους μεμονωμένους όρους για καθέναν απο αυτούς που τον απαρτίζουν ως πολυώνυμο γίνεται επισης αλλά δεν έχει νόημα διότι δεν χρειάζονται πουθενά. Αυτό είναι που ήθελα να κάνω εξαρχής (άσχετα αν έχει νόημα,το κάνω για να μπορέσω να μάθω πώς μπορεί να γίνει αυτό το πράγμα,να κρατάω δηλ τον κάθε όρο) και σπάω το κεφάλι μου ακόμη να το βρω.Γι αυτό έβαζα στον κωδικά μου τον όρο term αλλά φυσικά είναι λάθος. Αν έχεις κάποιο tip γι αυτό θα με βοηθούσε πάρα πολύ...(χωρίς να κάτσεις δηλ να ασχοληθείς πάλι,αρκετά έκανες!) Και πάλι ευχαριστώ! ΕDIT -------------------- Επίσης,το πρόγραμμα δε δουλεύει αν δε δώσουμε μια τιμή του χ στην οποία να κανει interpolate ,έτσι?Επειδή δεν λειτουργεί με symbolic links η c++? Δεν υπάρχει δηλ περίπτωση να μη δώσουμε την τιμή του χ? ΕDIT ---------------------------- Λοιπόν,κάτι έκανα.. Πρόσθεσα τον όρο term ο οποίος θα κρατάει κάθε έναν όρο κλάσματος από κάθε συντελεστή lagrange. Το πρόβλημα είναι πως στα αποτελέσματα μου δίνει μόνο το τελευταίο κλάσμα από κάθε συντελεστή lagrange. Για παράδειγμα , L(0)=(x-x1)/(x0-x1) * (x-x2)/(x0-x2) * (x-x3)/(x0-x3) * (x-x4)/(x0-x4) Ενώ θέλω να έχω τιμή για κάθε κλάσμα , το πρόγραμμα όπως το εκανα τώρα δίνει μόνο τον τελευταίο όρο ,δηλ το (χ-χ4)/(χ0-χ4). > double lagrange_polynomial(int N,double x,double *xpts ,double *L_coeff,double *term){ //N = degree of polynomial int k,i; double eps=10e-9; //error //computations for finding lagrange polynomial double sum=0; for (k=0;k<N+1;k++){ L_coeff[k]=1.0; for ( i=0;i<N+1;i++){ if (k!=i){ if (fabs(xpts[k]-xpts[i])<eps) { cout << "error : coincident nodes. Aborting..."; exit(1); } //L_coeff[k]*=(x-xpts[i])/(xpts[k]-xpts[i]); term[k]=(x-xpts[i])/(xpts[k]-xpts[i]); L_coeff[k]*=term[k]; } } sum+=L_coeff[k]*f(xpts[k]); } return sum; } int main() { int deg; double *xpts=new double [deg]; double *L_coeff=new double [deg]; double *term=new double [deg]; double result,x=0.2; cout <<"Give the degree of the polynomial :"<<endl; cin >>deg; for (int i=0;i<deg+1;i++){ cout <<"\nGive the points of interpolation : "<<endl; cin >> xpts[i]; } cout <<"\nThe Lagrange coefficients are: "<<endl; result=lagrange_polynomial(deg,x,xpts,L_coeff,term); cout <<result; cout << "\nThe Langrange coefficients for the given points are :" << endl; for (int i=0;i<deg+1;i++) { cout <<"L(" << xpts[i] << ") = " << L_coeff[i] << endl ; cout <<"\nTerm(" << i << ") = " <<term[i]<<endl; } return 0; }
V.I.Smirnov Δημοσ. 30 Ιουλίου 2011 Δημοσ. 30 Ιουλίου 2011 Υποθέτω ότι πρώτα δούλευες σε κάποιο συμβολικό πακέτο όπως το matlab ή το mathematica. Mην τα συγχέεις με τις κλασσικές γλώσσες προγραμματισμού όπως η C++, fortran κλπ. - είναι εντελώς διαφορετικό πράγμα. Και φυσικά η C++ δεν χειρίζεται συμβολικά τίποτε. Προφανώς λοιπόν το πρόγραμμα απαιτεί όλες οι μεταβλητές να έχουν τιμή για να τις χειριστεί. Αν κοιτάξεις προσεκτικά τον κώδικα στην lagrange_polynomial(...) θα δεις ότι έχει δυο βρόγχους. Εστω x είναι το σημείο όπου ζητείται η παρεμβολή. Το εσωτερικό for υπολογίζει τον συντελεστή Langrnage Lj(x) για κάποιο τρέχον σημείο j από τα δοθέντα. Δηλ. π.χ. για το πρώτο σημείο βρίσκει τον L0(x)=(x-x1)/(x0-x1) * (x-x2)/(x0-x2) * (x-x3)/(x0-x3) * (x-x4)/(x0-x4) για το δεύτερο τον L1(x)=(x-x0)/(x1-x0) * (x-x2)/(x1-x2) * (x-x3)/(x1-x3) * (x-x4)/(x1-x4) κλπ Το εξωτερικό for πολ/ζει το Lj(x) που μόλις βρέθηκε με την δοθείσα τιμή yj : L0*y0 ή L1*y1 κλπ και τα προσθέτει για να βρει τελικά το συνολικό : L0*y0 + L1*y1 + L1*y1 + L3*y3 + L4*y4 που είναι η τιμή της παρεμβολής. Για να κρατάς τους μεμονωμένους όρους κεθενός Lj(x) πρέπει να χρησιμοποιήσεις ένα διπλό πίνακα. Ο ένας δείκτης θα αναφέρεται στο σημείο xj που σαρώνει ο εξωτερικός βρόγχος και ο άλλος δείκτης στον όρο του Lj που σαρώνει ο εσωτερικός βρόγχος. To term που έβαλες κρατά μεν την τιμή για το σημείο xj του εξωτερικού βρόγχου αλλά όχι για τους μεμονωμένους όρους που υπολογίζονται στον εσωτερικό. Κατά την σάρωση του εσωτερικού βρόγχου το term[k] αλλάζει διαρκώς και μένει τελικά μόνον με την τελευταία τιμή, αυτό είναι το λάθος. Για να μην παιδεύεσαι με διπλούς πίνακες, καλύτερα τύπωνε τους συντελεστές μόλις βρεθούν.... Καλή επιτυχία... -
adamco Δημοσ. 30 Ιουλίου 2011 Δημοσ. 30 Ιουλίου 2011 Έκανα ένα πρόγραμμα το οποίο για τα παρακάτω δεδομένα: > x = 2.9 xi(0) = 0 xi(1) = 1 xi(2) = 3 fi(0) = -5 fi(1) = 1 fi(2) = 25 μου έδωσε ως αποτέλεσμα αυτά: > L(0)=(x-1)*(x-3)/((0-1)*(0-3)) L(1)=(x-0)*(x-3)/((1-0)*(1-3)) L(2)=(x-0)*(x-1)/((3-0)*(3-1)) Για x=2.9 f(x)=23.42 Αν σε βολεύει έτσι να σου δώσω το πρόγραμμα αλλά για να εκτελεί όλες τις πράξεις στα πολυώνυμα Lagrange θέλει δουλειά ακόμα. Για τον υπολογισμό του τελικού παρεμβολικού πολυωνύμου f(x) = a0 + a1x + ... + anx^n είναι προτιμότερο -αντί να εκτελέσεις τις πράξεις στα πολυώνυμα Lagrange- να το συνδυάσεις και με το πρόγραμμα της επίλυσης των γραμμικών συστημάτων του Smirnov με την μέθοδο Gauss. Το αποτέλεσμα θα ισοδυναμεί με την εκτέλεση των αλγεβρικών πράξεων στα παραπάνω πολυώνυμα Lagrange. Δηλαδή f(x) = L0(x)f0 + L1(x)f1+ ... +Ln(x)fn
ggeo1 Δημοσ. 31 Ιουλίου 2011 Μέλος Δημοσ. 31 Ιουλίου 2011 V.I.Smirnov Αυτό σκέφτηκα και γω (για τον διπλό πίνακα).Θα το κοιτάξω πάλι αύριο και θα το δοκιμάσω.Ευχαριστώ πολύ για τη βοήθεια! (Ναι,έχω ασχοληθεί με matlab και mathematica αλλά μη φανταστείς τίποτα ιδιαίτερο.Θέλω να εξασκηθώ στη C++ και έχω αρκετές ασκήσεις ακόμα!) adamco Ότι μπορείς να δώσεις,χρήσιμο θα είναι ,να το κοιτάξω! Ευχαριστώ!
adamco Δημοσ. 1 Αυγούστου 2011 Δημοσ. 1 Αυγούστου 2011 Αυτό σκέφτηκα και γω (για τον διπλό πίνακα).Θα το κοιτάξω πάλι αύριο και θα το δοκιμάσω.Ευχαριστώ πολύ για τη βοήθεια! (Ναι,έχω ασχοληθεί με matlab και mathematica αλλά μη φανταστείς τίποτα ιδιαίτερο.Θέλω να εξασκηθώ στη C++ και έχω αρκετές ασκήσεις ακόμα!) Ότι μπορείς να δώσεις,χρήσιμο θα είναι ,να το κοιτάξω! Ευχαριστώ! Το πρόγραμμα είναι σε RapidQ. Την C++ την έχω στο άλλο pc που είναι για επισκευή. Εφόσον θέλεις να εξασκηθείς στην C++ μπορείς να το μεταφράσεις πολύ εύκολα. Για την επίλυση του γραμμικού συστήματος τελικά χρησιμοποίησα την μέθοδο Jοrdan. > $INCLUDE "RAPIDQ.INC" DECLARE SUB Button1Click (Sender AS QBUTTON) DECLARE SUB Lagrange DECLARE SUB Jordan dim i as integer, n as integer, x as double, xe as double dim CRLF as string CRLF = chr$(13)+chr$(10) dim c as double, p as double dim txt as string, denom as string, tmp1 as string, tmp2 as string dim a(20, 21) as double, b(20, 21) as double, w as double dim r as integer, j as integer, lt as integer, nc as integer NMAX = 5 dim xi(NMAX) as double dim fi(NMAX) as double xe=.9 xi(0)=-1 xi(1)=-0.5 xi(2)=0 xi(3)=0.5 xi(4)=1 fi(0)=-1 fi(1)=0 fi(2)=1 fi(3)=0 fi(4)=-1 CREATE Form AS QFORM Caption = "Form1" Width = 620 Height = 340 Center CREATE Button1 AS QBUTTON Caption = "Button1" Left = 24 Top = 300 OnClick = Button1Click END CREATE CREATE Edit1 AS QEDIT Text = "" Left = 24 Top = 16 width=1000 TabOrder = 1 END CREATE CREATE Edit2 AS QRICHEDIT Left = 24 Top = 48 width=1000 height=250 Font.Name="Courier" TabOrder = 2 END CREATE END CREATE Form.ShowModal Sub Button1Click (Sender AS QBUTTON) for k = 0 to NMAX-1 edit1.text = edit1.text+str$(xi(k))+ "/" next k Call Lagrange edit2.addstrings CRLF edit2.text = edit2.text+"Για x = " + str$(xe) +" f(x) = "+ str$(p) edit2.addstrings CRLF txt="f(x) = " Call Jordan end sub Sub Lagrange n=NMAX p=0 denom = "/(" for i = 0 to n-1 c = fi(i) for j = 0 to n-1 if i=j then goto 100 c = c*(xe-xi(j))/(xi(i)-xi(j)) if xi(j)<0 then tmp1="+" if xi(j)>=0 then tmp1="-" txt=txt+"(" + "x" +tmp1 +str$(abs(xi(j))) +")*" if xi(j)<0 then tmp1="+" if xi(j)>=0 then tmp1="-" denom=denom + "(" + str$(xi(i))+ tmp1+ str$(abs(xi(j)))+ ")*" 100 next j p=p+c denom = denom + ")" txt=left$(txt,len(txt)-1) denom =left$(denom,len(denom)-2)+")" edit2.addstrings "L"+str$(i)+"=" +txt + denom txt="" denom="/(" next i end sub Sub Jordan n=NMAX nc = n + 1 for i = 1 to n for j=1 to n a(i,j)=xi(i-1)^(j-1) next j a(i,nc)=fi(i-1) next i for r = 1 to n w = a(r, r) c = r for t = r + 1 to n if abs(a(t, r)) < abs(w) then goto 300 w = a(t, r) c = t 300 next t for lt = 1 to nc prop = a(r, lt) a(r, lt) = a(c, lt) a(c, lt) = prop next lt for j = 1 to nc b(r, j) = a(r, j) / w next j for i = 1 to n if i = r then goto 500 for j = 1 to nc b(i, j) = a(i, j) - a(i, r) * b(r, j) next j 500 next i for i = 1 to n for j = 1 to nc a(i, j) = b(i, j) next j next i next r for i = 1 to n Edit2.addstrings str$(a(i, nc)) next i Edit2.addstrings CRLF tmp1="" for i = 1 to n if a(i, nc)<>0 then if i=1 then tmp2="" else tmp2="x" + "^" + str$(i-1) end if if a(i, nc)>0 then tmp1="+" if a(i, nc)<0 then tmp1="" txt=txt+ tmp1+str$(a(i, nc)) + tmp2 end if next i Edit2.text=Edit2.text + txt end sub Αν το τρέξεις το πρόγραμμα θα σου δώσει το ίδιο παρεμβολικό πολυώνυμο με αυτό του αρχικού link: > L0=(x+0.5)*(x-0)*(x-0.5)*(x-1)/((-1+0.5)*(-1-0)*(-1-0.5)*(-1-1)) L1=(x+1)*(x-0)*(x-0.5)*(x-1)/((-0.5+1)*(-0.5-0)*(-0.5-0.5)*(-0.5-1)) L2=(x+1)*(x+0.5)*(x-0.5)*(x-1)/((0+1)*(0+0.5)*(0-0.5)*(0-1)) L3=(x+1)*(x+0.5)*(x-0)*(x-1)/((0.5+1)*(0.5+0.5)*(0.5-0)*(0.5-1)) L4=(x+1)*(x+0.5)*(x-0)*(x-0.5)/((1+1)*(1+0.5)*(1-0)*(1-0.5)) Για x = 0.9 f(x) = -1.0304 1 0 -4.66666667 0 2.66666667 f(x) = +1-4.66666667x^2+2.66666667x^4
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.