基于 MATLAB 实现对结构动力响应的几种算法的验证

基于 MATLAB 实现对结构动力响应的几种算法的验证
基于 MATLAB 实现对结构动力响应的几种算法的验证

基于 MATLAB 实现对结构动力响应的几种算法的验证

1. 算例

首先,本文给出一算例, 结构在外力谐振荷载 P (t ) = P 0 sin θt 作用下,分别利用理论解法,杜哈梅积分, Wilson-θ 法求出该结构的位移时程反应。其中:

m = 3.5×103 kg , P 0 = 1.0×104 N , k =1.3584515×107 ,ξ=0.05 ,θ=52.3s ?1 ,ω=62.3s ?1 ,

?

D ω= ω 1-ξ2

=62.222 ,初始位移、速度v (0) = 0 ,v (0) = 0 ;

2. 算法验证

2.1 理论解法

运动方程为: mv+cv+kv=0P sin t ?由线性代数解出其理论解为:

]cos 2)sin -[(]

4)-[(t]

sin )

-(2cos [2]

4)-[(t]

sin )

0()0(cos )0([2

2222222022222

2

2

2

22

t t m P t m P e

v v t v e v D D

D t

D D

D t θξωθθθωθωξθωωωθωωξωξωθωξθωθωωξωωξωξω-++-+

?++++=--

由于初始位移v(0) =0 ,v(0) =0 ;则:

]cos 2)sin -[(]

4)-[(t]

sin )

-(2cos [2]

4)-[(222

222220

22222222220

t t m P t m P e v D D

D t

θξωθθθωθωξθωωωθωωξωξωθωξθωθξω-++

-+

?+=-

v(t ) =-3.115t

e

? 1.05269898×410-?[6.230cos62.222t ?18.106sin 62.222t]

+2.012808757 6

10-??[1146sin 52.3t ?325.829cos52.3t]

可以用 MA TLAB 进行编程分析,画图位移时程图,详细程序见附录。

2.2Wilson-θ法

Wilson-θ法是Wilson 于1966年基于线性加速度法的基础上提出一种无条件收敛的计算方法。该方法假定在θt ?时程步长内,体系的加速度反应按线性变化。对于地震持续时间内

的每一个微小时 段t ? ,从第一时段开始到最后一个时段,逐一的重复以下计算步骤,即得到结构地震反应的全过程。下面以第i+1时段(时刻时刻到1+i i t t )为例:

{}{}[]{}

[][][][]

{}

[]{}[]{}{}[]{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}

{}{}{}{}{}{}{}[][]{}[][]{}附录。

移时程图,详细程序见进行编程分析,画图位可以用;时刻的相对加速度反应,求得第代入结构运动微分方程和最后将和速度增量移反应时刻的各质点的相对位得到第,和速度增量,分别加上位移增量时刻的地震反应为基础再以各质点在第;和速度增量内位移增量正常时段再求解第;内的加速度增量正常时段计算出第先利用位移增量的加长时段内各质点的计算MATLAB x x

C x

x x x x x x x

x x x x

x x x t x

t x t x t x x

x

t x x x i x

x

x x

x x x

x C x x x

P C K P K x x i i g i i i i i i i i i i i i i i i i i i i i i g i

i

i )(-t )5(t )4(6

31)(2t 1)3()2

(6

t 1i )2()2

3()36

(136;

t )1(1i 1

1i 1

1i 1i 11i 1i 1i 11i 1i 112

21

2

2

2

1

1

,+-+-+++++++++++++*

*

*

-*K M +M +=?+=?+=???+?+?=?+?=????+--?=???+?+++M +?M -=?+M +K =?=???=+ ττ

τ

ττθτ

τ

τ

ττθττττ

ττ

τ

2.3 杜哈梅积分

杜哈梅积分在考虑阻尼的情况是:

ττωτωωωξωωτξωξωd t p e m v v t v e v D t

t D

D D

D t )(sin )(1t]sin )

