用基于matlab里的svm算法预测

用基于matlab里的svm算法预测

?

时间点/天U U

1 -10.645 0.426

2 -10.647 0.422

3 -10.647 0.420

4 -10.648 0.430

5 -10.652 0.430

6 -10.671 0.430

7 -10.676 0.438

8 -10.676 0.440

9 -10.680 0.440

10 -10.688 0.443

11 -10.704 0.440

12 -10.712 0.441

13 -10.723 0.441

14 -10.730 0.441

15 -10.738 0.449

用基于matlab里的svm算法预测

要求:1.用前10个数据预测后面5个数据,预测值和实际值对比。

2.数据不一定是上面这些,后期可能会修改一下或者增加、减少数据。

3.数据做出excel表导入进去,方便后期修改数据。

?分别进行预测。

4.平均值U和纹波值U

思想方法:选择1~6点为第一次训练样本,对第7点进行预测,之后将第7点的实际测量值替代第1点,2~7 点构成6个训练样本,对第8点进行预测,依次类推完成4个时刻点的预测。

PID算法Matlab仿真程序和C程序

增量式PID控制算法Matlab仿真程序设一被控对象G(s)=50/(0.125s^2+7s),用增量式PID控制算法编写仿真程序(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-5,5],仿真曲线包括系统输出及误差曲线,并加上注释、图例)。程序如下clear all; close all; ts=0.001; sys=tf(50,[0.125,7, 0]); dsys=c2d(sys,ts,'z'); [num,den]=tfdata(dsys,'v'); u_1=0.0;u_2=0.0; y_1=0.0;y_2=0.0; x=[0,0,0]'; error_1=0; error_2=0; for k=1:1:1000 time(k)=k*ts; S=2; if S==1 kp=10;ki=0.1;kd=15; rin(k)=1; % Step Signal elseif S==2 kp=10;ki=0.1;kd=15; %Sin e Signal rin(k)=0.5*sin(2*pi*k*ts); end du(k)=kp*x(1)+kd*x(2)+ki*x(3); % PID Controller u(k)=u_1+du(k); %Restricting the output of controller if u(k)>=5 u(k)=5; end if u(k)<=-5 u(k)=-5; end %Linear model yout(k)=-den(2)*y_1-den(3)*y_2+nu m(2)*u_1+num(3)*u_2; error(k)=rin(k)-yout(k); %Return of parameters u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout(k); x(1)=error(k)-error_1; %C alculating P x(2)=error(k)-2*error_1+error_2; %Calculating D x(3)=error(k); %Calculating I error_2=error_1; error_1=error(k); end figure(1); plot(time,rin,'b',time,yout,'r'); xlabel('time(s)'),ylabel('rin,yout'); figure(2); plot(time,error,'r') xlabel('time(s)');ylabel('error'); 微分先行PID算法Matlab仿真程序%PID Controler with differential in advance clear all; close all; ts=20; sys=tf([1],[60,1],'inputdelay',80); dsys=c2d(sys,ts,'zoh'); [num,den]=tfdata(dsys,'v'); u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;

最短路径算法_matlab程序[1]

算法描述: 输入图G,源点v0,输出源点到各点的最短距离D 中间变量v0保存当前已经处理到的顶点集合,v1保存剩余的集合 1.初始化v1,D 2.计算v0到v1各点的最短距离,保存到D for each i in v0;D(j)=min[D(j),G(v0(1),i)+G(i,j)] ,where j in v1 3.将D中最小的那一项加入到v0,并且从v1删除这一项。 4.转到2,直到v0包含所有顶点。 %dijsk最短路径算法 clear,clc G=[ inf inf 10 inf 30 100; inf inf 5 inf inf inf; inf 5 inf 50 inf inf; inf inf inf inf inf 10; inf inf inf 20 inf 60; inf inf inf inf inf inf; ]; %邻接矩阵 N=size(G,1); %顶点数 v0=1; %源点 v1=ones(1,N); %除去原点后的集合 v1(v0)=0; %计算和源点最近的点 D=G(v0,:); while 1 D2=D; for i=1:N if v1(i)==0 D2(i)=inf; end end D2 [Dmin id]=min(D2); if isinf(Dmin),error,end v0=[v0 id] %将最近的点加入v0集合,并从v1集合中删除 v1(id)=0; if size(v0,2)==N,break;end %计算v0(1)到v1各点的最近距离 fprintf('计算v0(1)到v1各点的最近距离\n');v0,v1 id=0; for j=1:N %计算到j的最近距离 if v1(j)

