< M A T L A B > Copyright 1984-2005 The MathWorks, Inc. Version 7.1.0.183 (R14) Service Pack 3 August 02, 2005 To get started, select MATLAB Help or Demos from the Help menu. >> % sessione di prova per calcolare un polinomio di interpolazione >> % definiamo la funzione >> f=@(x) 1./(1+25*x.*x) f = @(x) 1./(1+25*x.*x) >> % proviamo a prendere 100 punti tra -1 e 1 >> x=-1:2/100:1; >> size(x) ans = 1 101 >> %opps, sono 101 !! - pazienza - facciamo il grafico di f >> gg=f(x); >> plot(x,gg); >> % ok sembra a posto >> % ora proviamo a prendere solo 20 valori (ma veramente 20 ... >> x=-1:2/19:1; >> size(x) ans = 1 20 >> gg=f(x); >> plot(x,gg); >> % un po' pou' brutto il grafico, ma corretto >> % per calcolare il polinomio di interpolazione p(x)=c1+c2*x+c3*x^2+...+c20*x^19 >> % devo calcolare i 20 coefficienti c dalle condizioni nei punti x1...x20 >> % mi fabbrico allora la matrice di Vandermonde >> % la prima colonna tutta di 1 >> V=ones(20,1) V = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >> % ora devo aggiungere le colonne con le potenxe di x >> for k=1:19 V=[V,(x').^k]; end >> size(V) ans = 20 20 >> % calcolo i coefficienti del polinomio >> c=inv(V)*gg' c = 1.0e+05 * 0.0000 -0.0000 -0.0002 0.0000 0.0033 -0.0000 -0.0306 0.0000 0.1717 -0.0000 -0.5858 0.0000 1.2102 -0.0000 -1.4679 0.0000 0.9560 -0.0000 -0.2567 0.0000 >> % provo a calcolare qualche punto >> phorn(x(5),c)-gg(5) ans = 3.9698e-11 >> gg(5) ans = 0.1066 >> % faccio un grafico: chiamo pp i punti del polinomio >> for k=1:20 pp(k)=phorn(x(k),c); end >> plot(pp,x) >> plot(x,pp) >> % sembra a posto; vediamo i due grafici assieme >> plot(x,pp,x,gg) >> % sembrano sovrapposti >> % vediamo in un intervallo piu' grande come stanno le cose >> y=-5:0.1:5; >> plot(y,f(y)) >> size(y) ans = 1 101 >> for k=1:101 pp(k)=phorn(y(k),c); end >> plot(y,pp,y,f(y)) >> plot(y,pp) >> % completamente diverso, no ? >> y=-2:0.1:2; >> size(y) ans = 1 41 >> pp=0 pp = 0 >> for k=1:41 pp(k)=phorn(y(k),c); end >> size(pp) ans = 1 41 >> plot(y,pp) >> y=-0.5:0.01:0.5; >> size(y) ans = 1 101 >> for k=1:101 pp(k)=phorn(y(k),c); end >> plot(y,pp) >> y=-1.2:0.01:1.2; >> size(y) ans = 1 241 >> for k=1:241 pp(k)=phorn(y(k),c); end >> plot(y,pp) >> phorn(1,c) ans = 0.0385 >> f(1) ans = 0.0385 >> phorn(1.1,c) ans = -1.1619e+03 >>% insomma fuori dall'intervallo il polinomio schizza via ....