2012-12-17 5 views
0

F (x) = 1/(ax^2 + bx + c)의 형태로 인버스 포물선에 몇 가지 포인트를 맞추려고합니다.역 파라볼라 피팅. 최소 제곱 수식 분석 표현에 도달

내 목표는 10-30 점을 취하여 역 포물선에 맞출 수있는 함수를 C++로 프로그래밍하는 것입니다.

최소한의 사각형을 사용하여 분석 식을 얻으려고했지만 결과를 얻기 위해 도달 할 수 없습니다. 나는 손으로 (조금 미친) 시도한 다음 분석적으로 a, b 및 c의 표현식을 풀려고했지만 mupad는 결과를주지 못합니다 (Matlab의 mupad에 익숙하지 않은 것 같습니다) . 더 이상이 문제에 접근하는 방법을 모르겠습니다.

이 특정 문제에 대한 분석 식을 얻을 수 있습니까? 나는 또한 일반적인 최소 제곱 피팅을위한 알고리즘을 보았지만 복잡한 알고리즘은 필요하지 않습니다. 단지이 방정식에 필요합니다. 그렇지 않은 경우 StackOverflow 사용자가 문제에 어떻게 접근합니까?

필요한 경우 방정식과 시도한 작은 Mupad 코드를 게시 할 수 있지만 불필요하다고 생각합니다.

편집 : 몇 가지 예를

임 미안 이미지가 조금 지저분하지만 내가 필요로하는 일이다. 데이터가 파란색입니다 (이 데이터는 특히 시끄 럽습니다). 난 수직선 사이에있는 데이터 (왼쪽에있는 데이터와 오른쪽에있는 데이터) 만 사용해야합니다.

적합 결과는 붉은 색 선입니다.

이 모든 것들이 matlab으로 만들어졌지만, 나는 이것을 C++로 만들 필요가있다.

나는 몇 가지 데이터를 게시하려고합니다 ...

enter image description here

편집 2 :

create linear system Ax = b, with 
A = [x² x 1] 
x = [a; b; c] 
b = 1/y; 
:
는 사실 (안 실제 코드)를 다음과 같이 매트랩 피팅을했다

제대로 작동할까요? 나는 SVD로 계산 된 Moore-Penrose pseudoinv를 사용하여 풀 수있다. 그렇지 않니?

+0

그래서'(x, y)'가 3 쌍이라면'a','b'와'c'를 계산해야합니까? – Lol4t0

+0

주어진 n 쌍의 (x, y) 실제로! @ Lol4t0 –

+0

이것은 프로그래밍 문제가 아니며, 이것은 수학/통계 문제입니다. 즉, * 선형 * 최소 제곱만 분석 해법을 가지고 있다고합니다. 비선형 최소 자승법은 수치 접근법을 필요로합니다. –

답변

2

최소 제곱의 분석 솔루션은 없습니다; 그것은 최소화 문제이며, 해결할 수있는 영리한 반복 방법이 필요합니다. (비선형 LS - 감사합니다 @ insilico)

당신은 방정식을 재 배열하여 뉴턴 스타일의 반복적 인 방법을 시도 할 수 있습니다. 그러나 나는 당신의 함수에 대해 쉽게 수렴 할 것이라고 생각하지 않습니다. 두 점에서 매우 비선형이 될 것입니다 전철기!

라이브러리를 사용하는 것이 좋습니다.같은 nelder - 미드 검색

http://www.codecogs.com/code/maths/optimization/nelder.php

당신은 단순히 당신의 오류 기능 제공 -

sum(pow(F(x) - dataY(x), 2)) 

초기 값의 집합 (솔루션에서 어둠 속에서 자상)을 제공하는 것입니다; 나는 넬더 미드와 함께 성공적으로 성공했습니다.

좋은 평범한 해결책을 찾지 못할 것이라고 생각합니다.

+0

좋아, 잘 모르겠지만 실제로는 최소 제곱 법에 대한 비논리적 인 해법을 쉽게 얻을 수 있습니다. 이것은 summatory (반복)가있는 분석적 솔루션이지만 여전히 불합리한 해결책입니다. 나는 이미 최소한의 사각형을 그렇게 프로그래밍했다. –

+0

@AnderBiguri 당신은 맞습니다. 나는 '비선형 적'이라고 쓰는 것을 잊었습니다. [1, x, x^2]의 선형 조합이므로 일반 포물선의 경우 실제로 할 수 있습니다. –

+0

아,하지만 게시하는 넬더 기능은 상업용입니다. 무료 코드를 사용해야합니다. 나는 더 많이 검사하려고 노력할 것이다 –

1

정확하게 이해한다면 특정 데이터 세트에 적합한 공식을 알아야합니다. 맞습니까?

그렇다면 커브 피팅 프로그램을 얻고 원하는 방법으로 커브를 맞추기 만하면됩니다. 그런 다음 곡선 맞춤으로 표시된 수식을 구현하십시오.

거기서 몇 곡선에 맞게 프로그램이 있습니다

http://www.curveexpert.net/

* Eurequa *

http://creativemachines.cornell.edu/eureqa 또한

, 솜

곡선 전문가 스프레드 시트 패키지에는 필요한 커브 피팅 기능이있을 수 있습니다.

귀하가 데이터를 제공하면 귀하에게 적합하도록 노력해 드리겠습니다. 원하는 적합성을 보장받지 못합니다.

+0

감사합니다. 나는 당신에게 맞는 데이터를 줄 수는 있지만, 어떤 랜덤 잡음을 가진 종 모양의 곡선 (역 포물선 방정식으로 표현 될 수있는)이 될 것입니다. 이상한 건 없어요. –

+0

@AnderBiguri : 좋습니다. 위의 내용이 귀하의 필요에 맞지 않으면 알려주십시오.내 적합성은 어쨌든 CurveExpert에 플러그인하려고 시도하는 것이고, 데이터에 대해 신경 쓰는 경우 중급의 "마사지"가 필요하다는 것을 명심하십시오. – RonaldBarzell

+0

죄송합니다. 특정 세트에 대한 데이터가 필요 없으며 피팅 알고리즘이 필요합니다. 데이터는 테스트와 테스트와 크게 다르지 않지만 여전히 일반화가 필요합니다. –

관련 문제