最优化算法-Matlab程序

CG程序代码 function [x,y] = cg(A,b,x0) %%%%%%%%%%%%%%%%%CG算法%%%%%%%%%%%% r0 = A*x0-b; p0 = -r0; k = 0; r = r0; p = p0; x = x0; while r~=0 alpha = -r'*p/(p'*A*p); x = x+alpha*p; rold = r; r = rold+alpha*A*p; beta = r'*r/(rold'*rold); p = -r+beta*p; plot(k,norm(p),'.--'); hold on k = k+1; end y.funcount = k; y.fval = x'*A*x/2-b'*x;

function [x,y] = cg_FR(fun,dfun,x0) %%%%%%%%%%%%%%%CG_FR算法%%%%%%%%%%%%%%% error = 10^-5; f0 = feval(fun,x0); df0 = feval(dfun,x0); p0 = -df0; f = f0; df = df0; p = p0; x = x0; k = 0; while ((norm(df)>error)&&(k<1000)) f = feval(fun,x); [alpha,funcNk,exitflag] = lines(fun,0.01,0.15,0.85,6,f,df'*p,x,p);%%用线搜索找下降距离%% if exitflag == -1 disp('Break!!!'); break; end x = x+alpha*p; dfold = df; df = feval(dfun,x); beta = df'*df/(dfold'*dfold); p = -df+beta*p; plot(k,norm(df),'.--'); hold on k = k+1; end y.funcount = k; y.fval = feval(fun,x); y.error = norm(df);

MVDR算法matlab程序

clc clear all close all %% 常量定义 Freqs=1.6e9; %工作频率 c=3e8; %光速 lamda=c/Freqs; %波长 d=0.5*lamda; %单元间距 M=16; %天线阵元数 fs=2e6; %采样频率 pd=10; %快拍数 %% 模型建立 %--------------第一个干扰模型-------------------- thetaJ1=20*pi/180; %干扰方向 FreqJ1=5e5; %第一个干扰的频率 J1NR=sqrt(10^(60/10)); J1one=J1NR*exp(j*(2*pi*FreqJ1*(1:1:pd)/fs)); %1*pd %--------------第二个干扰模型-------------------- ThetaJ2=60*pi/180; %干扰方向 FreqJ2=6e5; %第二个干扰的频率 J2NR=sqrt(10^(60/10)); J2one=J2NR*exp(j*(2*pi*FreqJ2*(1:1:pd)/fs)); %1*pd %--------------信号模型-------------------- ThetaS=30*pi/180; FreqS=7e5; SNR=sqrt(10^(40/10)); Sone=SNR*exp(j*(2*pi*FreqS*(1:1:pd)/fs)); %1*pd %--------------空域处理------------------------- I1=zeros(M,1); I2=zeros(M,1); IS=zeros(M,1); for n=1:M I1(n)=exp(j*2*pi*(n-1)*d*sin(thetaJ1)/lamda); I2(n)=exp(j*2*pi*(n-1)*d*sin(ThetaJ2)/lamda); IS(n)=exp(j*2*pi*(n-1)*d*sin(ThetaS)/lamda); end J1=I1*J1one; J1=J1.'; J2=I2*J2one; J2=J2.'; %------------产生噪声------------------------- noise=sqrt(1/2)*randn(pd,M)+j*sqrt(1/2)*randn(pd,M);

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点 v 到源点v 1的最短距离, ,i j v v V ?∈,若 (,)i j v v E ?,记i v 到j v 的权ij w =∞。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在 1 i v +,使 1()min{()} i l v l v +=,v S ∈; ⑤ 1{} i S S v +=, 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果12 1n n v v v v -是从1v 到 n v 的最短路径,则 12 1 n v v v -也必然是从1v 到 1 n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元 素表示顶点i v 到j v 的权ij w ,若i v 到j v 无边,则realmax ij w =,其中realmax 是 MATLAB 常量,表示最大的实数+308)。 function re=Dijkstra(ma)

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

SSDA 算法的matlab程序

%SSDAò?×?′óμ???êy?a×??ò,?ù?è±èò?×?D?e?a×??ò?y£?μ?μ±?£°?óD??éùê±£?è??üμ?μ??yè·?¥??μ? %[FileName2,PathName2] = uigetfile('*.jpg'); %pic= imread(FileName2); %[FileName,PathName] = uigetfile('*.jpg'); %moban=imread(FileName); %pic = imread('D:\matching algorithm\matching\2.jpg');%%%%%%%%%%o?ê±12??pic =imread('D:\matching algorithm\matching\lena.jpg') %%%%%%%%%%o?ê±15?? pic=pic(:,:,1); rect_pic = [256 178 145 167] moban = imcrop(pic,rect_pic); moban=imnoise(moban,'gaussian',0.005); pic=im2double(pic); moban=im2double(moban); subplot(2,2,1); imshow(pic);%2 subplot(2,2,2); imshow(moban);%3 pic1=pic; [M,N]=size(pic); [m,n]=size(moban); d=zeros(M-m,N-n); times=zeros(M-m,N-n); Tnum=0; tic; for x=1:M-m for y=1:N-n Temp=0; num=0; for i=0:m-1 for j=0:n-1 Temp = Temp+abs(pic(i+x,j+y)-moban(i+1,j+1)); num=num+1; end if Temp>m Tnum=num; break end end d(x,y)=Temp/(m*n); times(x,y)=Tnum; end end %[min_d, icmin] = min(d(:)); [max_t, itmax] = max(times(:)); %[p,q] = ind2sub(size(d),icmin(1)); [p,q] = ind2sub(size(times),itmax(1)); toc; pic1(:,:)=255; %pic1(p:p+m,q:q+n)=pic(p:p+m,q:q+n); pic1(p:p+m-1,q:q+n-1)=moban(1:m,1:n); msgbox(num2str([p,q]), 'location'); subplot(2,2,3); imshow(pic1);%4

matlab图论程序算法大全

精心整理 图论算法matlab实现 求最小费用最大流算法的 MATLAB 程序代码如下: n=5;C=[0 15 16 0 0 0 0 0 13 14 for while for for(i=1:n)for(j=1:n)if(C(i,j)>0&f(i,j)==0)a(i,j)=b(i,j); elseif(C(i,j)>0&f(i,j)==C(i,j))a(j,i)=-b(i,j); elseif(C(i,j)>0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end;end;end for(i=2:n)p(i)=Inf;s(i)=i;end %用Ford 算法求最短路, 赋初值 for(k=1:n)pd=1; %求有向赋权图中vs 到vt 的最短路

for(i=2:n)for(j=1:n)if(p(i)>p(j)+a(j,i))p(i)=p(j)+a(j,i);s(i)=j;pd=0;end ;end;end if(pd)break;end;end %求最短路的Ford 算法结束 if(p(n)==Inf)break;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有 while if elseif if if pd=0; 值 t=n; if elseif if(s(t)==1)break;end %当t 的标号为vs 时, 终止调整过程 t=s(t);end if(pd)break;end%如果最大流量达到预定的流量值 wf=0; for(j=1:n)wf=wf+f(1,j);end;end %计算最大流量 zwf=0;for(i=1:n)for(j=1:n)zwf=zwf+b(i,j)*f(i,j);end;end%计算最小费用

MUSIC算法matlab程序

clear all close all derad = pi/180; % deg -> rad radeg = 180/pi; twpi = 2*pi; kelm = 8; % 阵列数量 dd = ; % space d=0:dd:(kelm-1)*dd; % iwave = 4; % number of DOA theta = [-60 -30 30 60]; % 角度 snr = 10; % input SNR (dB) n = 500; % A=exp(-j*twpi*d.'*sin(theta*derad));%%%% direction matrix S=randn(iwave,n); X=A*S; X1=awgn(X,snr,'measured');%在信号X中加入高斯白噪声,信噪比SNR,'measured'函数在加入噪声前测定信号强度 Rxx=X1*X1'/n; InvS=inv(Rxx); %%%% [EV,D]=eig(Rxx);%%%% [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。 EVA=diag(D)';%返回矩阵D的主对角线上的元素 [EVA,I]=sort(EVA);%其中I是一个大小等于size(EVA)的数组,其每一列是EVAA中列向量的元素相对应的置换位置记号。 EVA=fliplr(EVA);%将矩阵A的列绕垂直轴进行左右翻转,如果A是一个行向量,fliplr(A)将A中元素的顺序进行翻转。如果A是一个列向量,fliplr(A)还等于A。 EV=fliplr(EV(:,I)); % MUSIC for iang = 1:361 angle(iang)=(iang-181)/2; phim=derad*angle(iang); a=exp(-j*twpi*d*sin(phim)).'; L=iwave; En=EV(:,L+1:kelm); SP(iang)=(a'*a)/(a'*En*En'*a); end %画图 SP=abs(SP); SPmax=max(SP); SP=10*log10(SP/SPmax); h=plot(angle,SP); set(h,'Linewidth',2)

EM算法matlab程序

X=zeros(600,2); X(1:200,:) = normrnd(0,1,200,2); X(201:400,:) = normrnd(0,2,200,2); X(401:600,:) = normrnd(0,3,200,2); [W,M,V,L] = EM_GM(X,3,[],[],1,[]) 下面是程序源码: 打印帮助 function[W,M,V,L] = EM_GM(X,k,ltol,maxiter,pflag,Init) % [W,M,V,L] = EM_GM(X,k,ltol,maxiter,pflag,Init) % % EM algorithm for k multidimensional Gaussian mixture esti mation % % Inputs: % X(n,d) - input data, n=number of observations, d=dimension of variable % k - maximum number of Gaussian components allowed % ltol - percentage of the log likelihood difference between 2 iterations ([] for none) % maxiter - maximum number of iteration allowed ([] for none) % pflag - 1 for plotting GM for 1D or 2D cases only, 0 otherwise ([] for none) % Init - structure of initial W, M, V: Init.W, Init.M, Init.V ([] for none) % % Ouputs: % W(1,k) - estimated weights of GM % M(d,k) - estimated mean vectors of GM % V(d,d,k) - estimated covariance matrices of GM % L - log likelihood of estimates % % Written by % Patrick P. C. Tsui, % PAMI research group % Department of Electrical and Computer Engineering % University of Waterloo, % March, 2006 % %%%% Validate inputs %%%% ifnargin <= 1, disp('EM_GM must have at least 2 inputs: X,k!/n') return elseifnargin == 2, ltol = 0.1; maxiter = 1000; pflag = 0; Init = []; err_X = Verify_X(X); err_k = Verify_k(k); iferr_X | err_k,return;end elseifnargin == 3, maxiter = 1000; pflag = 0; Init = []; err_X = Verify_X(X); err_k = Verify_k(k);

遗传算法matlab程序

遗传算法matlab程序 编码 >> function ret=Code(lenchrom,bound) %本函数将变量编码成染色体,用于随机初始化一个种群 % lenchrom input : 染色体长度 % bound input : 变量的取值范围 % ret output: 染色体的编码值 flag=0; while flag==0 pick=rand(1,length(lenchrom)); ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick; %线性插值,编码结果以实数向量存入ret 中 flag=test(lenchrom,bound,ret); %检验染色体的可行性 end 交叉操作 function ret=Cross(pcross,lenchrom,chrom,sizepop,bound) %本函数完成交叉操作 % pcorss input : 交叉概率 % lenchrom input : 染色体的长度 % chrom input : 染色体群 % sizepop input : 种群规模 % ret output : 交叉后的染色体 for i=1:sizepop %每一轮for循环中,可能会进行一次交叉操作,染色体是随机选择的,交叉位置也是随机选择的,%但该轮for循环中是否进行交叉操作则由交叉概率决定(continue 控制) % 随机选择两个染色体进行交叉 pick=rand(1,2); while prod(pick)==0 pick=rand(1,2); end index=ceil(pick.*sizepop); % 交叉概率决定是否进行交叉 pick=rand; while pick==0 pick=rand; end if pick>pcross continue; end flag=0; while flag==0

matlab PCA算法程序

%calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5 a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm')); %imshow(a); b=a(1:112*92);%b是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右 b=double(b); allsamples=[allsamples;b];%allsamples是一个M*N矩阵,allsamples中每一行数据代表一张图片,其中M=200 end end samplemean=mean(allsamples);%平均图片,1×N for i=1:200xmean(i,:)=allsamples(i,:)-samplemean;%xmean是一个M×N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片” end; sigma=xmean*xmean';%M*M阶矩阵 [v d]=eig(sigma); d1=diag(d); [d2index]=sort(d1);%以升序排序 cols=size(v,2);%特征向量矩阵的列数 for i=1:cols vsort(:,i)=v(:,index(cols-i+1));%vsort是一个M*col(注:col一般等于M) 阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量dsort(i)=d1(index(cols-i+1));%dsort保存的是按降序排列的特征值,是一维行向量 end%完成降序排列 %以下选择90%的能量 dsum=sum(dsort); dsum_extract=0; p=0; while(dsum_extract/dsum<0.9) p=p+1; dsum_extract=sum(dsort(1:p)); end

遗传算法matlab实现源程序

附页: 一.遗传算法源程序: clc; clear; population; %评价目标函数值 for uim=1:popsize vector=population(uim,:); obj(uim)=hanshu(hromlength,vector,phen); end %obj %min(obj)

clear uim; objmin=min(obj); for sequ=1:popsize if obj(sequ)==objmin opti=population(sequ,:); end end clear sequ; fmax=22000; %== for gen=1:maxgen %选择操作 %将求最小值的函数转化为适应度函数 for indivi=1:popsize obj1(indivi)=1/obj(indivi); end clear indivi; %适应度函数累加总合 total=0; for indivi=1:popsize total=total+obj1(indivi); end clear indivi; %每条染色体被选中的几率

for indivi=1:popsize fitness1(indivi)=obj1(indivi)/total; end clear indivi; %各条染色体被选中的范围 for indivi=1:popsize fitness(indivi)=0; for j=1:indivi fitness(indivi)=fitness(indivi)+fitness1(j); end end clear j; fitness; %选择适应度高的个体 for ranseti=1:popsize ran=rand; while (ran>1||ran<0) ran=rand; end ran; if ran<=fitness(1) newpopulation(ranseti,:)=population(1,:); else for fet=2:popsize if (ran>fitness(fet-1))&&(ran<=fitness(fet))

DE算法 matlab程序

function DE(Gm,F0); %差分进化算法程序基本程序 %F是变异率 %Gm=1000; %最大迭代次数 Gm=10000; F0=0.8; Np=100; %种群规模 CR=0.9; %杂交参数 G=1;%初始化代数 N=10;%所求问题的维数 ge=zeros(1,Gm);%各代的最优值 bestx=zeros(Gm,N);%各代的最优解 %产生初始种群 %xmin=-10;xmax=100;%带负数的下界 xmin=-5.12;xmax=5.12; function y=f(XX); %y=sum(XX.^4-16*XX.^2+5*XX)/10+79.333; y=sum(XX.^2-10.*cos(2.*pi.*XX)+10); end X0=(xmax-xmin)*rand(Np,N)+xmin; X=X0; %%%%%%%%%%变异操作 X1new=zeros(Np,N);%初始化 X1_new=zeros(Np,N);%初始化 X1=zeros(Np,N);%初始化 value=zeros(1,Np); while G<=Gm for i=1:Np %产生j,k,p三个不同的数 a=1;b=Np; dx=randperm(b-a+1)+a-1; j=dx(1);k=dx(2);p=dx(3); if j==i j=dx(4); elseif k==i k=dx(4); elseif p==i p=dx(4);

end namd=exp(1-Gm/(Gm+1-G));%变异算子 F=F0*2.^namd; bon=X(p,:)+F*(X(j,:)-X(k,:)); if (bon>xmin)&(bonCR %利用二项分布来交叉 X1_new(i,:)=X(i,:); else X1_new(i,:)=X1new(i,:); end end %%%%%%%%%%%%%%%竞争操作 for i=1:Np if f(X1_new(i,:))

matlab 常用算法大全

Matlab 高级算法程序代码汇总 一、灰色预测模型matlab程序 % renkou1=renkou(:,1);%年末常住人口数 % renkou2=renkou(:,2);%户籍人口 % renkou3=renkou(:,3);%非户籍人口 % shjian=1979:2010; %以上数据自己给 x0=renkou2'; n=length(x0); lamda=x0(1:n-1)./x0(2:n) range=minmax(lamda) x1=cumsum(x0) for i=2:n z(i)=*(x1(i)+x1(i-1)); end B=[-z(2:n)',ones(n-1,1)]; Y=x0(2:n)'; u=B\Y x=dsolve('Dx+a*x=b','x(0)=x0'); x=subs(x,{'a','b','x0'},{u(1),u(2),x1(1)}); yuce1=subs(x,'t',[0:n-1]); digits(6),y=vpa(x) %为提高预测精度,先计算预测值,再显示微分方程的解yuce=[x0(1),diff(yuce1)] epsilon=x0-yuce %计算残差 delta=abs(epsilon./x0) %计算相对误差

rho=1-*u(1))/(1+*u(1))*lamda %计算级比偏差值 %以深圳人口数据得到预测模型及预测误差相关数据 lamda = Columns 1 through 8 Columns 9 through 16 Columns 17 through 24 Columns 25 through 31 range = x1 = +003 * Columns 1 through 8 Columns 9 through 16 Columns 17 through 24 Columns 25 through 32

遗传算法的MATLAB程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x)x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop);%求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

PDA算法Matlab程序

一、测试程序 %PDA-FA算法实现 %何友《雷达数据处理及应用》P116 %二维空间匀速直线运动,状态向量为X=[x,vx,y,vy] %x1=x0+vxT %y1=y0+vyT %仿真: %1、改变虚假量测数量nc:公式求取、手动设置 %2、改变量测噪声R=[r0;0r],即r %3、改变虚假量测位置q,偏离真实位置的程度 %4、关联概率计算 clc; clear; close all; %************************************************ %参数设置 %************************************************ I=eye(4); T=1;%采样间隔 simTime=100;%仿真步数 A=[1T00;0100;001T;0001];%实际模型:CV H=[1000;0010];%测量模型 Q=0;%实际过程噪声 G=[T^2/20;T0;0T^2/2;0T];%噪声加权矩阵 r=200; R=[r0;0r];%量测噪声 X0=[200;0;10000;-15];%初始状态 X(:,1)=X0; Vk=[sqrt(r)*randn;sqrt(r)*randn]; Zk(:,1)=H*X(:,1)+Vk; gama=16; lamda=0.0004; %************************************************ %量测生成 %************************************************ for i=2:1:simTime X(:,i)=A*X(:,i-1);%真实状态 Vk=[sqrt(r)*randn;sqrt(r)*randn]; Zk(:,i)=H*X(:,i)+Vk;%生成量测值 end %************************************************ %PDA初始化 %************************************************ Xk_PDA=[200;0;10100;-16];%初始状态、与实际值略有差别R11=r;R22=r;R12=0;R21=0; Pkk_PDA=[R11R11/T R12R12/T;

相关文档
最新文档