Этот пример показов, как работать с кривой подгонкой.
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-предел осей равным 2050 перед построением графика подгонки. Чтобы построить график интервалов предсказания, используйте 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
{'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
Чтобы получить статистику качества подгонки в командной строке, можно либо:
Откройте приложение Аппроксимирование Кривыми и выберите 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.