function a=zernike( X,Y,W,PointNumber)
%load X
%load Y
%load Z
%PointNumber=166931;
zerN=35;
% for k=1:PointNumber
% ss=zernikeCT(x(k),y(k),zerN);
% s1(:,k)=ss';
% end
s1=zernikeCT(X,Y,zerN);%-1:1
f=sum(s1)/PointNumber;
s1=s1';
for i=1:zerN
for j=1:zerN
A1(i,j)=sum((s1(i,:)-f(i)).*(s1(j,:)-f(j)))/PointNumber;%最小二乘法 A135*35项
end
end
SUM1=sum(W)/PointNumber;%-0.3780
for i=1:zerN
A1(i,zerN+1)=sum((s1(i,:)-f(i))*(W-SUM1))/PointNumber;%35*36
end
for l=1:zerN
A1(l,:)=A1(l,:)/A1(l,l);%所有值除以对角线上的数
for i=l+1:zerN
A1(i,:)=A1(i,:)-A1(l,:)*A1(i,l);
end
end
a=zeros(1,36);%36个0
a(35)=A1(35,36);%a(35)赋值
for l=zerN-1:-1:1
b=0;
for i=l+1:zerN
b=a(i)*A1(l,i)+b;
end
a(l)=A1(l,zerN+1)-b;
end
b=sum(a(1:35).*f);
a0=SUM1-b;
a(36)=a0;
评论1