gpt4 book ai didi

matlab - 没有工具箱的曲线拟合

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:28 24 4
gpt4 key购买 nike

如果没有曲线拟合工具箱,您如何在 MATLAB 中将函数拟合到数据?

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

最佳答案

如果您知道要拟合的函数的形式但不知道其参数,则可以使用 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));

然后我定义了我想要关于 ab 最小化的函数,并使用 fminsearch 将其最小化。在这种情况下,我最小化了我的数据与用于拟合的函数之间差异的平方的积分。下面我定义了两个函数,一个有噪声数据,一个没有噪声。您会看到,在没有噪音的情况下,您可以准确地恢复 ab 的值。

注意:fminsearch 使用参数向量(在我的例子中是 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

最后的评论,在您对 ab 的值有限制的情况下,执行一些变量更改有时很有用。例如,如果您知道 a>0,您可能想要识别 log(a),然后将识别的值转换为 a

希望这对您有所帮助。

A.

关于matlab - 没有工具箱的曲线拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com