2014-09-09 1 views
1

우리가 20 점으로 자신의 좌표를 말할 평면에서 점의 일부 좌표를 부여한다고 가정찾기 배합

X = [0.0809627469389454; 
0.0812319917473947; 
0.0814760690888197; 
0.0816493550701358; 
0.0817167028412858; 
0.0816873091729635; 
0.0813456103002472; 
0.0805960479373602; 
0.0793506286325874; 
0.0768532682616457; 
0.0730568739618012; 
0.0688299169022524; 
0.0629775052745549; 
0.0555093488004414; 
0.0469410412695979; 
0.0385912069617207; 
0.0296789727506768; 
0.0200899022102430; 
0.00973217977333483; 
-0.00138286576734164] 

Y=[-0.737109973623757; 
-0.737164532535452; 
-0.737292603740519; 
-0.737517126138711; 
-0.737930464518794; 
-0.738537206858314; 
-0.740008741381755; 
-0.742712757707760; 
-0.745966011330839; 
-0.751634798125669; 
-0.759200611372096; 
-0.767277401090950; 
-0.777095158716249; 
-0.787200839430418; 
-0.797371590291212; 
-0.806336086919729; 
-0.816124045611269; 
-0.825660302601719; 
-0.835939409428708; 
-0.846471284598907] 

이 점

는 운동이다 좌표와 그것이 배합이 알려지지 않은 커브 상에있다. 주어진 좌표/데이터를 사용하여 어떻게 운동 공식을 찾을 수 있습니까? 운동의 1 차 및 2 차 미분 인 속도와 가속도를 계산하기 위해 공식을 필요로합니다. 미리 감사드립니다 !!

+0

@rayryeng : 정확한 데이터의 일부분을 편집했습니다. 나는 그것이 어떻게 든 명백하다라고 생각한다!! – Royeh

+0

@Royeh - 알았어, 좀 더 분명해 보인다. 나는 대답을 쓸 것이다. – rayryeng

+0

