2015-12-21 5 views
4

J'ai créé un code pour calculer le résultat de la méthode des différences divisées et de la méthode de Lagrange en interpolant des points. Je voudrais aussi construire un polynôme en utilisant des variables symboliques mais comment puis-je accomplir cela?Générer un polynôme d'interpolation symbolique dans Scilab

function dividedDifferences(X,Y,x) 
    ddMatrix = X' 
    ddMatrix(:,2) = Y' 
    for j=3:length(Y)+3 
     for i=1:length(Y)+2-j 
      ddMatrix(i,j) = (ddMatrix(i,j-1)-ddMatrix(i+1,j-1))/(ddMatrix(i,1)-ddMatrix(i+j-2,1)) 
     end 
    end 
    disp(ddMatrix) 

    Px = 0 
    for j=2:length(Y)+1 
     prd = 1 
     for i=1:j-2 
      prd = prd * (x - ddMatrix(i,1)) 
     end 
     Px = Px + ddMatrix(1,j)*prd 
    end 
    disp(Px) 
    endfunction 

    function lagrange(X,Y,x) 
    for i=1:length(Y) 
     l(i)=1 
     for j=1:length(Y) 
      if i~=j 
       l(i) = l(i)*(x-X(j))/(X(i)-X(j)) 
      end 
     end 
    end 
    disp(l') 

    L=0 
    for i=1:length(Y) 
     L = L+Y(i)*l(i) 
    end 
    disp(L) 
endfunction 

//example instance 
X = [0 1 5 8] 
Y = [0 1 8 16.4] 
x = 7 

dividedDifferences(X,Y,x) 
lagrange(X,Y,x) 

Répondre

2

Pour créer un polynôme symbolique, initialiser une variable symbolique x = poly(0,"x") où x est le nom de la variable à utiliser dans le polynôme. Ensuite, continuez à calculer avec exactement comme dans la fonction lagrange. Je essentiellement copié votre fonction symboliclagrange ci-dessous, la découpe du paramètre numérique et l'affichage intermédiaire:

function symboliclagrange(X,Y) 
    x = poly(0,"x") 
    for i=1:length(Y) 
     l(i)=1 
     for j=1:length(Y) 
      if i~=j 
       l(i) = l(i)*(x-X(j))/(X(i)-X(j)) 
      end 
     end 
    end 
    L=0 
    for i=1:length(Y) 
     L = L+Y(i)*l(i) 
    end 
    disp(L) 
endfunction 

Avec votre entrée X = [0 1 5 8], Y = [0 1 8 16.4] la sortie est 0,85x + 0.15x , qui est le polynôme d'interpolation correct.

+0

Merci! Pourriez-vous juste changer l'utilisation de x dans 'l (i) =' à 'p'? La façon dont il est écrit donne 'Undefined variable: x' à la ligne 7. – 0rkan

+1

A droite, c'était une faute de frappe. Fixe –

+0

Après avoir créé ce polynôme symbolique, y a-t-il une méthode pour le résoudre avec un 'x' discret? par exemple: x = 7' – 0rkan