Вычислите подгонку кривой

Этот пример показов, как работать с кривой подгонкой.

Загрузка данных и подгонка полиномиальной кривой

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)

Figure contains an axes. The axes contains 2 objects of type line. These objects represent data, fitted curve.

Постройте график подгонки невязок.

plot(curvefit,cdate,pop,'Residuals')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent data, zero line.

Постройте график границ предсказания на подгонке.

plot(curvefit,cdate,pop,'predfunc')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent data, fitted curve, prediction bounds.

Вычислите подгонку в заданной точке

Рассчитать подгонку в определенной точке путем определения значения для 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

Figure contains an axes. The axes contains 4 objects of type line. These objects represent fitted curve, prediction bounds.

Получите уравнение модели

Введите имя модели для отображения уравнения модели, подобранных коэффициентов и доверительных границ для подобранных коэффициентов.

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)

Figure contains an axes. The axes contains an object of type histogram.

Постройте график подгонки, данных и невязок

plot(curvefit,cdate,pop,'fit','residuals')
legend Location SouthWest
subplot(2,1,1)
legend Location NorthWest

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent data, fitted curve. Axes 2 contains 2 objects of type line. These objects represent data, zero line.

Методы поиска

Перечислите каждый метод, который можно использовать с подгонкой.

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.