如果没有曲线拟合工具箱,您如何在MATLAB中使用函数来处理数据?
特别是,你如何拟合一个非多项式的函数,例如,如果我想拟合像y = x ^(1/3)+ 5这样的函数,它不是一个整数?
如果您知道要拟合的函数的形式但不知道其参数,则可以使用fminsearch查找适合您的数据的参数.如果你有数据(可能有噪音),你想要适合y=x^a + b哪里a和b未知(这里我将假设真正的值是a=1/3和b=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.在这种情况下,我最小化了我的数据和拟合函数之间差异的平方的积分.下面我定义了两个函数,一个是噪声数据,一个是噪声.你看,在没有噪音的你恢复的确切数值a和b.
注意: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)
最后的评论,在你对的值的约束的情况下a和b它有时是有益的执行变量的一些变化.例如,如果您知道这一点a>0,则可能需要识别log(a)然后将标识的值转换为a.
希望这可以帮助.
一个.
有两种方法可以在不使用 ToolBox 的情况下实现曲线拟合,它们是
2.使用polyfit,从头开始创建您自己的拟合工具箱...借助它,您可以将函数拟合到MATLAB中的数据,
文档polyfit。
例如,
help polyfit;
help slash;
Run Code Online (Sandbox Code Playgroud)
%...
有关 polyfit 的更多信息请参阅http://www.mathworks.com/help/techdoc/ref/polyfit.html