请大侠们来帮看看,为什么最后的优化部分,不管我设初值为多少,优化的结果还是等于初值
%利用移动最小二乘法(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还是等于初值