데이터를 [curve fitting app] (http://www.mathworks.in/help/curvefit/interactive-curve-and-surface-fitting-.html)로 가져 와서 어떤 종류의 함수가 데이터에 가장 잘 맞는지 그리고 그 후에 당신은 [fit 함수] (http://www.mathworks.in/help/curvefit/fit.html)를 가지고 놀 수 있습니다. – Divakar

답변

1

데이터를 플로팅하면 다항식이됩니다. 따라서 polyfit 기능을 사용하는 것이 좋습니다. 이 작업에는 좌표 세트 xy이 주어지면 데이터가 가장 잘 어울리는 다항식의 순서를 지정하고이 데이터에 가장 잘 맞는 다항식의 계수를 찾습니다. 이것은 최소 자승 오차 최소화에 의해 수행되지만, 그것을 읽도록 남겨 두겠습니다. 수학은 실제로 꽤 우아합니다.

데이터에서 변곡점이 약 x = 0.04이므로 3 차 다항식을 추측하겠습니다.

coeff = polyfit(X, Y, 3); %// Specify third order polynomial 

우리가 얻을 출력은 다음과 같습니다 : 방정식에 대한

coeff = 

    174.5793 -13.4016 1.2463 -0.8457 

계수는 아래로, 세 번째 전원부터 내림차순으로 구성되어 있습니다 따라서, 당신이해야 할 모든이입니다 절편 값. 따라서이 방정식은 실제로는 다음과 같습니다.

Y = 174.5793*X^3 - 13.4016*X^2 + 1.2463*X - 0.8457 

이 방정식이 맞는지 확인하려면 육안 검사를 수행 할 수 있습니다. 우리는 최소값과 최대 값 사이의 점을 지정하고 위의 함수를 평가하기 위해이 점들을 사용하여 그래프에서 어디에 위치하는지 확인합니다. 따라서 다음과 같이 할 수 있습니다.

xPoints = linspace(min(X), max(X)); %// Specify 100 points between the min and max 
yPredict = polyval(coeff, xPoints); %// Find the corresponding y-values 
plot(X,Y,'b.',xPoints,yPredict,'r'); %// Plot the original points with the predicted 
grid;        %// curve in red. 

위의 코드를 천천히 살펴 보겠습니다. linspace은 두 점 사이에 선형적인 벡터 간격을 만듭니다. 기본 포인트는 100이지만 원하는대로 변경할 수 있습니다. 따라서 첫 번째 줄은 X에서 최소 점과 최대 점 사이에 100 점을 생성합니다. 그런 다음 polyval은 사용자가 만든 다항식의 계수를 polyfit에서 가져오고 X 점의 집합을 사용하여 계산 된 예측 된 방정식을 기반으로 Y 점의 집합을 생성합니다. 이렇게하면 원본 데이터 요소와 예측 된 곡선이 모두 표시되는 플롯을 생성합니다. 나는 또한 좋은 척도를 그리드에 던진다.

enter image description here

는 물론, 당신은 당신의 데이터에 따라 다항식의 순서 조정을 수행해야합니다

내가 얻을 플롯이다. 이번에 우리는 행운 이었음을 명심하십시오. 실제로, 데이터는 이와 같이 자연스럽게 흐르지 않습니다. 따라서 데이터를 먼저 검토하고 데이터가 어떤 커브 클래스에 속하는지 파악해야합니다. 일단 이것을 결정하면 곡선의 각 클래스가 다른 전략을 따르므로 최적의 매개 변수 추정치를 찾을 수 있습니다.

1

원래 데이터의 커브 피트가 아닌 속도 및 가속도 값에 더 관심이 있다고 생각하지만, 실제 데이터로 작업하는 대신 수학 함수의 차별화로 속도와 가속도를 계산하는 것이 더 쉽다고 가정합니다. 세계 데이터?

내 추측이 정확하다면 추정치의 시작 부분에 너무 많은 가치있는 정보를 버리기 때문에 측정 된 데이터의 대략적인 근사값보다 나은 방법이 있음을 알려드립니다. 결과는 최종 속도와 가속 값의 큰 편차가됩니다.

단순히 측정 된 X- 및 Y- 변위의 이산 미분을 추정하고 샘플 오차를 줄이기 위해 평활화를 시도하십시오. X/Y 쌍이 일정한 시간 간격으로 샘플링된다고 가정하므로이 간격을 다음 여섯 개의 그림의 새 X로 사용합니다. 이를 실시간 값 (예 : 밀리 초)으로 대체해야합니다. 가

도 내가 선택한이 높은 다항식 주문으로, 곡선 적합 당신은 알 수

입니다 enter image description here 것을 :

subplot(4,1,1) 
plot(X,Y,'.-') 
xlabel('Measured displacement data of the hand movement') 

speedX = diff(X) 
speedY = diff(Y) 
speed = sqrt(speedX.^2 + speedY.^2); 

subplot(4,2,3) 
plot(speedX) 
ylabel('X') 
subplot(4,2,5) 
plot(speedY) 
ylabel('Y') 
subplot(4,2,7) 
plot(speed) 
ylabel('Combined X and Y') 
xlabel('Speed') 

accelerationX = diff(speedX) 
accelerationY = diff(speedY) 
acceleration = sqrt(accelerationX.^2 + accelerationY.^2); 

subplot(4,2,4) 
plot(accelerationX) 
subplot(4,2,6) 
plot(accelerationY) 
subplot(4,2,8) 
plot(acceleration) 
xlabel('Acceleration') 

% Simple solution to remove the outliers 
x1 = 1:length(speed); 
p1=polyfit(x1',speed,5) 
estSpeed=polyval(p1,x1) 
subplot(4,2,7) 
hold on 
plot(x1,estSpeed,'r') 
hold off 

x2 = 1:length(acceleration); 
p2=polyfit(x2',acceleration,4) 
estAcceleration=polyval(p2,x2) 
subplot(4,2,8) 
hold on 
plot(x2,estAcceleration,'r') 
hold off 

다음 그림은 결과 플롯을 보여줍니다 당신은 당신의 자신의 분석을위한 골격으로 사용할 수 있습니다 여전히 좋지는 않습니다. 낮은 주문은 속도 및 가속도 곡선의 흥미로운 추세를 방해합니다. 따라서 더 좋은 근사 방법을 찾는 것은 당신에게 달려 있습니다 ;-)

+0

답장을 보내 주셔서 감사합니다. 실은 커브 피트와 함께 속도와 가속도가 필요합니다. 코드가 움직임을 계산하기 때문입니다. – Royeh

+0

내 코드와 수치는 속도와 가속도 (빨간색 선)에 대한 간단한 곡선 맞춤을 제공합니다. 제가 지적한 문제는 다항식 차수 5와 4를 각각 사용 했더라도, 그들은 충분한 방법으로 현실을 나타내지 않는다는 것입니다. 이것은 운동을위한 순서 6을 제안 할 것입니다! 레이리 엥 (Rayryengs) 응답 에서처럼 3 번 주문은 너무 낮습니다. 제 생각에 다항식 근사법이 잘못된 개념이라는 것이 바로 알았을 것입니다. 적어도 X와 Y에 대한 두 개의 근사 함수에 대해 등거리 시간이 필요합니다. –