⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bs.m

📁 给于MATLAB 环境下的非线性滤波器。此设计中用到了
💻 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 + -