y = f(x)
형식으로 함수를 작성한 다음 fitnlm
을 사용하여 비선형 모델의 매개 변수를 추정 할 수 있습니다.
fh = @(x,a,b)b*sin(acos(x*sqrt(1 - (a/b)^2))) - a % Define y = f(x)
x = [-1:0.01:1]; % Generate some x values
yval = fh(x,1,2); % Calculate y values for the x
yval_ = yval + 0.1*rand(1,201); % Add artifical noise
nonLinMdl = fitnlm(x,yval_,@(p,x)fh(x,p(1),p(2)),[1.5, 2.5])
nonLinMdl =
Nonlinear regression model:
y ~ y(x,p1,p2)
Estimated Coefficients:
Estimate SE tStat pValue
________ ________ ______ __________
p1 0.71909 0.053201 13.516 5.8209e-30
p2 1.7668 0.055472 31.849 4.6625e-80
Number of observations: 201, Error degrees of freedom: 199
Root Mean Squared Error: 0.032
R-Squared: 0.988, Adjusted R-Squared 0.988
F-statistic vs. zero model: 6.36e+04, p-value = 5.87e-280
계산 된 매개 변수가 (1,2)
과 다른 점에 유의하십시오. 이것은 함수 모양이 다른 매개 변수 세트에 대해 동일하다는 사실을 가지고 뭔가를해야 할 수도 있습니다. 다른 출발점을 시도해 볼 수도 있습니다.
ycalc = fh(x,nonLinMdl.Coefficients.Estimate('p1'),nonLinMdl.Coefficients.Estimate('p2'))
plot(x,yval_,x,ycalc)
내가 제한된 환경에서 오전하지만 난 두 시리즈를 플로팅 모델 계산 된 값이 입력 데이터에 아주 가까이 이었기 때문에 내가 파일을 업로드 할 수 없습니다.
함수를'y = @ (x, a, b) b * sin (acos (x * sqrt (1 - (a/b)^2)) - a'로 쓸 수 없습니까? 그리고이 형식으로 작성 될 수 있으므로 fitnlm을 사용하여 적합성을 얻을 수 있습니까? –
@SomeGuy 흠, 그럴 수도 있겠지만, trig-functions의 주요 가치 - 난장음에서 비롯된 이상한 일들이 일어날 까봐 두렵습니다. 또한't '의 간격에 대한 정보는 이 방법은 ..하지만 제안을 주셔서 감사합니다 (실제로 작동하는지 확인하면 해당 구현을 답변으로 받아 들일 수있게되어 기쁩니다)! –
@SomeGuy 나는 그것이 작동한다고 생각합니다 ... 표현은'y = b * sqrt (1-x^2 * (1- (a/b)^2)) - a'로 감소합니다. 다시 한번 감사드립니다. 그러나 파라 메트릭 피팅이 가능한지 여부에 대한 질문은 여전히 흥미 롭기 때문에 지금 당장 공개 할 것입니다. –