主题:非线性最小二乘拟合
大家好,最近在做非线性最小二乘拟合,到最后遇到一点问题,不知是否我的数据处理的不对,希望会的朋友能给与帮助。
x=lsqnonlin(@myfun,x0);
其中myfun.m如下:
function y=myfun(x,data)
SitaS=data(:,1);
SitaV=data(:,2);
FaiV=data(:,3);
BRDF=data(:,4);
CosSitaS=cos(SitaS);
CosSitaV=cos(SitaV);
SinSitaS=sin(SitaS);
SinSitaV=sin(SitaS);
CosFaiV=cos(FaiV);
Cos2SitaA=CosSitaS.*CosSitaV+SinSitaS.*SinSitaV.*CosFaiV;
CosSitaA=sqrt((Cos2SitaA+1)/2);
CosAlpha=(CosSitaS+CosSitaV)./(2*CosSitaA);
TanAlpha=sqrt(ones(size(CosAlpha))-CosAlpha.^2)./CosAlpha;
g=sqrt(x(1)^2*ones(size(CosSitaA))+CosSitaA.^2-ones(size(CosSitaA)));
F=1/2*((g-CosSitaA)./(g+CosSitaA)).^2*(1+((CosSitaA.*(g+CosSitaA)-ones(size(CosSitaA)))./((CosSitaA.*(g-CosSitaA)+ones(size(CosSitaA))))).^2);
D=exp(-(TanAlpha.^2)./(x(2)^2*ones(size(TanAlpha))))./(x(2)^2*ones(size(TanAlpha)).*CosAlpha.^4);
g1=ones(size(CosSitaA));
g2=2*CosAlpha.*CosSitaV./CosSitaA;
g3=2*CosAlpha.*CosSitaS./CosSitaA;
G=myMin(g1,g2,g3);
brdf_spec=F.*G.*D./(2*pi^2*CosSitaS.*CosSitaV);
brdf_diff=x(3)*ones(size(BRDF))/pi;
y=brdf_spec+brdf_diff-BRDF;
先谢了!
x=lsqnonlin(@myfun,x0);
其中myfun.m如下:
function y=myfun(x,data)
SitaS=data(:,1);
SitaV=data(:,2);
FaiV=data(:,3);
BRDF=data(:,4);
CosSitaS=cos(SitaS);
CosSitaV=cos(SitaV);
SinSitaS=sin(SitaS);
SinSitaV=sin(SitaS);
CosFaiV=cos(FaiV);
Cos2SitaA=CosSitaS.*CosSitaV+SinSitaS.*SinSitaV.*CosFaiV;
CosSitaA=sqrt((Cos2SitaA+1)/2);
CosAlpha=(CosSitaS+CosSitaV)./(2*CosSitaA);
TanAlpha=sqrt(ones(size(CosAlpha))-CosAlpha.^2)./CosAlpha;
g=sqrt(x(1)^2*ones(size(CosSitaA))+CosSitaA.^2-ones(size(CosSitaA)));
F=1/2*((g-CosSitaA)./(g+CosSitaA)).^2*(1+((CosSitaA.*(g+CosSitaA)-ones(size(CosSitaA)))./((CosSitaA.*(g-CosSitaA)+ones(size(CosSitaA))))).^2);
D=exp(-(TanAlpha.^2)./(x(2)^2*ones(size(TanAlpha))))./(x(2)^2*ones(size(TanAlpha)).*CosAlpha.^4);
g1=ones(size(CosSitaA));
g2=2*CosAlpha.*CosSitaV./CosSitaA;
g3=2*CosAlpha.*CosSitaS./CosSitaA;
G=myMin(g1,g2,g3);
brdf_spec=F.*G.*D./(2*pi^2*CosSitaS.*CosSitaV);
brdf_diff=x(3)*ones(size(BRDF))/pi;
y=brdf_spec+brdf_diff-BRDF;
先谢了!