Кривая с Matlab терпит неудачу - PullRequest
3 голосов
/ 08 января 2012

Я пытаюсь подогнать кривую в Matlab, используя fit в командной строке. Входные данные:

X =

     1
     2
     4
     5
     8
     9
    10
    13

Y =

1.0e-04 *

    0.1994
    0.0733
    0.0255
    0.0169
    0.0077
    0.0051
    0.0042
    0.0027

И целевой функцией является

Y = 1/(kappa*X.^a)

Я использую fittype, fitoptions и fit следующим образом:

model1 = fittype('1/(kappa*x.^pow)');
opt1 = fitoptions(model1);
opt1.StartPoint = [1e-5 -2];
[fit1,gof1] = fit(X,Y.^-1,model1,opt1)

Я получаю результаты с rsquare примерно -450, которые имеют неопределенное направление в том же направлении, что и измерение. I have attached a figure to demonstrate this. Как я могу улучшить навыки подгонки Matlab?

Редактировать

Я удалил .^-1 в команде подгонки. Это улучшило поведение, но это не совсем правильно. Если я установлю model1 равным:

model1 = fittype('1/(kappa*x.^pow)');

Подходит плохо. Если я установлю это:

model1 = fittype('kappa*x.^pow');

Подгонка хорошая (каппа очень маленькое, а пау отрицательный).

я тоже нормализовал Y и получаю разумные результаты

1 Ответ

6 голосов
/ 09 января 2012

Вы должны заменить

[fit1,gof1] = fit(X,Y.^-1,model1,opt1)

на

[fit1,gof1] = fit(X,Y,model1,opt1)

Также ваше начальное условие для kappa равно 1e-5, что имело бы смысл, если бы в числителе было kappa.

Используя модель kappa*x.^pow с начальным условием [1e-5 -2], вы получите правильную посадку:

X =[1     2     4     5     8     9    10    13]';
Y = 1.0e-04 * [0.1994 0.0733 0.0255 0.0169 0.0077 0.0051 0.0042  0.0027]';

model1 = fittype('kappa*x.^pow');
opt1 = fitoptions(model1);
opt1.StartPoint = [1e-5 -2];
[fit1,gof1] = fit(X,Y,model1,opt1)
plot(fit1, X, Y)

Результат подгонки:

>> fit1
fit1 = 
   General model:
   fit1(x) = kappa*x.^pow
   Coefficients (with 95% confidence bounds):
     kappa =   2.044e-05  (1.931e-05, 2.158e-05)
     pow =      -1.657  (-1.851, -1.464)

Fitted Curve

...