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

📄 netsimu.m

📁 用神经网络进行训练和仿真的接口函数
💻 M
字号:
%此为一仿真程序
%首先读入权域值参数

function retdouble = NetSimu(ModelNo,NetPara,SimulatePara,InputFun,OutputFun,DataDir)
NNTWARN OFF

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ModelNo='1';                   % 模型编号

NetPara(1)=6;    %输入层节点数
NetPara(2)=1;    %输出层节点数
NetPara(3)=4;    %隐层节点数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 测试数据文件
FileName='sample.xls';
MaxOutputValue=6.5;
MinOutputValue=0.1;

DataDir='.';
InputFun = 'tansig';
OutputFun = 'purelin';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
retdouble = -1;
olddir=pwd;
% 数据所在目录
cd(DataDir);

% 输入层到中间层的传递函数
if (length(InputFun)==0)
    InputFun = 'tansig';
end
% 中间层到输出层的传递函数  
if (length(OutputFun)==0)
    OutputFun = 'purelin'
end    

%取测试数据
[test_data] = XLSREAD(FileName);
%输入向量归一化
%用线性函数把数据转换为0.001-0.0.9995之间
% 因为只有输入数据,故只有6列
for i=1:6
 c=test_data(:,i);
 d=(c-min(c))/(max(c)-min(c));
 d=((0.5-0.001)/0.5)*d+0.001;
 p1(:,i)=d;
end 

frw1=fopen(sprintf('w%s%s',ModelNo,'1.dat'),'r');
frb1=fopen(sprintf('b%s%s',ModelNo,'1.dat'),'r');
frw2=fopen(sprintf('w%s%s',ModelNo,'2.dat'),'r');
frb2=fopen(sprintf('b%s%s',ModelNo,'2.dat'),'r');

InputDim=NetPara(1);      %输入层节点数
OutputDim=NetPara(2);     %输出层节点数
MidDim=NetPara(3);         %中间层节点数

[w1,count]=fscanf(frw1,'%f',[MidDim,InputDim]);
[b1,count]=fscanf(frb1,'%f',[MidDim,1]);
[w2,count]=fscanf(frw2,'%f',[OutputDim,MidDim]);
[b2,count]=fscanf(frb2,'%f',[OutputDim,1]);

fclose(frw1);
fclose(frb1);
fclose(frw2);
fclose(frb2);

a=simuff(p1',w1,b1,InputFun,w2,b2,OutputFun);

% 对结果反归一化
d=((a'-0.001)*0.5)/(0.5-0.001);  
out=d*(MaxOutputValue-MinOutputValue)+MinOutputValue;

%for i=1:6
% c=test_data(:,i);
% d=((a'-0.001)*0.5)/(0.5-0.001);  
% d=d*(max(c)-min(c))+min(c);
% a(:,i)=d;
%end 

%将仿真结果写入文件
fwresult=fopen(sprintf('result%s%s',ModelNo,'.dat'),'w');
fprintf(fwresult,'%-15.6f\n',out);
fclose(fwresult);

cd(olddir);


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -