Этот пример показывает, как работать с подгонкой кривой.
load census curvefit = fit(cdate,pop,'poly3','normalize','on')
curvefit = Linear model Poly3: curvefit(x) = p1*x^3 + p2*x^2 + p3*x + p4 where x is normalized by mean 1890 and std 62.05 Coefficients (with 95% confidence bounds): p1 = 0.921 (-0.9743, 2.816) p2 = 25.18 (23.57, 26.79) p3 = 73.86 (70.33, 77.39) p4 = 61.74 (59.69, 63.8)
Вывод отображает уравнение подобранной модели, подходящие коэффициенты и доверительные границы для подходящих коэффициентов.
plot(curvefit,cdate,pop)
Постройте подгонку невязок.
plot(curvefit,cdate,pop,'Residuals')
Постройте границы прогноза на подгонке.
plot(curvefit,cdate,pop,'predfunc')
Оцените подгонку в отдельном моменте путем определения значения для x
, использования этой формы: y = fittedmodel(x)
.
curvefit(1991)
ans = 252.6690
Оцените модель в векторе значений, чтобы экстраполировать к году 2050.
xi = (2000:10:2050).'; curvefit(xi)
ans = 6×1
276.9632
305.4420
335.5066
367.1802
400.4859
435.4468
Получите границы прогноза на тех значениях.
ci = predint(curvefit,xi)
ci = 6×2
267.8589 286.0674
294.3070 316.5770
321.5924 349.4208
349.7275 384.6329
378.7255 422.2462
408.5919 462.3017
Постройте подгонку и интервалы прогноза через экстраполируемую подходящую область значений. По умолчанию подгонка построена в области значений данных. Чтобы видеть значения, экстраполируемые от подгонки, установите верхний x-предел осей к 2 050 прежде, чем построить подгонку. Чтобы построить интервалы прогноза, используйте predobs
или predfun
как тип графика.
plot(cdate,pop,'o') xlim([1900,2050]) hold on plot(curvefit,'predobs') hold off
Введите подходящее имя, чтобы отобразить образцовое уравнение, подходящие коэффициенты и доверительные границы для подходящих коэффициентов.
curvefit
curvefit = Linear model Poly3: curvefit(x) = p1*x^3 + p2*x^2 + p3*x + p4 where x is normalized by mean 1890 and std 62.05 Coefficients (with 95% confidence bounds): p1 = 0.921 (-0.9743, 2.816) p2 = 25.18 (23.57, 26.79) p3 = 73.86 (70.33, 77.39) p4 = 61.74 (59.69, 63.8)
Чтобы получить только образцовое уравнение, используйте formula
.
formula(curvefit)
ans = 'p1*x^3 + p2*x^2 + p3*x + p4'
Задайте коэффициент по наименованию.
p1 = curvefit.p1
p1 = 0.9210
p2 = curvefit.p2
p2 = 25.1834
Получите все содействующие имена. Посмотрите на подходящее уравнение (например, f(x) = p1*x^3+...
), чтобы видеть образцовые условия для каждого коэффициента.
coeffnames(curvefit)
ans = 4x1 cell array
{'p1'}
{'p2'}
{'p3'}
{'p4'}
Получите все содействующие значения.
coeffvalues(curvefit)
ans = 1×4
0.9210 25.1834 73.8598 61.7444
Используйте доверительные границы на коэффициентах, чтобы помочь вам оценить и сравнить подгонки. Доверительные границы на коэффициентах определяют свою точность. Границы, которые являются далеко друг от друга, указывают на неуверенность. Если перекрестный нуль границ для линейных коэффициентов, это означает, что вы не можете быть уверены, что эти коэффициенты отличаются от нуля. Если некоторые образцовые условия имеют коэффициенты нуля, то они не помогают с подгонкой.
confint(curvefit)
ans = 2×4
-0.9743 23.5736 70.3308 59.6907
2.8163 26.7931 77.3888 63.7981
Чтобы получить статистику качества подгонки в командной строке, вы можете также:
Открытое приложение Curve Fitting и выбирает Fit> Save to Workspace, чтобы экспортировать вашу подгонку и качество подгонки к рабочей области.
Задайте выходной аргумент gof
с помощью функции fit
.
Воссоздайте подгонку, задающую gof
и выходные аргументы, чтобы получить статистику качества подгонки и информацию об алгоритме подбора.
[curvefit,gof,output] = fit(cdate,pop,'poly3','normalize','on')
curvefit = Linear model Poly3: curvefit(x) = p1*x^3 + p2*x^2 + p3*x + p4 where x is normalized by mean 1890 and std 62.05 Coefficients (with 95% confidence bounds): p1 = 0.921 (-0.9743, 2.816) p2 = 25.18 (23.57, 26.79) p3 = 73.86 (70.33, 77.39) p4 = 61.74 (59.69, 63.8)
gof = struct with fields:
sse: 149.7687
rsquare: 0.9988
dfe: 17
adjrsquare: 0.9986
rmse: 2.9682
output = struct with fields:
numobs: 21
numparam: 4
residuals: [21x1 double]
Jacobian: [21x4 double]
exitflag: 1
algorithm: 'QR factorization and solve'
iterations: 1
Постройте гистограмму невязок, чтобы искать примерно нормальное распределение.
histogram(output.residuals,10)
plot(curvefit,cdate,pop,'fit','residuals') legend Location SouthWest subplot(2,1,1) legend Location NorthWest
Перечислите каждый метод, который можно использовать с подгонкой.
methods(curvefit)
Methods for class cfit: argnames confint formula numcoeffs setoptions category dependnames indepnames plot type cfit differentiate integrate predint coeffnames feval islinear probnames coeffvalues fitoptions numargs probvalues
Используйте команду help
, чтобы узнать, как использовать подходящий метод.
help cfit/differentiate
DIFFERENTIATE Differentiate a fit result object. DERIV1 = DIFFERENTIATE(FITOBJ,X) differentiates the model FITOBJ at the points specified by X and returns the result in DERIV1. FITOBJ is a Fit object generated by the FIT or CFIT function. X is a vector. DERIV1 is a vector with the same size as X. Mathematically speaking, DERIV1 = D(FITOBJ)/D(X). [DERIV1,DERIV2] = DIFFERENTIATE(FITOBJ, X) computes the first and second derivatives, DERIV1 and DERIV2 respectively, of the model FITOBJ. See also CFIT/INTEGRATE, FIT, CFIT.