0()0(cos )0([0

)(-+

++

=?

---

可以用 MA TLAB 进行编程分析,画图位移时程图,详细程序见附录。

3. 位移时程反应对比分析

利用MATLAB将理论解法,杜哈梅积分,Wilson-θ法求解出来的位移时程反应画在同一张图中,进行比较分析。

从图中可以看出,以上三种方法得出来的位移时程曲线基本吻合,误差基本保持在5%以内,所以以上几种方法在求解相关问题上都具有一定的作用效力。

4.结论

本文通过一个简单的单自由度系统动力分析算例(仅作位移分析,其它分析雷同),基于MATLAB,将理论解法,杜哈梅积分法,逐步积分法(本文采用Wilson-θ法)进行相互验证,从最后的位移分析图对比上,可以很好的看出三种方法均能很好的彼此验证,从而说明了三种方法在相关问题上的作用效力。

附录:MA TLAB 源程序

%理论解,杜哈梅积分,Wilson-θ法程序clc;

clear

h1=figure(8);

set( h1, 'color','w')

%理论解法

t=0:0.01:1;

v=1.05269898*10^(-4)*exp(-3.115*t).*(6.230*cos (62.222*t)-18.106*sin(62.222*t))+2.012808757*1 0^(-6)*(1146*sin(52.3*t)-325.829*cos(52.3*t)); plot(t,v,'k')

hold on

%杜哈梅积分法

aa=1;%输入时间长度

bb=0.01;%输入精度

t=bb:bb:aa;

t1=t;

theta=52.3;%输入荷载频率

w=62.3;%输入自振频率

m=3500;%输入质量

p0=10000;%输入荷载幅值

p0=p0*ones(1,aa/bb);

p=p0.*sin(theta*t);%荷载函数

for i=1:(aa/bb)

for j=1:i

canshu1(j)=p(j)/(m*w)*bb*sin(w*(t(i)-t1(j)));%杜哈梅积分中的被积函数

end

y(i)=sum(canshu1);%%位移值

end

for i=1:aa/bb-1

v1(i)=(y(i+1)-y(i))/bb;%计算速度

end

for i=1:(aa/bb-2)

a(i)=(v1(i+1)-v1(i))/bb;%计算加速度

end

hold on

plot(t,y,'r')%画位移图

hold on

%Wilson-θ法

dt=0.01;

ct=1.4;

ndzh=100;

k=13584515;

c=21805;

t=0:dt:ndzh*dt;

ag=10000*sin(52.3*t);

ag1=ag(1:ndzh);

ag2=ag(2:ndzh+1);

agtao=ct*(ag2-ag1);

wyi1=0;

sdu1=0;

jsdu1=0;

wyimt=0;

sdumt=0;

jsdumt=0;

for i=1:ndzh

kxin=k+(3/(ct*dt))*c+(6/(ct*ct*dt*dt))*m;

%kxin为新的刚度

dpxin=-m*agtao(i)+m*(6/(ct*dt)*sdu1+3*jsdu1)+

c*(3*sdu1+ct*dt/2*jsdu1); %新的力增量

dxtao=kxin\dpxin;

dtjsdu=6*dxtao/(ct*(ct^2*dt^2))-6*sdu1/(ct*ct*dt)

-(3/ct)*jsdu1;

jsdu=jsdu1+dtjsdu;

dtsdu=(dt/2)*(jsdu+jsdu1);

sdu=sdu1+dtsdu;

dtwyi=dt*sdu1+(1/3)*dt^2*jsdu1+(dt^2/6)*jsdu;

wyi=wyi1+dtwyi;

jsdu=-m\(m*ag2(i)+c*sdu+k*wyi); % 调整加速度

wyi1=wyi;

sdu1=sdu;

jsdu1=jsdu;

wyimt=[wyimt wyi];

sdumt=[sdumt sdu];

jsdumt=[jsdumt jsdu];

end

plot(t,-wyimt/3000,'b');

hold off

legend('\fontsize{9}\fontname{ 黑体} 理论解','\fontsize{9}\fontname{黑体} 杜哈梅积分法','\fontsize{9}\fontname{黑体} wilson-{\theta}法')

%基于双线性滞回模型的单自由度体系的

地震能量分析程序

%质量57041kg,阻尼36612 N·s/m,初始刚度2350000N/m,刚度折减系数0.2,屈服位移0.01m,采用ELCENTRO波

%参数替换直接在下面修改,然后运行

clc

format long;

m=57041;%质量

ug=importdata('ELCENTRO.txt');%地震波txt 文件

ug=ug/100;

P=-m*ug;

num=size(P,1);

c=36612;%阻尼

k1=2350000;%初始刚度

k2=k1*0.2;

a=zeros(1,num);v=zeros(1,num);x=zeros(1,num);

%加速度速度位移

Ei=zeros(1,num);Ek=zeros(1,num);Ed=zeros(1,num);Eh=zeros(1,num);%输入能动能阻尼耗能滞回耗能

EI=zeros(1,num);EK=zeros(1,num);ED=zeros(1,num);EH=zeros(1,num);%累积的各种能量time=zeros(1,num);

a(1)=P(1)/m;

hfl=zeros(1,num);

h=0.02;%地震波采样间隔

Xy=0.01;%屈服位移

pxmax=0;

nxmax=0;

pd=0;%双线型滞回模型折线的标识,0表示弹性,1表示正向弹塑性,2表示反向弹性,-1表示反向弹塑性,-2表示正向弹性

for ii=1:num

if pd==0 %弹性阶段

k=k1;

if x(ii)>Xy

pd=1;

b=[(a(ii)-a(ii-1))/6/h a(ii-1)/2 v(ii-1)

x(ii-1)-Xy];% 拐点处理

d=roots(b);

for j=1:length(d)

if isreal(d(j))==1

dth=d(j);

end

end

hp=h-dth;

vp=v(ii-1)+a(ii-1)*dth+((a(ii)-a(ii-1))*dth^2/h/2);

ap=a(ii-1)+(a(ii)-a(ii-1))*dth/h;

pp=m*ap+c*vp+k1*Xy;

kd=k2+3*c/hp+6*m/hp/hp;

dtpd=P(ii+1)-pp+m*(6*vp/hp+3*ap)+c*(3*vp+hp*ap/2);

dtx=dtpd/kd;

dtv=3*dtx/hp-3*vp-hp*ap/2;

x(ii)=Xy+dtx;

v(ii)=vp+dtv;

dtf=k2*dtx;

hfl(ii)=k1*Xy+dtf;

a(ii)=(P(ii)-hfl(ii+1)-c*v(ii))/m;

elseif x(ii)<-Xy

pd=-1;

b=[(a(ii)-a(ii-1))/6/h a(ii-1)/2 v(ii-1)

x(ii-1)+Xy];% 拐点处理

d=roots(b);

for j=1:length(d)

if isreal(d(j))==1

dth=d(j);

end

end

hp=h-dth;

vp=v(ii-1)+a(ii-1)*dth+((a(ii)-a(ii-1))*dth^2/h/2);

ap=a(ii-1)+(a(ii)-a(ii-1))*dth/h;

pp=m*ap+c*vp-k1*Xy;

kd=k2+3*c/hp+6*m/hp/hp;

dtpd=P(ii+1)-pp+m*(6*vp/hp+3*ap)+c*(3*vp+hp*ap/2);

dtx=dtpd/kd;

dtv=3*dtx/hp-3*vp-hp*ap/2;

x(ii)=-Xy+dtx;

v(ii)=vp+dtv;

dtf=k2*dtx;

hfl(ii)=-k1*Xy+dtf;

a(ii)=(P(ii)-hfl(ii)-c*v(ii))/m;

end

end

i f pd==1 %正向弹塑性

k=k2;

if v(ii)<0

pd=2;

b=[(a(ii)-a(ii-1))/2/h

a(ii-1) v(ii-1)];% 拐点处理

d=roots(b);

for j=1:length(d)

if isreal(d(j))==1

dth=d(j);

end

end

hp=h-dth;

xp=x(ii-1)+v(ii-1)*dth+a(ii-1)*dth^2/2+(a(ii)-a(ii-1))*dth^3/h/6;

ap=a(ii-1)+(a(ii)-a(ii-1))*dth/h;

pp=m*ap+c*0+k1*Xy+k2*(xp-Xy);

kd=k1+3*c/hp+6*m/hp/hp;

dtpd=P(ii+1)-pp+m*(6*0/hp+3*ap)+c*(3*0+hp*ap/2);

dtx=dtpd/kd;

dtv=3*dtx/hp-3*0-hp*ap/2;

x(ii)=xp+dtx;

v(ii)=0+dtv;

dtf=k1*dtx;

hfl(ii)=k1*Xy+k2*(xp-Xy)+dtf;

a(ii)=(P(ii)-hfl(ii)-c*v(ii))/m;

pxmax=xp;

end

end

if pd==2 %反向弹性

k=k1;

if x(ii)>pxmax

pd=1;

b=[(a(ii)-a(ii-1))/6/h a(ii-1)/2 v(ii-1)

x(ii-1)-pxmax];% 拐点处理

d=roots(b);

for j=1:length(d)

if isreal(d(j))==1

dth=d(j);

end

end

hp=h-dth;

vp=v(ii-1)+a(ii-1)*dth+((a(ii)-a(ii-1))*dth^2/h/2);

ap=a(ii-1)+(a(ii)-a(ii-1))*dth/h;

pp=m*ap+c*vp+k1*Xy+k2*(pxmax-Xy);

kd=k2+3*c/hp+6*m/hp/hp;

dtpd=P(ii+1)-pp+m*(6*vp/hp+3*ap)+c*(3*vp+hp*ap/2);

dtx=dtpd/kd;

dtv=3*dtx/hp-3*vp-hp*ap/2;

x(ii)=pxmax+dtx;

v(ii)=vp+dtv;

dtf=k2*dtx;

hfl(ii)=k1*Xy+k2*(pxmax-Xy)+dtf;

a(ii)=(P(ii)-hfl(ii)-c*v(ii))/m;

elseif x(ii)<(pxmax-2*Xy)

pd=-1;

b=[(a(ii)-a(ii-1))/6/h a(ii-1)/2 v(ii-1)

x(ii-1)-pxmax+2*Xy];% 拐点处理

d=roots(b);

for j=1:length(d)

if isreal(d(j))==1

dth=d(j);

end

end

hp=h-dth;

vp=v(ii-1)+a(ii-1)*dth+((a(ii)-a(ii-1))*dth^2/h/2);

ap=a(ii-1)+(a(ii)-a(ii-1))*dth/h;

pp=m*ap+c*vp+(pxmax*k2-k1*Xy-k2*Xy);

kd=k2+3*c/hp+6*m/hp/hp;

dtpd=P(ii+1)-pp+m*(6*vp/hp+3*ap)+c*(3*vp+hp*ap/2);

dtx=dtpd/kd;

dtv=3*dtx/hp-3*vp-hp*ap/2;

x(ii)=pxmax-2*Xy+dtx;

v(ii)=vp+dtv;

dtf=k2*dtx;

hfl(ii)=pxmax*k2-k1*Xy-k2*Xy+dtf;

a(ii)=(P(ii)-hfl(ii)-c*v(ii))/m;

end

end

if pd==-1 %反向弹塑性

k=k2;

if v(ii)>0

pd=-2;

b=[(a(ii)-a(ii-1))/2/h a(ii-1)

v(ii-1)];% 拐点处理

d=roots(b);

for j=1:length(d)

if isreal(d(j))==1

dth=d(j);

end

end

hp=h-dth;

xp=x(ii-1)+v(ii-1)*dth+a(ii-1)*dth^2/2+(a(ii)-a(ii-1))*dth^3/h/6;

ap=a(ii-1)+(a(ii)-a(ii-1))*dth/h;

pp=m*ap+c*0-k1*Xy+k2*(xp+Xy);

kd=k1+3*c/hp+6*m/hp/hp;

dtpd=P(ii+1)-pp+m*(6*0/hp+3*ap)+c*(3*0+hp*ap/2);

dtx=dtpd/kd;

dtv=3*dtx/hp-3*0-hp*ap/2;

x(ii)=xp+dtx;

v(ii)=0+dtv;

dtf=k1*dtx;

hfl(ii)=-k1*Xy+k2*(xp+Xy)+dtf;

a(ii)=(P(ii)-hfl(ii)-c*v(ii))/m;

nxmax=x(ii);

end

end

if pd==-2 %正向弹性

k=k1;

if x(ii)

pd=-1;

b=[(a(ii)-a(ii-1))/6/h a(ii-1)/2 v(ii-1)

x(ii-1)-nxmax];% 拐点处理

d=roots(b);

for j=1:length(d)

if isreal(d(j))==1

dth=d(j);

end

end

hp=h-dth;

vp=v(ii-1)+a(ii-1)*dth+((a(ii)-a(ii-1))*dth^2/h/2);

ap=a(ii-1)+(a(ii)-a(ii-1))*dth/h;

pp=m*ap+c*vp-k1*Xy+k2*(nxmax+Xy);

kd=k2+3*c/hp+6*m/hp/hp;

dtpd=P(ii+1)-pp+m*(6*vp/hp+3*ap)+c*(3*vp+hp*ap/2);

dtx=dtpd/kd;

dtv=3*dtx/hp-3*vp-hp*ap/2;

x(ii)=nxmax+dtx;

v(ii)=vp+dtv;

dtf=k2*dtx;

hfl(ii)=-k1*Xy+k2*(nxmax+Xy)+dtf;

a(ii)=(P(ii)-hfl(ii)-c*v(ii))/m;

elseif x(ii)>(nxmax+2*Xy)

pd=1;

b=[(a(ii)-a(ii-1))/6/h a(ii-1)/2 v(ii-1)

x(ii-1)-nxmax-2*Xy];% 拐点处理

d=roots(b);

for j=1:length(d)

if isreal(d(j))==1

dth=d(j);

end

end

hp=h-dth;

vp=v(ii-1)+a(ii-1)*dth+((a(ii)-a(ii-1))*dth^2/h/2);

ap=a(ii-1)+(a(ii)-a(ii-1))*dth/h;

pp=m*ap+c*vp+(k1*Xy+nxmax*k2+Xy*k2);

kd=k2+3*c/hp+6*m/hp/hp;

dtpd=P(ii+1)-pp+m*(6*vp/hp+3*ap)+c*(3*vp+hp*ap/2);

dtx=dtpd/kd;

dtv=3*dtx/hp-3*vp-hp*ap/2;

x(ii)=nxmax+2*Xy+dtx;

v(ii)=vp+dtv;

dtf=k2*dtx;

hfl(ii)=k1*Xy+nxmax*k2+Xy*k2+dtf;

a(ii)=(P(ii)-hfl(ii)-c*v(ii))/m;

end

end

i f ii>=num

break;

end

kd=k+3*c/h+6*m/h/h;

dtpd=P(ii+1)-P(ii)+m*(6*v(ii)/h+3*a(ii))+c*(3*v(ii)+h*a(ii)/2);

dtx=dtpd/kd;

dtv=3*dtx/h-3*v(ii)-h*a(ii)/2;

x(ii+1)=x(ii)+dtx;

v(ii+1)=v(ii)+dtv;

dtf=k*dtx;

hfl(ii+1)=hfl(ii)+dtf;

a(ii+1)=(P(ii+1)-hfl(ii+1)-c*v(ii+1))/m;

Ei(ii+1)=-m*ug(ii+1)*v(ii+1)*h;

Ed(ii+1)=c*v(ii+1)^2*h;

Ek(ii+1)=m*a(ii+1)*v(ii+1)*h;

Eh(ii+1)=hfl(ii+1)*v(ii+1)*h;

for jj=1:num-1

EI(jj+1)=EI(jj)+Ei(jj+1);

ED(jj+1)=ED(jj)+Ed(jj+1);

EK(jj+1)=EK(jj)+Ek(jj+1);

EH(jj+1)=EH(jj)+Eh(jj+1);

end

end

for j=1:num

time(j)=h*(j-1);

end

fid=fopen('EL波弹塑性各种能.txt','wt'); %输出结果到EL波弹塑性各种能.txt fprintf(fid,'%g %g %g %g%g\n',[time;EI;ED;EH;EK]);

fclose(fid);

plot(time,EI);

hold on

plot(time,ED);

hold on

plot(time,EK);

hold on

plot(time,EH);

遗传算法MATLAB完整代码(不用工具箱)

遗传算法解决简单问题 %主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在区间[-2,2]上的最大值clc; clear all; close all; global BitLength global boundsbegin global boundsend bounds=[-2,2]; precision=0.0001; boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)'./precision)); popsize=50; %初始种群大小 Generationmax=12; %最大代数 pcrossover=0.90; %交配概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %计算适应度,返回适应度Fitvalue和累计概率cumsump [Fitvalue,cumsump]=fitnessfun(population); Generation=1; while Generation

基于遗传算法的matlab源代码

function youhuafun D=code; N=50;%Tunable maxgen=50;%Tunable crossrate=0.5;%Tunable muterate=0.08;%Tunable generation=1; num=length(D); fatherrand=randint(num,N,3); score=zeros(maxgen,N); while generation<=maxgen ind=randperm(N-2)+2;%随机配对交叉 A=fatherrand(:,ind(1:(N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); %多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; %%两点交叉 %for kk=1:(N-2)/2 %rndtmp=randint(1,1,num)+1; %tmp=A(1:rndtmp,kk); %A(1:rndtmp,kk)=B(1:rndtmp,kk); %B(1:rndtmp,kk)=tmp; %end fatherrand=[fatherrand(:,1:2),A,B]; %变异 rnd=rand(num,N); ind=rnd[m,n]=size(ind); tmp=randint(m,n,2)+1; tmp(:,1:2)=0; fatherrand=tmp+fatherrand; fatherrand=mod(fatherrand,3); %fatherrand(ind)=tmp; %评价、选择 scoreN=scorefun(fatherrand,D);%求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); for k=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(t mpind)]; if~any(difind) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1; end %score maxV=max(score,[],2); minV=11*300-maxV; plot(minV,'*');title('各代的目标函数值'); F4=D(:,4); FF4=F4-fatherrand(:,1); FF4=max(FF4,1); D(:,5)=FF4; save DData D function D=code load youhua.mat %properties F2and F3 F1=A(:,1); F2=A(:,2); F3=A(:,3); if(max(F2)>1450)||(min(F2)<=900) error('DATA property F2exceed it''s range (900,1450]') end %get group property F1of data,according to F2value F4=zeros(size(F1)); for ite=11:-1:1 index=find(F2<=900+ite*50); F4(index)=ite; end D=[F1,F2,F3,F4]; function ScoreN=scorefun(fatherrand,D) F3=D(:,3); F4=D(:,4); N=size(fatherrand,2); FF4=F4*ones(1,N); FF4rnd=FF4-fatherrand; FF4rnd=max(FF4rnd,1); ScoreN=ones(1,N)*300*11; %这里有待优化

王能超 计算方法——算法设计及MATLAB实现课后代码

第一章插值方法 1.1Lagrange插值 1.2逐步插值 1.3分段三次Hermite插值 1.4分段三次样条插值 第二章数值积分 2.1 Simpson公式 2.2 变步长梯形法 2.3 Romberg加速算法 2.4 三点Gauss公式 第三章常微分方程德差分方法 3.1 改进的Euler方法 3.2 四阶Runge-Kutta方法 3.3 二阶Adams预报校正系统 3.4 改进的四阶Adams预报校正系统 第四章方程求根 4.1 二分法 4.2 开方法 4.3 Newton下山法 4.4 快速弦截法 第五章线性方程组的迭代法 5.1 Jacobi迭代 5.2 Gauss-Seidel迭代 5.3 超松弛迭代 5.4 对称超松弛迭代 第六章线性方程组的直接法 6.1 追赶法 6.2 Cholesky方法 6.3 矩阵分解方法 6.4 Gauss列主元消去法

第一章插值方法 1.1Lagrange插值 计算Lagrange插值多项式在x=x0处的值. MATLAB文件:(文件名:Lagrange_eval.m)function [y0,N]= Lagrange_eval(X,Y,x0) %X,Y是已知插值点坐标 %x0是插值点 %y0是Lagrange插值多项式在x0处的值 %N是Lagrange插值函数的权系数 m=length(X); N=zeros(m,1); y0=0; for i=1:m N(i)=1; for j=1:m if j~=i; N(i)=N(i)*(x0-X(j))/(X(i)-X(j)); end end y0=y0+Y(i)*N(i); end 用法》X=[…];Y=[…]; 》x0= ; 》[y0,N]= Lagrange_eval(X,Y,x0) 1.2逐步插值 计算逐步插值多项式在x=x0处的值. MATLAB文件:(文件名:Neville_eval.m)function y0=Neville_eval(X,Y,x0) %X,Y是已知插值点坐标 %x0是插值点 %y0是Neville逐步插值多项式在x0处的值 m=length(X); P=zeros(m,1); P1=zeros(m,1); P=Y; for i=1:m P1=P; k=1; for j=i+1:m k=k+1;

0计算方法及MATLAB实现简明讲义课件PPS8-1欧拉龙格法

第8章 常微分方程初值问题数值解法 8.1 引言 8.2 欧拉方法 8.3 龙格-库塔方法 8.4 单步法的收敛性与稳定性 8.5 线性多步法

8.1 引 言 考虑一阶常微分方程的初值问题 00(,),[,],(). y f x y x a b y x y '=∈=(1.1) (1.2) 如果存在实数 ,使得 121212(,)(,).,R f x y f x y L y y y y -≤-?∈(1.3) 则称 关于 满足李普希茨(Lipschitz )条件, 称为 的李普希茨常数(简称Lips.常数). 0>L f y L f (参阅教材386页)

计算方法及MATLAB 实现 所谓数值解法,就是寻求解 在一系列离散节点 )(x y <<<<<+121n n x x x x 上的近似值 . ,,,,,121+n n y y y y 相邻两个节点的间距 称为步长. n n n x x h -=+1 如不特别说明,总是假定 为定数, ),2,1( ==i h h i 这时节点为 . ) ,2,1,0(0 =+=i nh x x n 初值问题(1.1),(1.2)的数值解法的基本特点是采取 “步进式”. 即求解过程顺着节点排列的次序一步一步地向前推进. 00(,),[,], (). y f x y x a b y x y '=∈=

描述这类算法,只要给出用已知信息 ,,,21--n n n y y y 计算 的递推公式. 1+n y 一类是计算 时只用到前一点的值 ,称为单步法. 1+n y n y 另一类是用到 前面 点的值 , 1+n y k 11,,,+--k n n n y y y 称为 步法. k 其次,要研究公式的局部截断误差和阶,数值解 与 精确解 的误差估计及收敛性,还有递推公式的计算 稳定性等问题. n y )(n x y 首先对方程 离散化,建立求数值解的递推 公式. ),(y x f y ='

遗传算法的原理及MATLAB程序实现

1 遗传算法的原理 1.1 遗传算法的基本思想 遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。 遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。 计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。这一过程循环执行,直到满足优化准则,最终产生问题的最优解。图1-1给出了遗传算法的基本过程。 1.2 遗传算法的特点 1.2.1 遗传算法的优点 遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点: 1. 遗传算法以控制变量的编码作为运算对象。传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。 2. 遗传算法具有内在的本质并行性。它的并行性表现在两个方面,一是遗传

用MATLAB实现结构可靠度计算.

用MATLAB实现结构可靠度计算 口徐华…朝泽刚‘u刘勇‘21 。 (【l】中国地质大学(武汉工程学院湖北?武汉430074; 12】河海大学土木工程学院江苏?南京210098 摘要:Matlab提供了各种矩阵的运算和操作,其中包含结构可靠度计算中常用的各种数值计算方法工具箱,本文从基本原理和相关算例分析两方面,阐述利用Matlab,编制了计算结构可靠度Matlab程.序,使得Matlab-语言在可靠度计算中得到应用。 关键词:结构可靠度Matlab软件最优化法 中图分类号:TP39文献标识码:A文章编号:1007-3973(200902-095-Ol 1结构可靠度的计算方法 当川概率描述结构的可靠性时,计算结构可靠度就是计算结构在规定时问内、规定条件F结构能够完成预定功能的概率。 从简单到复杂或精确稃度的不同,先后提出的可靠度计算方法有一次二阶矩方法、二次二阶矩方法、蒙特卡洛方法以及其他方法。一次■阶矩方法又分为。I-心点法和验算点法,其中验算点法足H前可靠度分析最常川的方法。 2最优化方法计算可靠度指标数学模型 由结构111n个任意分布的独立随机变量一,x:…以表示的结构极限状态方程为:Z=g(■.托…t=0,采用R-F将非正念变量当罱正态化,得到等效正态分布的均值o:和标准差虹及可靠度指标B,由可靠度指标B的几何意义知。o;辟

开始时验算点未知,把6看成极限状态曲面上点P(■,爿:---37,的函数,通过优化求解,找到B最小值。求解可靠皮指标aJ以归结为以下约束优化模型: rain睁喜t华,2 s.,.Z=g(工i,x2’,…,工:=0 如极限状态方栉巾某个变最(X。可用其他变量表示,则上述模型jfIJ‘转化为无约束优化模型: 。。B!:手f生丛r+阻:坚:坠:盐尘}二剐 t∞oY?’【叫,J 3用MATLAB实现结构可靠度计算 3.1Matlab简介 Matlab是++种功能强、效率高、便.丁.进行科学和工程计算的交互式软件包,汇集了人量数学、统计、科学和工程所需的函数,MATI.AB具有编程简甲直观、用户界mf友善、开放性强等特点。将MATLAB用于蒙特卡罗法的一个显著优点是它拥有功能强大的随机数发生器指令。 3.2算例 3.2.I例:已知非线形极限状态方程z=g(t r'H=567f r-0.5H2=0’f、r服从正态分布。IIf=0.6,o r=0.0786;la|_ 2.18,o r_0.0654;H服从对数正态分布。u H= 3218,O。 =0.984。f、r、H相互独立,求可靠度指标B及验算点(,,r’,H‘。 解:先将H当量正念化:h=ln H服从正态分布,且 ,‘-““了:等专虿’=,。49?口二-、『五ir面_。。3

遗传算法的MATLAB程序实例讲解学习

遗传算法的M A T L A B 程序实例

遗传算法的程序实例 如求下列函数的最大值 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函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

计算方法及其MATLAB实现第二章作业

作者:夏云木子 1、 >> syms re(x) re(y) re(z) >> input('计算相对误差:'),re(x)=10/1991,re(y)=0.0001/1.991,re(y)=0.0000001/0.0001991 所以可知re(y)最小,即y精度最高 2、 >> format short,A=sqrt(2) >> format short e,B=sqrt(2) >> format short g,C=sqrt(2)

>> format long,D=sqrt(2) >> format long e,E=sqrt(2) >> format long g,F=sqrt(2) >> format bank,H=sqrt(2) >> format hex,I=sqrt(2) >> format +,J=sqrt(2) >> format,K=sqrt(2)

3、 >> syms A >> A=[sqrt(3) exp(7);sin(5) log(4)];vpa(pi*A,6) 4、1/6251-1/6252=1/6251*6252 5、(1)1/(1+3x)-(1-x)/(1+x)=x*(3*x-1)/[(1+3*x)*(1+x)] (2) sqrt(x+1/x)-sqrt(x-1/x)=2/x/[sqrt(x-1/x)+sqrt(x+1/x)] (3) log10(x1)-log(x2)=log10(x1/x2) (4) [1-cos(2*x)]/x =x^2/factorial(2)-x^4/factorial(4)+x^6/factorial(6)-…

简单的遗传算法MATLAB实现

遗传算法是对达尔文生物进化理论的简单模拟,其遵循“适者生存”、“优胜略汰”的原理。遗传算法模拟一个人工种群的进化过程,并且通过选择、杂交以及变异等机制,种群经过若干代以后,总是达到最优(或近最优)的状态。 自从遗传算法被提出以来,其得到了广泛的应用,特别是在函数优化、生产调度、模式识别、神经网络、自适应控制等领域,遗传算法更是发挥了重大的作用,大大提高了问题求解的效率。遗传算法也是当前“软计算”领域的重要研究课题。 本文首先结合MATLAB对遗传算法实现过程进行详细的分析,然后通过1个实际的函数优化案例对其应用进行探讨。 1. 遗传算法实现过程 现实生活中很多问题都可以转换为函数优化问题,所以本文将以函数优化问题作为背景,对GA的实现过程进行探讨。大部分函数优化问题都可以写成求最大值或者最小值的形式,为了不是一般性,我们可以将所有求最优值的情况都转换成求最大值的形式,例如,求函数f(x)的最大值,

若是求函数f(x)的最小值,可以将其转换成 g(x)=-f(x),然后求g(x)的最大值, 这里x可以是一个变量,也可是是一个由k个变量组成的向量,x=(x1, x2, …, x k)。每个x i,i=1,2,…,k, 其定义域为D i,D i=[a i, b i]。 一般规定f(x)在其定义域内只取正值,若不满足,可以将其转换成以下形式, 其中C是一个正常数。 1.1 编码与解码 要实现遗传算法首先需要弄清楚如何对求解问题进行编码和解码。对于函数优化问题,一般来说,有两种编码方式,一是实数编码,一是二进制编码,两者各有优缺点,二进制编码具有稳定性高、种群多样性大等优点,但是需要的存储空间大,需要解码过程并且难以理解;而实数编码直接用实数表示基因,容易理解并且不要解码过程,但是容易过早收敛,从而陷入局部最优。本文以最常用的二进制编码为例,说明遗传编码的过程。

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)

层次分析法计算权重在matlab中的实现

信息系统分析与设计作业 层次分析法确定绩效评价权重在matlab中的实现 小组成员:孙高茹、王靖、李春梅、郭荣1 程序简要概述 编写程序一步实现评价指标特征值lam、特征向量w以及一致性比率CR的求解。 具体的操作步骤是:首先构造评价指标,用专家评定法对指标两两打分,构建比较矩阵,继而运用编写程序实现层次分析法在MATLAB中的应用。 通过编写MATLAB程序一步实现问题求解,可以简化权重计算方法与步骤,减少工作量,从而提高人力资源管理中绩效考核的科学化电算化。 2 程序在matlab中实现的具体步骤 function [w,lam,CR] = ccfx(A) %A为成对比较矩阵,返回值w为近似特征向量 % lam为近似最大特征值λmax,CR为一致性比率 n=length(A(:,1)); a=sum(A); B=A %用B代替A做计算 for j=1:n %将A的列向量归一化 B(:,j)=B(:,j)./a(j); end s=B(:,1); for j=2:n s=s+B(:,j); end c=sum(s);%计算近似最大特征值λmax w=s./c; d=A*w lam=1/n*sum((d./w)); CI=(lam-n)/(n-1);%一致性指标 RI=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51];%RI为随机一致

性指标 CR=CI/RI(n);%求一致性比率 if CR>0.1 disp('没有通过一致性检验'); else disp('通过一致性检验'); end end 3 案例应用 我们拟构建公司员工绩效评价分析权重,完整操作步骤如下: 3.1构建的评价指标体系 我们将影响员工绩效评定的指标因素分为:打卡、业绩、创新、态度与品德。 3.2专家打分,构建两两比较矩阵 A = 1.0000 0.5000 3.0000 4.0000 2.0000 1.0000 5.0000 3.0000 0.3333 0.2000 1.0000 2.0000 0.2500 0.3333 0.5000 1.0000 3.3在MATLAB中运用编写好的程序实现 直接在MATLAB命令窗口中输入 [w,lam,CR]=ccfx(A) 继而直接得出 d = 1.3035 2.0000 0.5145 0.3926 w = 0.3102 0.4691 0.1242 0.0966 lam =4.1687

使用MATLAB遗传算法工具实例(详细) (1)【精品毕业设计】(完整版)

最新发布的MA TLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。 本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。 8.1 遗传算法与直接搜索工具箱概述 本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。 8.1.1 工具箱的特点 GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MA TLAB数值计算环境的性能。遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。 使用语句 type function_name 就可以看到这些函数的MATLAB代码。我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。 工具箱函数可以通过图形界面或MA TLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。 遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。 遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。 8.1.1.1 功能特点 遗传算法与直接搜索工具箱的功能特点如下: 图形用户界面和命令行函数可用来快速地描述问题、设置算法选项以及监控进程。 具有多个选项的遗传算法工具可用于问题创建、适应度计算、选择、交叉和变异。 直接搜索工具实现了一种模式搜索方法,其选项可用于定义网格尺寸、表决方法和搜索方法。 遗传算法与直接搜索工具箱函数可与MATLAB的优化工具箱或其他的MATLAB程序结合使用。 支持自动的M代码生成。 8.1.1.2 图形用户界面和命令行函数 遗传算法工具函数可以通过命令行和图形用户界面来使用遗传算法。直接搜索工具函数也可以通过命令行和图形用户界面来进行访问。图形用户界面可用来快速地定义问题、设置算法选项、对优化问题进行详细定义。 133

计算方法及其MATLAB实现第一章作业

计算方法作业(作者:夏云木子) 1、help linspace type linspace 2、a1=[5 12 47;13 41 2;9 6 71];a2=[12 9;6 15;7 21];B=a1*a2, C=a1(:,1:2).*a2, D=a1.^2,

E=a1(:).^2 3、a1=[5 12 47;13 41 2;9 6 71];a2=[12 9;6 15;7 21];a1(4:5,1:3)=a2.';a1([4 5],:)=a1([5 4],:);b1=a1

c1=b1(4,1),c2=b1(5,3),D=b1(3:4,:)*a2 4、a1=[5 12 47;13 41 2;9 6 71]; E=eye(3,3); S = a1 + 5*a1' - E, S1=a1^3-rot90(a1)^2+6*E 5、a1=[5 12 47;13 41 2;9 6 71];s=5;A=s-a1,B=s*a1,C=s.*a1,D=s./a1,E=a1./s

6、c=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16];A=c^-4,B=(c^3)^-1,C=(3*c+5*c^-1)/5

7、a=[1 i 3;9i 2-i 8;7 4 8+i];A=a.' 8、abc=[-2.57 8.87;-0.57 3.2-5.5i];m1=sign(abc),m2=round(abc),m3=floor(abc) Sign为符号函数,round表示四舍五入取整,floor表示舍去小数部分取整

9、x=[1 4 3 2 0 8 10 5]';y=[8 0 0 4 2 1 9 11]';A=dot(x,y) 10、a=[3.82 5.71 9.62];b=[7.31 6.42 2.48];A=dot(a,b),B=cross(a,b) 11、P=[5 7 8 0 1];Pf=poly(P);Px=poly2str(Pf,'x') 12、P=[3 0 9 60 0 -90];K1=polyval(P,45),K2=polyval(P,-123),K3=polyval(P,579) 13、P1=[13 55 0 -17 9];P2=[63 0 26 -85 0 105];PP=conv(P1,P2);P1P2=poly2str(PP,'x'),[Q,r]=deconv(P2,P1)

(完整版)三个遗传算法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程序

function [x0,k]=bisect1(fun1,a,b,ep) if nargin<4 ep=1e-5; end fa=feval(fun1,a); fb=feval(fun1,b); if fa*fb>0 x0=[fa,fb]; k=0; return; end k=1; while abs(b-a)/2>ep x=(a+b)/2; fx=feval(fun1,x); if fx*fa<0 b=x; fb=fx; else a=x; fa=fx; k=k+1; end end x0=(a+b)/2; >> fun1=inline('x^3-x-1'); >> [x0,k]=bisect1(fun1,1.3,1.4,1e-4) x0 = 1.3247 k = 7 >> 简单迭代法 function [x0,k]=iterate1(fun1,x0,ep,N) if nargin<4 N=500; end if nargin<3 ep=1e-5; end x=x0; x0=x+2*ep;

while abs(x-x0)>ep & k> fun1=inline('(x+1)^(1/3)'); >> [x0,k]=iterate1(fun1,1.5) x0 = 1.3247 k = 7 >> fun1=inline('x^3-1'); >> [x0,k]=iterate1(fun1,1.5) x0 = Inf k = 9 >> Steffesen加速迭代(简单迭代法的加速)function [x0,k]=steffesen1(fun1,x0,ep,N) if nargin<4 N=500; end if nargin<3 ep=1e-5; end x=x0; x0=x+2*ep; k=0; while abs(x-x0)>ep & k

(完整word版)自己编写算法的功率谱密度的三种matlab实现方法

功率谱密度的三种matlab 实现方法 一:实验目的: (1)掌握三种算法的概念、应用及特点; (2)了解谱估计在信号分析中的作用; (3) 能够利用burg 法对信号作谱估计,对信号的特点加以分析。 二;实验内容: (1)简单说明三种方法的原理。 (2)用三种方法编写程序,在matlab 中实现。 (3)将计算结果表示成图形的形式,给出三种情况的功率谱图。 (4)比较三种方法的特性。 (5)写出自己的心得体会。 三:实验原理: 1.周期图法: 周期图法又称直接法。它是从随机信号x(n)中截取N 长的一段,把它视为能量有限x(n)真实功率谱)(jw x e S 的估计)(jw x e S 的抽样. 认为随机序列是广义平稳且各态遍历的,可以用其一个样本x(n)中的一段)(n x N 来估计该随机序列的功率谱。这当然必然带来误差。由于对)(n x N 采用DFT ,就默认)(n x N 在时域是周期的,以及)(k x N 在频域是周期的。这种方法把随机序列样本x(n)看成是截得一段)(n x N 的周期延拓,这也就是周期图法这个名字的来历。

2.相关法(间接法): 这种方法以相关函数为媒介来计算功率谱,所以又叫间接法。这种方法的具体步骤是: 第一步:从无限长随机序列x(n)中截取长度N 的有限长序列列 )(n x N 第二步:由N 长序列)(n x N 求(2M-1)点的自相关函数)(m R x ∧ 序列。 )()(1)(1 m n x n x N m R N n N N x += ∑-=∧ (2-1) 这里,m=-(M-1)…,-1,0,1…,M-1,M N ,)(m R x 是双边序列,但是由自相关函数的偶对称性式,只要求出m=0,。。。,M-1的傅里叶变换,另一半也就知道了。 第三步:由相关函数的傅式变换求功率谱。即 jwm M M m X jw x e m R e S ----=∧∧ ∑= )()(1) 1( 以上过程中经历了两次截断,一次是将x(n)截成N 长,称为加数据窗,一次是将x(n)截成(2M-1)长,称为加延迟窗。因此所得的功率谱仅是近似值,也叫谱估计,式中的)(jw x e S 代表估值。一般取M<

遗传算法MATLAB实现代码

%%以下代码可直接复制粘贴到m文档运行 clc; clear all; %输入数据 for i=1:4000 input(i,:)=10*rand(1,2)-5; output(i)=input(i,1)^2+input(i,2)^2; end output=output'; k = rand(1,4000); [m,n] = sort(k);%m是数值排序,n是对应的位置 %找出训练数据和预测数据 input_train = input(n(1:3900),:)'; output_train = output(n(1:3900),:)'; input_test = input(n(3901:4000),:)'; output_test = output(n(3901:4000),:)'; %%数据归一化 [gui_1_input,gui_1_inputs] = mapminmax(input_train);%gui_1_inputs是一个包含最大最小值等信息的结构体 [gui_1_output,gui_1_outputs] = mapminmax(output_train); %构建神经网络 net = newff(gui_1_input,gui_1_output,5); %5是隐含层节点数net.trainParam.epochs = 100;%训练次数 net.trainParam.lr = 0.1;%学习速率 net.trainParam.goal = 0.0000004;%训练目标最小误差 %%bp神经网络训练 net = train(net,gui_1_input,gui_1_output); %测试样本归一化 gui_1_input_test = mapminmax('apply',input_test,gui_1_inputs);%"apply"根据

相关文档
最新文档