matlab mls,为什么用MLS法拟和直线时优化结果出不来

请大侠们来帮看看,为什么最后的优化部分,不管我设初值为多少,优化的结果还是等于初值

%利用移动最小二乘法(MLS)拟和一组点pi的直线,直线L1形式为:l*x+m*y-D=0

%即求 min( sum (-D)^2*thet(||pi-q||) )

%pi是一组点,thet函数是移动最小二乘法中的权重函数,采用高斯函数形式,q点是pi点的均值点R在拟和的直线上的投影

%n={l_norm,m_norm}, 直线L1: l*x+m*y-D=0 的法向量, D是待求未知量

%n1={k_norm,1} 与直线L1垂直的直线L2: k*x-y-(k*r_x-r_y)=0 的法向量 ,直线L2过均值点R(r_x,r_y)

% n*n1=0

%数据准备

%PI =

%  -18.4466   -5.6646

%  -18.0146   -5.4918

%R =

%  -18.2306   -5.5782

%%%%%%%%%%%%%%%%%%%%%%%%%%%程序主体%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all

syms l_norm m_norm k_norm D_line x y Q11 Q12

%求直线L1的法向量

m_norm=solve('l_norm^2+m_norm^2=1','m_norm');

% m_norm有2个值,为了简化问题,只考虑其中第一个值

norm1=[l_norm,m_norm(1,1)];

%已知的一组点pi

PI =[-18.4466 -5.6646

-18.0146 -5.4918];

%pi的均值点 R(r_x,r_y)

R =[-18.2306,-5.5782];

%pi的个数

[b_R,n_R]=size(PI);%pi的个数

%求直线L2的法向量

k_norm=solve('l_norm*k_norm+m_norm=0','k_norm');%直线L1与直线L2相互垂直,n*n1=0

k_norm=subs(k_norm,{'l_norm','m_norm'},{l_norm,m_norm(1,1)});

solution=solve('l_norm*x+m_norm*y-D_line=0','k_norm*x-y-(k_norm*r_x-r_y)=0');

%求R点在直线L1上的投影Q

Q=[Q11,Q12];

Q11=subs(solution.x,{'k_norm','m_norm','r_x','r_y'},{k_norm,m_norm(1,1),R(1,1),R(1,2)});

Q12=subs(solution.y,{'k_norm','m_norm','r_x','r_y'},{k_norm,m_norm(1,1),R(1,1),R(1,2)});

%初始化优化函数myfun_MLS

myfun_MLS=0;

h=2;%thet函数的初始值

for j=1:b_R

ff_MLS=(dot(norm1,PI(j,:))-D_line)^2;

thet=exp(-((PI(j,1)-Q11)^2+(PI(j,2)-Q12)^2)^2/h^2);

myfun_MLS=myfun_MLS+ff_MLS*thet;

end

myfun_MLS=vectorize(myfun_MLS);

myfun_MLS=strrep(myfun_MLS,'l_norm','x(1)');

myfun_MLS=strrep(myfun_MLS,'D_line','x(2)');

myfun_MLS

%优化函数初始值

x0=[1,1];

%采用标准算法,解无约束非线性优化问题

options=optimset('Display','iter','TolFun',1e-18,'GradObj','on');

[x,fval,exitflag,output]=fminsearch(myfun_MLS,x0,options);

x %%%%%%%%%%%%%% %就是这里,x还是等于初值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值