📄 bs.m
字号:
function B_spline=Bs(u,j,k,umin,umax)
%此程序为B样条神经网络训练程序
%u为输入,k为样条网络的基函数的阶数,j为输入空间划分的数目
%lamg为插入点的数值,a为输入空间的最小值,b为最大值
%u1,u2为输入变量的个数和样本总量
% % u=load('E:\u1');
% % %
% % k=3;%%%k为基函数的阶数
% % j=4;%%$$$$$$$$为插入结点个数
%这个就是产生分段函数,根据对输入的不同划分,在不同区间内有不同的函数
a=umin;
b=umax;
u2=1;
p=k;
interval=(b-a)/j;
%?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
for i=1:(2*p+1)
lamg(i)=0;
end
for i=1:(j+2*p+1)
lamg(i)=a+(i-p)*interval;
end
%??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
for i=1:p;%%%%%%%%%%%%%%%
lamg(i)=a-(p-i)*interval;
end
%取出输入变量的个数及输入空间的最值
%内部结点的开始下标定为p+1,interval为插值间隔
%以上是求取插值lamg的程序
%b样条网络基函数的求取见下
%??????????????????????????????????????????????????????????????????????????????????????????????????
for l=1:u2 %输入样本数
u(l)=u;
for m=(p+1):(j+p*2) %插入值共j+p个,m只与划分数有关
for i=1:p %样条基函数的阶
if i==1
if ((u(l)>=lamg(m-1))&((u(l)<lamg(m))))
B_s(l,m,1)=1;
else
B_s(l,m,1)=0;
end %结束阶数为1情况的假设
else if ((u(l)>=lamg(m-i))&(u(l)<lamg(m)))
B_s(l,m,i)=((u(l)-lamg(m-i))/(lamg(m-1)-lamg(m-i)))*B_s(l,m-1,i-1)+(lamg(m)-u(l))/(lamg(m)-lamg(m-i+1))*B_s(l,m,i-1);
else
B_s(l,m,i)=0;
end
end %结束if阶数i
end %结束i循环
end %结束m循环
end %结束l循环
B_spline=B_s(:,(p+1):(j+p*2-1),k);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -