【发布时间】:2021-01-27 07:02:51
【问题描述】:
我有一个噪声信号和一个模型函数,例如:
x=linspace(0,20);
w=[2 6 -4 5];
y=w(1)*besselj(0,x)+w(2)*besselj(1,x)+w(3)*besselj(2,x)+w(4)*besselj(3,x);
y(randi(length(y),[1 10]))=10*rand(1,10)-5;
plot(x,y,'x')
我想使用 RANSAC 在我的模型中查找w,因为这种方法在查找线时对噪声具有鲁棒性。然而,这不是一个线性问题,我无法得到合适的拟合,可能是因为我试图拟合的函数的振荡性质。
我看到 matlab 有一个 fitPolynomialRansac 函数,但是对于 a+b*x+c*x^2+d*x^3 简单案例(介于 -1 和 1 之间),即使这样也失败了。
知道如何驯服 RANSAC 吗?还是采用不同的抗噪方法?
【问题讨论】:
-
为什么不使用
lsqnonlin? -
@mikuszefski 听起来确实很有趣,我想知道是否有内置的 matlab 功能...
-
好吧,我认为这没有必要。我不使用 Matlab,但据我了解,查看lsqnonlin 的文档可以使您提供的成本函数最小二乘。通常,您提供
f(x_i, params) = theory( x_i, params ) - y_i,它将通过平方得到标准最小二乘。相反,如果您让它最小化'f(x_i,params)= sqrt(2 * sqrt(1 + r**2)-1)',其中r = theory( x_i, params ) - y_i您会得到上面链接中描述的内容。让我知道我是对还是错。 -
添加了赏金,以激励您展示您的解决方案。
标签: matlab curve-fitting noise data-fitting ransac