2013-09-24 1 views
0

데이터 집합이 있고 MATLAB의 곡선 맞춤 도구 상자를 사용하여 데이터의 스플라인 그래프를 플롯합니다. 내가이 짓을 : 만약 내가 잘못스플라인의 조각 방정식

x = 

    Columns 1 through 10 

    0 1.2500 1.8800 2.5000 5.0000 6.2500 6.8800 7.1900 7.5000 10.0000 

    Columns 11 through 13 

    12.5000 15.0000 20.0000 
y = 

    Columns 1 through 10 

     -85.9300 -78.8200 -56.9500 -34.5600 -33.5700 -39.6400 -41.9600 -49.2800 -66.6000 -66.6100 

     Columns 11 through 13 

     -59.1600 -48.7800 -41.5300 
    cftool 
[breaks,coefs,l,k,d] = unmkpp(pp) 

breaks = 

    Columns 1 through 10 

     0 1.2500 1.8800 2.5000 5.0000 6.2500 6.8800 7.1900 7.5000 10.0000 

    Columns 11 through 13 

    12.5000 15.0000 20.0000 


coefs = 

    -4.8535 30.6309 -25.0170 -85.9300 
    -4.8535 12.4304 28.8095 -78.8200 
    -11.9651 3.2573 38.6927 -56.9500 
    3.0330 -18.9977 28.9337 -34.5600 
    -0.2294 3.7501 -9.1852 -33.5700 
    -11.6351 2.8899 -0.8852 -39.6400 
    -68.6157 -19.1004 -11.0978 -41.9600 
    130.6350 -82.9130 -42.7220 -49.2800 
    -6.3971 38.5776 -56.4659 -66.6000 
    1.6010 -9.4008 16.4760 -66.6100 
    -0.2967 2.6064 -0.5099 -59.1600 
    -0.2967 0.3814 6.9597 -48.7800 


l = 

    12 


k = 

    4 


d = 

    1 

나 정정 명령 [breaks,coefs,l,k,d] = unmkpp(pp) 날 내가 얻은 스플라인 그래프에서 구분 방정식을 얻을 수 있도록 할 수있다? 그렇다면 어떻게하면 명령을 이해할 수 있는지 알 수 있습니까? 그래서 내 자신의 장점과 coefs, k, d의 값의 중요성에 사용할 수 있습니다. 감사! 기본적으로 커브 피트 툴 박스를 통해 얻은 스플라인 그래프를 설명하는 방정식/방정식을 얻을 수 있기를 원합니다. 어떤 도움이라도 대단히 감사하겠습니다!

+0

예를 들어, 일반적으로 http://www.mathworks.co.uk/help/matlab/ref/unmkpp.html – am304

+1

를 참조하십시오 :'도움말 unmkpp' 또는'doc unmkpp'. 당신은 물론 Google을 사용할 수 있지만, 이것이 문서가 귀하의 Matlab 버전과 일치 함을 보증합니다. –

+0

@ am304 고맙습니다. 저 페이지는 매우 어려웠습니다/추상적이었습니다. –

답변

3

이렇게하면 Matlab에서 생성 된 스플라인을 선택하고 표시하는 방법을 설명합니다.

생성 모의 데이터
xx = [1:10]; 
yy = cos(xx); 

는 X

xxf = linspace(min(xx),max(xx),100); 
yyf=ppval(pp,xxf); 

시작에 미세한 격자에 그것을 평가, 구분 적 다항식 입방 스플라인

pp = spline(xx,yy); 

보간으로 데이터를 장착 pp을 검사하여 p에 대한 모든 정보를 포함합니다. iecewise 다항식 :

pp = 

    form: 'pp' 
breaks: [1 2 3 4 5 6 7 8 9 10] 
    coefs: [9x4 double] 
pieces: 9 
    order: 4 
    dim: 1 

[breaks,coefs,l,k,d] = unmkpp(pp) 

단지 구조 pp의 내용 언랩 기능,되도록 : pp이 경우는 필요하지 않다 따라서

