首页 文章

MatLab中的自定义曲线拟合

提问于
浏览
0

我正在尝试在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行)out = iDotReference(obj,currsubs);“

在这种情况下,我无法弄清楚MatLab究竟在抱怨什么 . 有时候,由于我不知道的原因,代码会运行,但是适合性很糟糕 . 我在这里做错了吗?这是指数衰减到某个0以上的指数的最佳方法吗?

以下代码是我如何尝试运行我的拟合:

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

1 回答

  • 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');
    

    但我不知道这是否解决了你的问题,因为我无法重现你的错误 .

相关问题