2011-02-09 4 views
0

주어진 순서쌍에 대해 다항식 보간을 생성하는 함수를 작성하고 있습니다. 현재 하나의 벡터에 노드 점의 인덱스를 입력하고 두 번째 벡터에 보간 할 함수의 값을 입력합니다. 그런 다음 그 점 집합을 보간하는 Lagrange 다항식에 대한 기호식을 생성합니다. 이 상징적 인 형식에서 벡터 형식으로 이동하여 테스트 기능 등과 비교할 수 있기를 바랍니다. 즉, 나는 어떤 다항식 P (x)를 기호 변수 x로 생성하는 것을 가지고있다. 이 다항식을 벡터로 샘플링하고, 다항식의 값 (예 : linspace (-1,1,1000))을 얻고 싶습니다. 가능하다면 어떻게 할 수 있습니까?MATLAB에서 기호 식에서 벡터로 이동하는 방법

function l_poly = lpoly(x,f) 
% Returns the polynomial interpolant as computed by lagrange's formula 
syms a 
n=size(x,2); 
l_poly_vec = 1; 
l_poly=0; 
for k=1:n, 
    for l=1:n, 
     if (k ~= l) 
      l_poly_vec=l_poly_vec*(a-x(l))/(x(k)-x(l)); 
     end 
    end 
    l_poly=l_poly+f(k)*l_poly_vec; 
    l_poly_vec = 1; 
end 

나는이 문제를 해결할 수있는 방법에 따라 세 번째 (또는 아마도 네 번째) 입력을 추가 할 계획 :

나는 내가 지금까지 가지고있는 코드를 포함하는 것 같아요. 샘플링 할 벡터의 길이와 끝점이 필요할 것이라고 추측합니다.

답변

1

정확하게 이해한다면 심볼릭 도구 상자를 사용하여 라그랑주 보간 다항식을 구성했으며 이제는 값 벡터를 통해이를 평가하려고합니다. 이 작업을 수행하는 한 가지 방법은 기호 다항식의 계수를 추출하는 데 sym2poly 함수를 사용하고 polyval을 사용하여 계산하는 것입니다. 또는 matlabFunction을 사용하여 기호식을 정규 Matlab 함수로 변환 할 수 있습니다. 또는 subs을 사용하여 'x'의 숫자 값을 대체하십시오.

그러나 상징적 인 도구 상자를 피하고 Lagrange 보간 다항식의 계수를 직접 구성하는 것이 더 나을 것입니다. 더 좋지만 다른 보간 체계를 모두 사용하는 것이 좋습니다. interp1 기능을 시작하는 것이 좋습니다.