matlab 高阶拟合,matlab – 将多项式拟合到函数的最大值

我想将多项式拟合到噪声数据,使得近似多项式总是> =原始数据.例如:

x = linspace (-2, 6);

y = (x-2).^2 + 1 + 2 * randn (size (x));

function ret = delta (P, x, y)

yP = polyval (P, x);

d = yP - y;

d (d < 0) *= 1000;

ret = sumsq (d);

endfunction

P0 = polyfit (x, y, 2);

f = @(P) delta (P, x, y);

[P, FVAL] = sqp (P0, f)

xi = linspace (min(x), max(x), 100);

yi = polyval (P, xi);

plot(x, y, xi, yi);

grid on

84241fee425e9b1e0770dccb6a95b088.png

是否有更好的方法/方法也适用于高阶多项式?

简单的方法是只使用polyfit,然后计算max(y-yi)并将其作为偏移添加,但这不是最佳的……

编辑:我想使用GNU OCtave但添加“matlab”作为标签,因为语言和功能类似.

编辑:基于tvo的答案和真实数据:

x = [10 20 30 40 50 60 80 100];

y = [0.2372, 0.1312, 0.0936, 0.0805, 0.0614, 0.0512, 0.0554, 0.1407];

function ret = delta (P, x, y)

ret = sumsq (polyval (P, x) - y);

endfunction

f = @(P) delta (P, x, y);

h = @(P) polyval(P, x) - y;

P0 = polyfit (x, y, 3);

[P] = sqp (P0, f, [], h)

xi = linspace (min(x), max(x));

yi = polyval (P0, xi);

yio = polyval (P, xi);

plot(x, y, xi, yi, ";initial guess;", xi, yio, ";optimized;");

grid on

a8e8d2bbc161f6f7990eed560d8870ec.png

但正如您所看到的,优化和评估的poly具有点

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值