?? newsolver1.m
字號:
%函數(2):在x1的領域產生一組新的解
%newSolver1根據x1的誤差給出一個新的可能解x
function x2=newSolver1(x1,x1Error,leftBound,distance,rightBound)
%parameter=[leftBound,distance,rightBound]
%leftBound:解空間的左邊界,distance:可能解的間隔,rightBound:解空間的右邊界
%解空間是指在一個坐標軸上解的左右邊界和解之間的間隔
[x1Group,x1N]=size(x1);
%x1Group:x1的行數,x1N:方程的元數
%round((-0.5+rand(x1Group,x1N))*2)
if x1Error<=30%在解空間上移動1格
x2=x1+round((-0.5+rand(x1Group,x1N))*2)*distance;
k=x2<leftBound;%防止新解越過左邊界
x2(:,k)=leftBound;
k=x2>rightBound;%防止新解越過右邊界
x2(:,k)=rightBound;
elseif x1Error>30 && x1Error<=100%在解空間上移動3格以下
x2=x1+round((-0.5+rand(x1Group,x1N))*6)*distance;
k=x2<leftBound;
x2(:,k)=leftBound;
k=x2>rightBound;
x2(:,k)=rightBound;
elseif x1Error>100 && x1Error<=1000%在解空間上移動9格以下
x2=x1+round((-0.5+rand(x1Group,x1N))*20)*distance;
k=x2<leftBound;
x2(:,k)=leftBound;
k=x2>rightBound;
x2(:,k)=rightBound;
elseif x1Error>1000 && x1Error<=10000%在解空間上移動20格以下
x2=x1+round((-0.5+rand(x1Group,x1N))*40)*distance;
k=x2<leftBound;
x2(:,k)=leftBound;
k=x2>rightBound;
x2(:,k)=rightBound;
elseif x1Error>10000%在解空間上移動30格以下
x2=x1+round((-0.5+rand(x1Group,x1N))*60)*distance;
k=x2<leftBound;
x2(:,k)=leftBound;
k=x2>rightBound;
x2(:,k)=rightBound;
end
if x1==x2
x2=round((-0.5+rand(x1Group,x1N))*20);
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -