2010-02-02 3 views
7

scipy의 interpolate.splprep 함수를 사용하면 파라미터 u에 파라 메트릭 스플라인을 얻지 만 u의 도메인은 스플라인의 정수가 아니며 입력 좌표의 조각 별 선형 연결입니다. integrate.splint을 시도했지만 u 이상의 개별 집계 만 제공합니다. 분명히, 나는 데카르트 차분 거리를 수치 적으로 통합 할 수 있지만, 내가 바라 보았던 스플라인 또는 스플라인 세그먼트 (scipy 또는 numpy 사용)의 길이를 얻는 닫힌 양식 방법이 있는지 궁금해하고있었습니다.큐빅 B- 스플라인의 길이 찾기

편집 : 폐쇄 형 솔루션 또는 기계 정밀도 응답으로 수렴하는 매우 빠른 방법을 찾고 있습니다. 나는 모든 것을 뿌리 찾기 방법에 포기했지만 현재는 닫힌 형태의 답 뒤에 주로있다. 누구든지 타원형 기능을 통합 한 경험이 있거나 (Wolfram 이외의) 훌륭한 리소스를 가르쳐 줄 수 있다면 좋을 것입니다. 내가 MathOverflow

답변

6

에이 - 게시 교차 X & y를 모두 입방 때문에 : 내가 스플라인의 한 세그먼트에 대한 기능입니다 무엇을 믿는의 부정적분을 얻으려고하는 맥시마를 시도거야

매개 변수식 함수를 사용하는 경우 간단한 함수로 닫힌 솔루션이 없습니다. 수치 적 통합은 갈 길이 멀다. 호 길이 표현식을 통합하거나 단순히 선분 길이를 추가하는 것은 수행중인 정확도와 수행하려는 노력 정도에 따라 다릅니다.

에 "선분의 길이를 추가"정확하고 빠른 방법 포인트를 생성 할 수 recurvise 세분 (드 Casteljeau의 알고리즘의 한 형태)를 사용

, 당신에게 포인트의 최소 수있는 매우 정확한 표현을 제공 할 수 있습니다 . 기준을 충족시키지 못하는 경우에만 하위 구분을 세분합니다. 일반적으로 기준은 제어점 (선체 또는 감금소)을 연결하는 길이를 기준으로합니다. 큐빅의 경우 일반적으로 P0P1 + P1P2 + P2P3과 P0P3의 근접성을 비교합니다. 여기서 P0, P1, P2 & P3은 베 지어를 정의하는 제어점입니다. 파이썬으로 변환하기가 비교적 용이해야한다 link text

:

당신은 여기에 몇 가지 델파이 코드를 찾을 수 있습니다. 포인트를 생성합니다. 코드는 이미 기준을 테스트하기 위해 세그먼트의 길이를 계산합니다. 길을 따라 길이 값을 간단히 누적 할 수 있습니다.

+0

이 솔루션은 근사치에 유용하지만 내 질문에 정확한 또는 기계 정밀도 답변을 제시해야합니다. 그것은 EOL의 romberg 솔루션과 비슷하지만 순수 파이썬으로 반복해야합니다. – Paul

+0

일반적인 분석 솔루션에는 타원 적분이 포함되므로 어떤 방식 으로든 접근 할 때 수치 적으로 통합됩니다. 앞서 설명한 방법은 호 길이 표현식을 직접 통합하지 않지만 수치 통합도 마찬가지입니다. 중요한 것은이 방법이 원하는 시간에 원하는 정확도로 수렴된다는 것입니다. – symmetry

+0

이 여기 봐 ... 난 당신이 길을 따라 축적 것이라고 언급 된 그 길이에 대해 좀 더 정확하게하려면 : 를 http://steve.hollasch.net/cgindex/curves/cbezarclen.html 선체 길이 (L1)와 코드 길이 (L0)의 평균을 사용하여 개별 서브 세그먼트의 호 길이를 근사화하십시오. – symmetry

4

당신은 당신이 파생 상품 x'scipy.interpolate.splev와 좌표의 y'를 계산 u, 이상 기능 sqrt(x'(u)**2+y'(u)**2)를 통합 할 수 있습니다. 통합은 scipy.integrate (quad은 정확합니다. [Clenshaw-Curtis], romberg은 일반적으로 더 빠름) 루틴 중 하나를 사용하여 수행 할 수 있습니다. 이것은 더 정확해야하며, 작은 거리를 많이 더하는 것보다 빠릅니다 (직사각형 규칙과 통합하는 것과 같습니다).

+0

원하는 정확도를 설정할 수 있으므로이 솔루션이 마음에 들지만 불행히도 기계 정밀도 정확도를 따릅니다. 귀하의 제안을 이행했지만 QUADPACK (최대한 훌륭함)이 제 성능 요구 사항을 충족시키지 못합니다. 현재 폐쇄 형 솔루션을 찾고 있으며 MathOverflow에 교차 게시했습니다. BTW : Clenshaw-Curtis는 다항식의 경우 정확하고 정밀합니다. 이 스플라인의 길이는 타원형 함수입니다. – Paul