점근 적 기울기를 찾는 수치 알고리즘이 있습니까?


23

(xi,yi)y(x)xf(x)y(x)(ax+b)xf(x)f(x)f (x) 의 기능적 형태 f(x)가 기본 기능으로 설명 될 수있는 경우조차도 모르겠습니다 .

내 목표는 점근 적 경사 a 의 가능한 최상의 추정치를 얻는 것입니다 a. 명백한 조잡한 방법은 마지막 몇 가지 데이터 포인트를 선택하고 선형 회귀를 수행하는 것입니다. 물론 f(x) 가 데이터가있는 x 범위 내에서 "평평하게"평화되지 않으면 부정확합니다 x. 명백한 덜 조잡한 방법은 f(x)exp(x) (또는 다른 특정 기능 형태)를 모든 데이터를 사용하여 적합하다고 가정하지만 \ exp 와 같이 시도한 간단한 함수 (-x)exp(x) 또는 1x 가 하위 x 의 데이터와 일치하지 않습니다. x여기서 f(x)크다. 데이터가 점근선에 어떻게 접근하는지에 대한 지식이 부족할 때 더 잘 수행되거나 신뢰 구간과 함께 기울기에 대한 값을 제공 할 수있는 점근선 기울기를 결정하는 알려진 알고리즘이 있습니까?


이러한 종류의 작업은 다양한 데이터 세트 작업에서 자주 발생하는 경향이 있으므로 대부분 일반적인 솔루션에 관심이 있지만 요청에 따라이 질문을 유발 한 특정 데이터 세트에 연결하고 있습니다. 주석에서 설명했듯이 Wynn ϵ 알고리즘은 내가 알 수있는 한 다소 벗어난 값을 제공합니다. 플롯은 다음과 같습니다.

점근 선형 데이터

(높은 x 값에서 약간의 하향 곡선이있는 것처럼 보이지만이 데이터에 대한 이론적 모델은 그것이 비대칭 선형이어야 함을 예측합니다.)


이 사이트에는 너무 초보적이거나 모호 할 수 있지만 비공개 베타는 그런 것들을 시도 할 때라고 생각했습니다.
David Z

아니요, 이것이 좋은 질문이라고 생각합니다. 모든 것이 발전되고 화려해야하는 것은 아닙니다. 간단한 문제에 대한 좋은 해결책이 중요합니다.
Colin K

@ Dan : 정말로 정당화하고 있었습니까? exp
JM

exps를 갖는 것은 일을 읽기 어렵게 만드는 경향이 있지만, 그렇게하지 말아야 할 정도로 작다는 것을 인정할 것입니다.
Dan

나는 정말로 어느 쪽이든 신경 쓰지 않고 단지 편집을 승인하는 것이 좋을 것이라고 생각했습니다. 당신은 그 가치에 관계없이 명성을 얻습니다.
David Z

답변:


13

다소 거친 알고리즘이지만 원유 추정에 다음 절차를 사용합니다. 만약 당신이 말했듯이, 를 나타내는 된 가 증가함에 따라 이미 거의 선형 d 다음 Shanks 변환 과 같은 외삽 알고리즘을 사용 하여 차이의 한계를 추정하는 것입니다. 결과는이 점근선 경사의 좋은 추정치입니다.( x i , y i ) x y i + 1y if(x)(xi,yi)xyi+1yixi+1xi


다음은 Mathematica 데모입니다. Wynn 알고리즘은 Shanks 변환을 편리하게 구현하며 (숨김) 함수로 내장되어 있습니다 . 우리는 기능에 대한 절차를 시도합니다ϵSequenceLimit[]

4x2+3+2x+e4x+3
xdata = RandomReal[{20, 40}, 25];
ydata = Table[(3 + 13*E^(4*x) + 6*E^(4*x)*x + x^2 + 3*E^(4*x)*x^2 + 
      2*E^(4*x)*x^3)/(E^(4*x)*(3 + x^2)), {x, xdata}];

SequenceLimit[Differences[ydata]/Differences[xdata],
              Method -> {"WynnEpsilon", Degree -> 2}]
1.999998

알고리즘이 얼마나 간단한 지 보여줄 수도 있습니다.

wynnEpsilon[seq_?VectorQ] := 
 Module[{n = Length[seq], ep, res, v, w}, res = {};
  Do[ep[k] = seq[[k]];
   w = 0;
   Do[v = w; w = ep[j];
    ep[j] = 
     v + (If[Abs[ep[j + 1] - w] > 10^-(Precision[w]), ep[j + 1] - w, 
         10^-(Precision[w])])^-1;, {j, k - 1, 1, -1}];
   res = {res, ep[If[OddQ[k], 1, 2]]};, {k, n}];
  Flatten[res]]

Last[wynnEpsilon[Differences[ydata]/Differences[xdata]]]
1.99966

이 구현은 Weniger의 논문 에서 수정되었습니다 .


궁금한 점이 있지만 왜 모든 용어를 결합하는 대신 원래 형태의 함수를 사용 했습니까?
rcollyer

데모 목적으로 만 사용되었습니다. :) 나는 -ed 표현을 포함하여 예상 답변이 무엇인지 알았습니다. 내가 보여주고 싶었던 것은 당신이 복잡한 모양의 함수에 대해 이런 종류의 분석을 할 수 있다는 것입니다.LATEX
JM

알고리즘이 효과적이기 위해서는 포인트가 얼마나 평평해야합니까?
rcollyer

2
자, 마지막 질문 (맹세합니다), 추정치에 오차 한계를 생성 할 수 있습니까?
rcollyer

1
조금 까다 롭습니다. 몇 가지 논문에서 제안 된 방법을 보았지만 실험을하지 않은 것으로 고백합니다. (어쩌면 내가해야, 이러한 일 중 하나.) Brezinski 및 Redivo - Zaglia에 의해이 책은 당신이 보길 원하는 수있는 몇 가지 포인터가 있습니다.
JM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.