123 lines
4.6 KiB
123 lines
4.6 KiB
function b_reg = fitting(ii,jj,rankk)
|
|
load('ETPMS_CHsample_all.mat','DH','aa', 'bb', 'cc')
|
|
num_a=size(aa,2);num_b=size(bb,2);num_c=size(cc,2);
|
|
|
|
% ii=5;jj=5;
|
|
|
|
cij=zeros(num_a,num_b,num_c);
|
|
for ia=1:num_a
|
|
for ib=1:num_b
|
|
for ic=1:num_c
|
|
cij(ia,ib,ic)=DH{ia,ib,ic}(ii,jj);
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
cij_vec = zeros(num_a*num_b*num_c,1);
|
|
a_vec = zeros(num_a*num_b*num_c,1);
|
|
b_vec = zeros(num_a*num_b*num_c,1);
|
|
c_vec = zeros(num_a*num_b*num_c,1);
|
|
idx=0;
|
|
for ia=1:num_a
|
|
a=aa(ia);
|
|
for ib=1:num_b
|
|
b=bb(ib);
|
|
for ic=1:num_c
|
|
c=cc(ic);
|
|
if 1+a+b+c>=0
|
|
idx=idx+1;
|
|
cij_vec(idx) = cij(ia,ib,ic);
|
|
a_vec(idx) = a;
|
|
b_vec(idx) = b;
|
|
c_vec(idx) = c;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
disp(idx)
|
|
|
|
y=cij_vec(1:idx);
|
|
x1=a_vec(1:idx);x2=b_vec(1:idx);x3=c_vec(1:idx);
|
|
|
|
|
|
%mÔªn´Î¶àÏîʽµÄÏîÊýΪ C^m_{m+n}
|
|
%m=3:
|
|
%n=1: 4
|
|
%n=2: 10
|
|
%n=3: 20
|
|
%n=4: 7*6*5/6=35
|
|
%n=5: 8*7*6/6=56
|
|
if rankk==4
|
|
X = [ones(size(y)),...
|
|
x1, x2, x3,...
|
|
x1.^2, x2.^2, x3.^2, x1.*x2, x3.*x2, x1.*x3,...
|
|
x1.^3, x2.^3, x3.^3, x1.^2.*x2, x1.^2.*x3, x2.^2.*x1, x2.^2.*x3, x3.^2.*x1, x3.^2.*x2, x1.*x2.*x3,...
|
|
x1.^4, x1.^3.*x2, x1.^3.*x3,...
|
|
x2.^4, x2.^3.*x1, x2.^3.*x3,...
|
|
x3.^4, x3.^3.*x1, x3.^3.*x2,...
|
|
x1.^2.*x2.^2,x1.^2.*x3.^2,x3.^2.*x2.^2,...
|
|
x1.^2.*x2.*x3,x1.*x2.^2.*x3,x1.*x2.*x3.^2];
|
|
b_reg=regress(y,X);
|
|
|
|
|
|
yf = b_reg(1)+b_reg(2).*x1+b_reg(3).*x2+b_reg(4).*x3+...
|
|
b_reg(5).*x1.^2+b_reg(6).*x2.^2+b_reg(7).*x3.^2 ...
|
|
+b_reg(8).*x1.*x2+b_reg(9).*x3.*x2+b_reg(10).*x1.*x3...
|
|
+b_reg(11).*x1.^3+b_reg(12).*x2.^3+b_reg(13).*x3.^3 ...
|
|
+b_reg(14).*x1.^2.*x2+b_reg(15).*x1.^2.*x3+b_reg(16).*x2.^2.*x1 ...
|
|
+b_reg(17).*x2.^2.*x3+b_reg(18).*x3.^2.*x1+b_reg(19).*x3.^2.*x2 ...
|
|
+ b_reg(20).*x1.*x2.*x3 ...
|
|
+ b_reg(21).*x1.^4 + b_reg(22).*x1.^3.*x2 + b_reg(23).*x1.^3.*x3 ...
|
|
+ b_reg(24).*x2.^4 + b_reg(25).*x2.^3.*x1 + b_reg(26).*x2.^3.*x3 ...
|
|
+ b_reg(27).*x3.^4 + b_reg(28).*x3.^3.*x1 + b_reg(29).*x3.^3.*x2 ...
|
|
+ b_reg(30).*x1.^2.*x2.^2 + b_reg(31).*x1.^2.*x3.^2 + b_reg(32).*x3.^2.*x2.^2 ...
|
|
+ b_reg(33).*x1.^2.*x2.*x3 + b_reg(34).*x1.*x2.^2.*x3 + b_reg(35).*x1.*x2.*x3.^2;
|
|
end
|
|
|
|
if rankk==5
|
|
X = [ones(size(y)),...
|
|
x1, x2, x3,...
|
|
x1.^2, x2.^2, x3.^2, x1.*x2, x3.*x2, x1.*x3,...
|
|
x1.^3, x2.^3, x3.^3, x1.^2.*x2, x1.^2.*x3, x2.^2.*x1, x2.^2.*x3, x3.^2.*x1, x3.^2.*x2, x1.*x2.*x3,...
|
|
x1.^4, x1.^3.*x2, x1.^3.*x3,...
|
|
x2.^4, x2.^3.*x1, x2.^3.*x3,...
|
|
x3.^4, x3.^3.*x1, x3.^3.*x2,...
|
|
x1.^2.*x2.^2,x1.^2.*x3.^2,x3.^2.*x2.^2,...
|
|
x1.^2.*x2.*x3,x1.*x2.^2.*x3,x1.*x2.*x3.^2,...
|
|
x1.^5, x2.^5, x3.^5,...
|
|
x1.^4.*x2, x1.^4.*x3, x2.^4.*x1, x2.^4.*x3, x3.^4.*x1, x3.^4.*x2,...
|
|
x1.^3.*x2.*x3, x1.*x2.^3.*x3, x1.*x2.*x3.^3,...
|
|
x1.^2.*x2.^2.*x3, x1.*x2.^2.*x3.^2, x1.^2.*x2.*x3.^2,...
|
|
x1.^3.*x2.^2, x1.^3.*x3.^2, x2.^3.*x1.^2, x2.^3.*x3.^2, x3.^3.*x1.^2, x3.^3.*x2.^2];
|
|
|
|
b_reg=regress(y,X);
|
|
yf = b_reg(1)+b_reg(2).*x1+b_reg(3).*x2+b_reg(4).*x3+...
|
|
b_reg(5).*x1.^2+b_reg(6).*x2.^2+b_reg(7).*x3.^2 ...
|
|
+b_reg(8).*x1.*x2+b_reg(9).*x3.*x2+b_reg(10).*x1.*x3...
|
|
+b_reg(11).*x1.^3+b_reg(12).*x2.^3+b_reg(13).*x3.^3 ...
|
|
+b_reg(14).*x1.^2.*x2+b_reg(15).*x1.^2.*x3+b_reg(16).*x2.^2.*x1 ...
|
|
+b_reg(17).*x2.^2.*x3+b_reg(18).*x3.^2.*x1+b_reg(19).*x3.^2.*x2 ...
|
|
+ b_reg(20).*x1.*x2.*x3 ...
|
|
+ b_reg(21).*x1.^4 + b_reg(22).*x1.^3.*x2 + b_reg(23).*x1.^3.*x3 ...
|
|
+ b_reg(24).*x2.^4 + b_reg(25).*x2.^3.*x1 + b_reg(26).*x2.^3.*x3 ...
|
|
+ b_reg(27).*x3.^4 + b_reg(28).*x3.^3.*x1 + b_reg(29).*x3.^3.*x2 ...
|
|
+ b_reg(30).*x1.^2.*x2.^2 + b_reg(31).*x1.^2.*x3.^2 + b_reg(32).*x3.^2.*x2.^2 ...
|
|
+ b_reg(33).*x1.^2.*x2.*x3 + b_reg(34).*x1.*x2.^2.*x3 + b_reg(35).*x1.*x2.*x3.^2 ...
|
|
+ b_reg(36).*x1.^5 + b_reg(37).*x2.^5 + b_reg(38).*x3.^5 ...
|
|
+ b_reg(39).*x1.^4.*x2 + b_reg(40).*x1.^4.*x3 ...
|
|
+ b_reg(41).*x2.^4.*x1 + b_reg(42).*x2.^4.*x3 ...
|
|
+ b_reg(43).*x3.^4.*x1 + b_reg(44).*x3.^4.*x2 ...
|
|
+ b_reg(45).*x1.^3.*x2.*x3 + b_reg(46).*x1.*x2.^3.*x3 + b_reg(47).*x1.*x2.*x3.^3 ...
|
|
+ b_reg(48).*x1.^2.*x2.^2.*x3 + b_reg(49).*x1.*x2.^2.*x3.^2 + b_reg(50).*x1.^2.*x2.*x3.^2 ...
|
|
+ b_reg(51).*x1.^3.*x2.^2 + b_reg(52).*x1.^3.*x3.^2 + b_reg(53).*x2.^3.*x1.^2 ...
|
|
+ b_reg(54).*x2.^3.*x3.^2 + b_reg(55).*x3.^3.*x1.^2 + b_reg(56).*x3.^3.*x2.^2;
|
|
|
|
end
|
|
|
|
disp([' max abs. error: ',num2str(max(abs(yf-y)))])
|
|
disp(['mean abs. error: ',num2str(mean(abs(yf-y)))])
|
|
disp([' max rel. error: ',num2str(max(abs((yf-y)./y).*(y>0.02)))])
|
|
disp(['mean rel. error: ',num2str(mean(abs((yf-y)./y).*(y>0.02)))])
|
|
|
|
end
|