q=c(18, 15, 24, 23, 18, 22, 19, 29,22,25,20,19,18,20,26,32,26,26,34,29,23,34,22,19
,21,19,34,23,23,23,30,21,15,29,32,19,21,28,22,32,29,25,28,28,23,12,26,24
,27,14,38,27,28,25,38,34,25,37,15,28,15,23,23,28,15,15,19,25,28,16,19,17
,23,19,16,18,18,17,20,18,21,13,11,12,13,16,13,16,10,13,14,6,19,18,19,15
,17,6,14,28,15,20,16,12)
m=length(q);t=1:m
B=c(q[1]);i=1;j=length(q)
er=rep(0,length(q))
dis
=function(tt
){a
=(q
[j
]-q
[i
])/(j
-i
);b
=(q
[i
]*j
-q
[j
]*i
)/(j
-i
);abs(a
*tt
-q
[tt
]+b
)/sqrt(a
^2+1)}for(k in 1:length(q)){er[k]=dis(k)};ser=sd(er)
while(l<j)
{
j=length(q);error=ser
dis=function(tt)
{
a=(q[j]-q[i])/(j-i)
b=(q[i]*j-q[j]*i)/(j-i)
}
stop=dis(l)
if(stop<=error){l=l+1}else
{
dis2
=function(tt2
){a2
=(q
[j2
]-q
[i2
])/(j2
-i2
);b2
=(q
[i2
]*j2
-q
[j2
]*i2
)/(j2
-i2
); abs(a2
*tt2
-q
[tt2
]+b2
)/sqrt(a2
^2+1)} while(l2
<j2
){stop2
=dis2
(l2
);if(stop2
<=ser
){l2
=l2
+1}else{B
=c
(B
,q
[l2
]);time=c
(time,l2
);i2
=l2
;l2
=l2
+1}} }
}
plot(y=q,x=t,xlim=c(1,(m-1)),ylim=c(min(q),max(q)),type="o")
par(new=T)
plot
(y
=B
,x
=time,xlim
=c
(1,(m
-1)),ylim
=c
(min
(q
),max
(q
)),type
="l",col
=2)
cT1jKDE4LCAxNSwgMjQsIDIzLCAxOCwgMjIsIDE5LCAyOSwyMiwyNSwyMCwxOSwxOCwyMCwyNiwzMiwyNiwyNiwzNCwyOSwyMywzNCwyMiwxOQosMjEsMTksMzQsMjMsMjMsMjMsMzAsMjEsMTUsMjksMzIsMTksMjEsMjgsMjIsMzIsMjksMjUsMjgsMjgsMjMsMTIsMjYsMjQKLDI3LDE0LDM4LDI3LDI4LDI1LDM4LDM0LDI1LDM3LDE1LDI4LDE1LDIzLDIzLDI4LDE1LDE1LDE5LDI1LDI4LDE2LDE5LDE3CiwyMywxOSwxNiwxOCwxOCwxNywyMCwxOCwyMSwxMywxMSwxMiwxMywxNiwxMywxNiwxMCwxMywxNCw2LDE5LDE4LDE5LDE1CiwxNyw2LDE0LDI4LDE1LDIwLDE2LDEyKQoKbT1sZW5ndGgocSk7dD0xOm0KQj1jKHFbMV0pO2k9MTtqPWxlbmd0aChxKQplcj1yZXAoMCxsZW5ndGgocSkpCmRpcz1mdW5jdGlvbih0dCl7YT0ocVtqXS1xW2ldKS8oai1pKTtiPShxW2ldKmotcVtqXSppKS8oai1pKTthYnMoYSp0dC1xW3R0XStiKS9zcXJ0KGFeMisxKX0KZm9yKGsgaW4gMTpsZW5ndGgocSkpe2VyW2tdPWRpcyhrKX07c2VyPXNkKGVyKQoKdGltZT1jKDEpCndoaWxlKGw8aikKewogaj1sZW5ndGgocSk7ZXJyb3I9c2VyCiAgZGlzPWZ1bmN0aW9uKHR0KQogICB7CiAgICAgYT0ocVtqXS1xW2ldKS8oai1pKQogICAgIGI9KHFbaV0qai1xW2pdKmkpLyhqLWkpCiAgICAgYWJzKGEqdHQtcVt0dF0rYikvc3FydChhXjIrMSkKICAgfQpzdG9wPWRpcyhsKQppZihzdG9wPD1lcnJvcil7bD1sKzF9ZWxzZQogewogIGkyPWwyPXRpbWVbbGVuZ3RoKHRpbWUpXTtqMj1sCiAgZGlzMj1mdW5jdGlvbih0dDIpe2EyPShxW2oyXS1xW2kyXSkvKGoyLWkyKTtiMj0ocVtpMl0qajItcVtqMl0qaTIpLyhqMi1pMik7IGFicyhhMip0dDItcVt0dDJdK2IyKS9zcXJ0KGEyXjIrMSl9CiAgd2hpbGUobDI8ajIpe3N0b3AyPWRpczIobDIpO2lmKHN0b3AyPD1zZXIpe2wyPWwyKzF9ZWxzZXtCPWMoQixxW2wyXSk7dGltZT1jKHRpbWUsbDIpO2kyPWwyO2wyPWwyKzF9fQogIEI9YyhCLHFbbF0pO3RpbWU9Yyh0aW1lLGwpO2k9bDtsPWwrMQogfQp9CgpCPWMoQixxW2pdKTt0aW1lPWModGltZSxqKQoKcGxvdCh5PXEseD10LHhsaW09YygxLChtLTEpKSx5bGltPWMobWluKHEpLG1heChxKSksdHlwZT0ibyIpCnBhcihuZXc9VCkKcGxvdCh5PUIseD10aW1lLHhsaW09YygxLChtLTEpKSx5bGltPWMobWluKHEpLG1heChxKSksdHlwZT0ibCIsY29sPTIpCg==