📄 datageometrize.m
字号:
function [xfit,bx,v,vi,cut]=datageometrize(X,nu,ncut)
% constructing local curves f(u) as local regions to form curve manifolds
% nu: geometrization parameter, cut: side-part length in two sides of f(u)
[nl,nx]=size(X); % data length and number of variables
vi=fix(nl/6); % limit geometrization length 3nu to under nl/2
nu=min([nu vi]);
k=0;
if ncut<0 k=abs(ncut); end
cut=ncut;
if ncut<1 cut=nu; end
v1=cut+1;
nc=ceil(nl/nu); % number of local curves
nd=nu+cut+cut;
vi=[]; %vi=round(nl/(5*nu))+1; cut=min([nu vi]);
nv=max([ceil(nd/nu) 2]);
for j=1:nc
u=[1:nd]'; % local coordinate u, and its scope
v=[v1:nd-cut]'; % middle u selected to form Ui
tu=nu*(j-1)+u-cut; % uniform coordinate of each local u
tv=nu*(j-1)+[1:nu]'; % uniform coordinate of local v
if k>0 tk=k*nu*(j-1)+[1:k*nu]; end
if j<nv
lu=find(tu>0); % u=[1:cut+nu*j]'
lt=nd-length(lu);
tu=[tu(lu);[tu(nd)+(1:lt)]'];
v=tv;
vi=[vi;tv(1) tv(nu)];
elseif j>nc-nv
lt=length(tv);
if tv(lt)>nl
tv=tv(1):nl;
if k>0 tk=tk(1):k*nl; end
v=[v(1):v(length(tv))]'; end
lt=length(tu);
if tu(lt)>nl
tu=tu(1):nl;
u=[1:length(tu)]'; end
lt=length(tu);
if lt==1
tu=[tu-2 tu-1 tu];
u=[1 2 3]';
v=3;
elseif lt==2
tu=[tu(1)-1 tu];
u=[1 2 3]';
v=v+1; end
end
% let Ui of Mx be x=f(u)=a*u^2+b*u+c,bx=[a b c]
if k>0 vk=v(1):(1/k):v(length(v))+(1-1/k); end
for i=1:nx
% e.g. tu=[6:25], u=[1:20], v=[6:15]
x=X(tu,i); % nd local data from X(:,i)
% return jth curve fitting data x, or x=f(u)
bx(j,:,i)=datafit(u,x,2);
% return fitted values at v by x=f(v)
xfit(tv,i)=polyval(bx(j,:,i),v);
if k>0 xfit2(tk,i)=polyval(bx(j,:,i),vk); end
end
end
if k>0 xfit=xfit2; end
v=[v1:nd-cut]';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -