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

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

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

load franke;
surffit = fit([x,y],z,'poly23','normalize','on')
     Linear model Poly23:
     surffit(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p21*x^2*y 
                    + p12*x*y^2 + p03*y^3
       where x is normalized by mean 1982 and std 868.6
       and where y is normalized by mean 0.4972 and std 0.2897
     Coefficients (with 95% confidence bounds):
       p00 =      0.4253  (0.3928, 0.4578)
       p10 =      -0.106  (-0.1322, -0.07974)
       p01 =     -0.4299  (-0.4775, -0.3822)
       p20 =     0.02104  (0.001457, 0.04062)
       p11 =     0.07153  (0.05409, 0.08898)
       p02 =    -0.03084  (-0.05039, -0.01129)
       p21 =     0.02091  (0.001372, 0.04044)
       p12 =     -0.0321  (-0.05164, -0.01255)
       p03 =      0.1216  (0.09929, 0.1439)

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

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

plot(surffit,[x,y],z)

Figure contains an axes. The axes contains 2 objects of type surface, line.

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

plot(surffit,[x,y],z,'Style','Residuals')

Figure contains an axes. The axes contains 2 objects of type patch, stem.

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

plot(surffit,[x,y],z,'Style','predfunc')

Figure contains an axes. The axes contains 4 objects of type surface, line.

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

Рассчитать подгонку в определенной точке путем определения значения для x и y , используя эту форму: z = fittedmodel(x,y).

surffit(1000,0.5)
ans = 0.5673

Вычислите значения подгонки во многих точках

xi = [500;1000;1200];
yi = [0.7;0.6;0.5];
surffit(xi,yi)
ans = 3×1

    0.3771
    0.4064
    0.5331

Получите предсказание ограничения на эти значения.

[ci, zi] = predint(surffit,[xi,yi])
ci = 3×2

    0.0713    0.6829
    0.1058    0.7069
    0.2333    0.8330

zi = 3×1

    0.3771
    0.4064
    0.5331

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

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

surffit
     Linear model Poly23:
     surffit(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p21*x^2*y 
                    + p12*x*y^2 + p03*y^3
       where x is normalized by mean 1982 and std 868.6
       and where y is normalized by mean 0.4972 and std 0.2897
     Coefficients (with 95% confidence bounds):
       p00 =      0.4253  (0.3928, 0.4578)
       p10 =      -0.106  (-0.1322, -0.07974)
       p01 =     -0.4299  (-0.4775, -0.3822)
       p20 =     0.02104  (0.001457, 0.04062)
       p11 =     0.07153  (0.05409, 0.08898)
       p02 =    -0.03084  (-0.05039, -0.01129)
       p21 =     0.02091  (0.001372, 0.04044)
       p12 =     -0.0321  (-0.05164, -0.01255)
       p03 =      0.1216  (0.09929, 0.1439)

Чтобы получить только уравнение модели, используйте formula.

formula(surffit)
ans = 
'p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p21*x^2*y + p12*x*y^2 + p03*y^3'

Получите имена и значения коэффициентов

Задайте коэффициент по имени.

p00 = surffit.p00
p00 = 0.4253
p03 = surffit.p03
p03 = 0.1216

Получите все имена коэффициентов. Посмотрите на уравнение аппроксимации (для примера, f(x,y) = p00 + p10*x...), чтобы увидеть условия модели для каждого коэффициента.

coeffnames(surffit)
ans = 9x1 cell
    {'p00'}
    {'p10'}
    {'p01'}
    {'p20'}
    {'p11'}
    {'p02'}
    {'p21'}
    {'p12'}
    {'p03'}

Получите все значения коэффициентов.

coeffvalues(surffit)
ans = 1×9

    0.4253   -0.1060   -0.4299    0.0210    0.0715   -0.0308    0.0209   -0.0321    0.1216

Получите доверительные ограничения коэффициентов

Используйте доверительные ограничения коэффициентов, чтобы помочь вам оценить и сравнить подгонки. Доверительные ограничения коэффициентов определяют их точность. Границы, которые находятся далеко друг от друга, указывают на неопределенность. Если границы пересекают ноль для линейных коэффициентов, это означает, что вы не можете быть уверены, что эти коэффициенты отличаются от нуля. Если некоторые условия модели имеют коэффициенты нуля, то они не помогают с подгонкой.

confint(surffit)
ans = 2×9

    0.3928   -0.1322   -0.4775    0.0015    0.0541   -0.0504    0.0014   -0.0516    0.0993
    0.4578   -0.0797   -0.3822    0.0406    0.0890   -0.0113    0.0404   -0.0126    0.1439

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

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

methods(surffit)
Methods for class sfit:

argnames       dependnames    indepnames     predint        sfit           
category       differentiate  islinear       probnames      type           
coeffnames     feval          numargs        probvalues     
coeffvalues    fitoptions     numcoeffs      quad2d         
confint        formula        plot           setoptions     

Используйте help команда, чтобы узнать, как использовать метод аппроксимации.

help sfit/quad2d
 QUAD2D  Numerically integrate a surface fit object.
    Q = QUAD2D(FO, A, B, C, D) approximates the integral of the surface fit
    object FO over the planar region A <= x <= B and C(x) <= y <= D(x). C and D
    may each be a scalar, a function handle or a curve fit (CFIT) object.
 
    [Q,ERRBND] = QUAD2D(...) also returns an approximate upper bound on the
    absolute error, ERRBND.
 
    [Q,ERRBND] = QUAD2D(FUN,A,B,C,D,PARAM1,VAL1,PARAM2,VAL2,...) performs
    the integration with specified values of optional parameters. 
 
    See QUAD2D for details of the upper bound and the optional parameters. 
      
    See also: QUAD2D, FIT, SFIT, CFIT.

    Documentation for sfit/quad2d
       doc sfit/quad2d