2014-10-02 3 views
0

Я пытаюсь определить пользовательскую кривую Fit в MatLab. Кривая, которую я пытаюсь впору выглядит следующим образом:Пользовательская установка кривых в MatLab

A*exp(B*x)+C 

Причина нужна эта подгонка, потому что мои данные экспоненциально затухает, однако эти данные не стремится к нулю (в этом наборе данных, кривая должна распадаться и приблизиться к некоторому числу выше нуля). Использование fittype ('exp2') также не является опцией, потому что оно перегружает данные (кривые вверх к концу, когда он должен оставаться плоским где-то выше 0). Я определяю нужным типа, используя следующий код:

ft = fittype('(A*exp(B*x)) + C','coefficients', {'A', 'B', 'C'}); 

Однако, когда я пытаюсь соответствовать данным к этой кривой, я получаю следующее сообщение об ошибке:

«Ошибка при помощи CFIT/subsref> iDotReference (строка 66) Имя не является ни коэффициент или параметр проблема

Ошибка в CFIT/subsref (строка 19) из = iDotReference (OBJ, currsubs);».

Я не могу точно понять, что MatLab жалуется в этом случае. Иногда по причинам, которые я не знаю, код будет работать, но пригонка просто ужасна. Я здесь что-то не так? Является ли это лучшим способом для экспоненты, которая распадается на некоторое значение выше 0?

Следующий код, как я пытаюсь запустить мой припадок:

[cf, gof] = fit(time', testArray', fittype); 

ответ

0

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

Во всяком случае, я не столкнуться с проблемой у вас есть, если я запускаю этот код:

ft = fittype('(A*exp(B*x)) + C', 'coefficients', {'A', 'B', 'C'}); 

time = 0:0.1:20; 
testArray = (4*exp(-.2*time) + 10) + normrnd(0,1,size(time)); 
[cf, gof] = fit(time', testArray', ft, 'StartPoint', [17 -.6 100]); 

% check: 
figure(1) 
clf 
hold on 
plot(time,testArray,'k.') 
plot(time, cf.A*exp(cf.B*time) + cf.C, 'r'); 

Но я не знаю, если это решить вашу проблему, так как я не могу воспроизвести вашу ошибку.

+0

Это действительно помогает, но все же приступы ужасны. Странная часть состоит в том, что, используя встроенную в exp1 подгонку, приступы поразительны, поэтому кажется странным, что я получаю такие ужасные приступы, пытаясь включить константу. Есть ли причина, почему пристыдки становятся настолько плохими настолько быстро, когда вы пытаетесь добавить термин C? – odnanreh12

+0

Кроме того, я часто получаю эту ошибку: Inf вычисляется с помощью функции модели, установка не может продолжаться. Я также отправлю образец данных, которые я пытаюсь поместить. x: 0,6325 0,7438 0,5353 0,3303 0,1373 0,0582 0,0317 0,1173 0,0720 0,0718 0,0350 0,0803 0,0293 y: 11.3333 27.1667 37.0000 46.7000 56.5000 66.1667 76.0000 90.8333 100.6667 110.3333 120.6667 130.6667 140.6667 – odnanreh12

Смежные вопросы