【matlab国外编程代写】matlab定位算法

clc

clear

SamNum=100; %Training Sample No.

TestSamNum=101; %Testing Sample No.

SP=0.6; % a fixed spread constant

ErrorLimit=.9; % goal error

% according to Goal Function to get input and output samples.

rand('state',sum(100*clock))

NoiseVar=0.1;

Noise=NoiseVar*randn(1,SamNum);%Dimension: 1*SamNum

SamIn=8*rand(1,SamNum)-4;

SamOutNoNoise=1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2);

SamOut=SamOutNoNoise+Noise;

%以上是产生的输入输出对应的值

TestSamIn=-4:0.08:4;

TestSamOut=1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2); % Testing Samples as a smooth curve. we need to fix to it.

%以上为测试样本的输入输出的对应的值

figure

hold on

grid

plot(SamIn,SamOut,'r+'); % Training Samples have some noise. see the figure.

plot(TestSamIn,TestSamOut,'b--');

xlabel('Input x');

ylabel('Output y');

%以上为训练样本的曲线及测试样本的曲线

[InDim,MaxUnitNum]=size(SamIn); % here the dimension is 1,and the maximum hidden units is the training sample Number

Distance=dist(SamIn',SamIn); %hidden layer weights is SamIn's transpose ?? HiddenUnitOut=radbas(Distance/SP) % and this is the output of Hidden layer??

%

PosSelected=[];

VectorsSelected=[];

HiddenUnitOutSelected=[];

ErrHistory=[];

VectorsSelectedFrom=HiddenUnitOut;

dd=sum((SamOut.*SamOut)')'

for k=1:MaxUnitNum

PP=sum(VectorsSelectedFrom.*VectorsSelectedFrom)';

Denominator=dd*PP';

[xxx,SelectedNum]=size(PosSelected)

if SelectedNum>0

[lin,xxx]=size(Denominator);

Denominator(:,PosSelected)=ones(lin,1);

end

Angle=((SamOut*VectorsSelectedFrom).^2)./Denominator;

[value,pos]=max(Angle);

PosSelected=[PosSelected pos];

HiddenUnitOutSelected=[HiddenUnitOutSelected;HiddenUnitOut(pos,:)];

HiddenUnitOutEx=[HiddenUnitOutSelected;ones(1,SamNum)];

W2Ex=SamOut*pinv(HiddenUnitOutEx);

W2=W2Ex(:,1:k);

B2=W2Ex(:,k+1);

NNOut=W2*HiddenUnitOutSelected+B2;

SSE=sumsqr(SamOut-NNOut);

ErrHistory=[ErrHistory SSE];

if SSE

NewVector=VectorsSelectedFrom(:,pos);

ProjectionLen=NewVector'*VectorsSelectedFrom/(NewVector'*NewVector);

VectorsSeclectedFrom=VectorsSelectedFrom-NewVector*ProjectionLen; end

UnitCenters=SamIn(PosSelected);

%Testing

TestDistance=dist(UnitCenters',TestSamIn);

TestHiddenUnitOut=radbas(TestDistance/SP);

TestNNOut=W2*TestHiddenUnitOut+B2;

plot(TestSamIn,TestNNOut,'k--');

k

UnitCenters

W2

B2

相关文档
最新文档