没有工具箱的曲线拟合

use*_*111 5 matlab

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

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

Adr*_*ien 9

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

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

>> x = linspace(0,5,10);
>> y = x.^(1/3) + 5;
>> y_noisy = y + 0.1*rand(size(y)); 
Run Code Online (Sandbox Code Playgroud)

然后我定义了我想要最小化的函数a,b并使用它来最小化它fminsearch.在这种情况下,我最小化了我的数据和拟合函数之间差异的平方的积分.下面我定义了两个函数,一个是噪声数据,一个是噪声.你看,在没有噪音的你恢复的确切数值ab.

注意:fminsearch带有参数向量的wotks(v在我的例子中).我把a=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
Run Code Online (Sandbox Code Playgroud)

最后的评论,在你对的值的约束的情况下ab它有时是有益的执行变量的一些变化.例如,如果您知道这一点a>0,则可能需要识别log(a)然后将标识的值转换为a.

希望这可以帮助.

一个.


San*_*esh 1

有两种方法可以在不使用 ToolBox 的情况下实现曲线拟合,它们是

  1. 如果样本间隔均匀,然后想要使用移位内核的某种线性组合(例如 B 样条曲线)来实现曲线拟合,那么以下工具将帮助您:

http://www.mathworks.com/matlabcentral/fileexchange/26292-regular-control-point-interpolation-matrix-with-boundary-conditions

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

文档polyfit。

例如,

 help polyfit;
 help slash;
Run Code Online (Sandbox Code Playgroud)

%...

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