d = pp.dim; 
l = pp.pieces; 
breaks = pp.breaks; 
coefs = pp.coefs; 
k = pp.order; 

unmkpp를 불러 구조체는 위의 정보와 같이 모든 정보를 포함하고 계수와 나누기 만하면됩니다. 대신에

breaks = pp.breaks; 
coefs = pp.coefs; 

을 입력하고 아래에 표시된대로이 정보로 계속 작업 할 수 있습니다. 다항식의 형태를 갖기 때문에 큐빅 스플라인, 다항식의 차수가 4인지

참고

C (1) * X^(K-1) + C (2) * X^(K-2) + ... + C (K-1) * X + C (K)

K = 4

, 따라서 각 다항식 4 계수 C. 최상위 기간을 갖는다 X^3은 큐빅 인 스플라인과 일치합니다.

평가하기 위해 구분 다항식 :

(1) breaks로 정의하면 에게 다항식을 평가하려는 통해 조각을 선택

(2)에 저장된 조각에 대한 정확한 계수를 선택 coefs.이러한 구분 다항식이므로

, 우리는 0-1 범위에 걸쳐 그들을 평가하고 스트레칭 및시프트 그 실제 값 (X)의 방법. 0-1 범위를 사용하여 표준 함수 polyval을 사용하여 선택한 피스의 다항식 계수를 평가하여 관심 범위에 대해 알려진 계수가있는 다항식을 계산합니다.

그래서 우리는 계수 cf이 부분에 해당하는 포인트 xev에서 다항식을 평가 찾을 :
xev = linspace(0,1,100); 
cf = pp.coefs(1,:); 
yyp=polyval(cf,xev); 

우리는 음모를 꾸미고에 대한 몇 가지 추가 정보를 보관 :

br = pp.breaks(1:2); % find the breaks (beginning and end of stretch of interest) 
xxp = linspace(br(1),br(2),100); 

우리는이 절차를 일반화 할 수 있습니다. 물론

n = 6; 

cf = pp.coefs(n,:); 
yyp2=polyval(cf,xev); 

br = pp.breaks(n:n+1); 
xxp2 = linspace(br(1),br(2),100); 

이 위를 건너 뛸 수 있습니다 그냥있는이 을 할 것입니다 ppval (함수의 spline 가족과 함께 작업 할 전용 기능 )를 사용 : 따라서 n 번째 부분에 대한 (# 6 말) 당신을 위해 동일, 3 조각 말할 :

br = pp.breaks(3:4); % limits of the piece 
xxp3 = linspace(br(1),br(2),100); 
yyp3=ppval(pp,xxp3); 

마지막으로 우리 plot

plot(xx,yy,'.') 
hold on 
plot(xxf,ppval(pp,xxf),'k:') 
plot(xxp,yyp,'g-','linewidth',2) 
plot(xxp2,yyp2,'r-','linewidth',2) % <-- generated with polyval 
plot(xxp3,yyp3,'c-','linewidth',2) % <-- generated with ppval 
axis tight 
이상으로 평가 된 다항식의 모든 당신이 도움이나 문서를 사용해보십시오 명령에 대해 배우고 싶은 경우 691,363,210

enter image description here

+0

감사합니다 열심히 노력하고 있습니다. 나는 여전히 matlab에 초보자입니다 this.cause을 소화하려고합니다. 어쨌든 입체 스플라인과 곡선 맞춤 도구 상자의 스플라인 스무딩 옵션간에 차이가 있는지 물어볼 수 있습니까? –

+0

@BenjaminAlonsoTan 평활화 스플라인은 조각 별 다항식이 기본 신호를 모델링하는 정확한 방법이라는 가정하에 노이즈를 "줄이려면"사용됩니다. 이는 일반적으로 데이터를 모델링하기 위해 스플라인을 사용하는 것과 같지 않습니다 (보간 목적). 내 답변은 그 두 가지 다른 응용 프로그램이며 결과가 반드시 동일하지 않을 것입니다 –