没有工具箱的曲线拟合

时间:2010-12-21 08:31:25

标签: matlab

如果没有曲线拟合工具箱,您如何在MATLAB中使用函数来处理数据?

特别是,你如何拟合一个非多项式的函数,例如,如果我想拟合像y = x ^(1/3)+ 5这样的函数,它不是一个整数?

3 个答案:

答案 0 :(得分:9)

如果您知道要拟合的函数的形式但不知道其参数,则可以使用fminsearch查找适合您数据的参数。如果您想要适合y=x^a + b ab未知的数据(可能有噪音)(这里我假设真值为a=1/3和{ {1}})这就是我的快速回答:

这里我生成了我的数据(你不必在现实生活中这样做)

b=5

然后,我根据>> x = linspace(0,5,10); >> y = x.^(1/3) + 5; >> y_noisy = y + 0.1*rand(size(y)); a定义我想要最小化的函数,并使用b将其最小化。在这种情况下,我最小化了我的数据和拟合函数之间差异的平方的积分。下面我定义了两个函数,一个是噪声数据,一个是噪声。您可以看到,在没有噪音的情况下,您可以准确恢复fminsearcha的值。

注意:b wotks带有参数向量(在我的情况下为fminsearch)。我带了va=v(1)。您还必须为b=v(2)(此处v)提供一些初步猜测。

[1 1]

上次评论,如果您对>> err_noisy = @(v) trapz(x,(y_noisy - x.^v(1)-v(2)).^2); >> err = @(v) trapz(x,(y - x.^v(1)-v(2)).^2); >> v_noisy = fminsearch(err_noisy,[1 1]) v_noisy = 0.3345 5.0594 >> v = fminsearch(err,[1 1]) v = 0.3333 5.0000 a的值有限制,则执行某些变量变更有时很有用。例如,如果您知道b,则可能需要标识a>0,然后将标识的值转换为log(a)

希望这有帮助。

一个。

答案 1 :(得分:3)

immoptibox优化和数据拟合的免费工具箱。采用与@Adrien y = x^a + b相同的样本函数,ab使用来自immoptiboxmarquardt最小二乘法确定。

要解决此任务,需要两个文件。 sofit 会返回残差r以及雅可比j

function [r, j] = sofit(x, fitData)
t = fitData(:,1);
y = fitData(:,2);
r = y - (t.^x(1) + x(2));
j = -[t.^x(1).*log(t), ones(length(t),1)];
end

以下 runner 脚本用于为示例函数生成数据点,并调用marquardt进行数据拟合。

%% function template
f = @(t, p1, p2) t.^p1 + p2;

%% sample function
a = 1/3;
b = 5;
t= linspace(1,100)';
y = f(t, a, b);

%% packaging fit data for @sofit
fitData(:,1) = t;
fitData(:,2) = y;

%% marquardt
[xfit, info, perf] = marquardt(@sofit, [1, 1], [], fitData);

%% presentation
figure;
plot(y);
hold all
plot(f(t, xfit(1,end), xfit(2,end)), 'ro');
grid;
legend('sample function', 'fitted function', 'Location','East')

下图中生成的数据点(蓝色)与估计值(红色)。

sample function and fitted function using marquardt

答案 2 :(得分:1)

有两种方法可以实现没有ToolBox的曲线拟合,它们是

  1. 在均匀间隔样本的情况下,然后想要使用移位内核的一些线性组合(例如B样条)来拟合曲线拟合,那么以下工具将帮助您:
  2. http://www.mathworks.com/matlabcentral/fileexchange/26292-regular-control-point-interpolation-matrix-with-boundary-conditions

    2.使用polyfit,从头开始创建自己的拟合工具箱......借助于此,您可以在MATLAB中为数据拟合函数,

      
        

    doc polyfit。

      

    例如

     help polyfit;
     help slash;
    

    %...

    有关polyfit的更多信息请参阅此http://www.mathworks.com/help/techdoc/ref/polyfit.html