Matlab中的lsqcurvefit函数的使用

Matlab中的lsqcurvefit函数的使用

lsqcurvefit函数

非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(param, xdata),但不知道系数向量param,此时可以使用lsqcurvefit函数求得param使得输出的如下最小二乘表达式成立:
min Σ(F(param,xdatai)-ydatai)^2。

lsqcurvefit函数的调用格式:

  1. 最简单的格式:
    param=lsqcurvefit(fun, param0, xdata, ydata)
  2. 高级调用格式——更多输入设置/ 输出信息:
    [param, resnorm, residual, exitflag, output] = lsqcurvefit(@fun, param0, xdata, ydata, lb, ub, options)在这里插入图片描述

调用示例

拟合图像三次失真函数

在这里插入图片描述
在这里插入图片描述
取上述蓝色特征点进行曲线拟合,红色特征点用于验证:

original_data=[90,90;179,90;268,90;356,90;       %原始图像蓝色特征点
               90,178;179,178;268,178;356,178;
               90,267;179,267;268,269;356,267;
               90,356;179,356;268,356;356,356];

cubic_data=[54,55;165,68;262,73;356,76;        %三次失真图像蓝色特征点  
    68,165;170,170;265,174;356,176;
    73,262;173,264;267,267;356,267;
    76,356;176,356;267,356;356,356];
    
original=[445,90;534,90;445,178;534,178];     %原始图像红色特征点  
cubic=[450,73;547,68;448,173;542,170];       %三次失真图像红色特征点

b0=[0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01, ...
    0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01];   %初始化参数beta
[b1,r]=lsqcurvefit(@cubic_func,b0,original_data,cubic_data);
disp(b1);
disp(r);
disp(cubic);
disp(cubic_func(b3,original));

自定义三次失真函数cubitc_func.m

function Y=cubic_func(b,x)
m=b(1).*x(:,1).^3+b(2).*x(:,2).^3+b(3).*x(:,1).^2.*x(:,2)+b(4).*x(:,1).*x(:,2).^2+b(5).*x(:,1).^2 ...
    +b(6).*x(:,2).^2+b(7).*x(:,1).*x(:,2)+b(8).*x(:,1)+b(9).*x(:,2)+b(10);
n=b(11).*x(:,1).^3+b(12).*x(:,2).^3+b(13).*x(:,1).^2.*x(:,2)+b(14).*x(:,1).*x(:,2).^2+b(15).*x(:,1).^2 ...
    +b(16).*x(:,2).^2+b(17).*x(:,1).*x(:,2)+b(18).*x(:,1)+b(19).*x(:,2)+b(20);
Y=[m,n];
end

拟合得到的失真函数:
在这里插入图片描述红色特征点验证拟合效果(上为原始特征点):
在这里插入图片描述

在这里插入图片描述
图片下载:
链接:https://pan.baidu.com/s/1NpuAys2ACCiOj3_1LBJe_g
提取码:t6s5

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值