matlab程序大全答案

matlab程序大全答案
matlab程序大全答案

频率特性类题目

1 一个系统的开环传递函数为 ,试绘制其当K=5、30时系统的开环频率特性Nyquist 图,并判断系统的稳定性。

w=linspace(0.5,5,1000)*pi; sys1=zpk([],[0 -10 -2],100) sys2=zpk([],[0 -10 -2],600) figure(1)

nyquist(sys1,w)

title('system nyquist charts with k=5') figure(2)

nyquist(sys2,w)

title('system nyquist charts with k=30')

由图可知K=5时,开环Nyquist 曲线没有包围(-1,j0)点,所以系统稳定。

K=30时,开环Nyquist 曲线包围(-1,j0)点,所以系统不稳定。

2系统开环传递函数为 ,建立其零极点增益模型,

然后分别绘制当K=5、K=30时系统的开环频率特性Bode 图,并判断系统的稳定性。

sys1=zpk([],[0 -10 -2],100) sys2=zpk([],[0 -10 -2],600) figure(1)

[Gm1,Pm1,Wcg1,Wcp1]=margin(sys1) bode(sys1)

title('system bode charts with k=5'),grid figure(2)

[Gm2,Pm2,Wcg2,Wcp2]=margin(sys2) bode(sys2)

title('system bode charts with k=30'),grid 因为K=5时,Wcg>Wcp,所以系统稳定。

K=10时,Wcg

3 系统开环传递函数为 ,计算K=5和K=30时系统的幅值裕度与相位裕度。

sys1=zpk([],[0 -10 -2],100) sys2=zpk([],[0 -10 -2],600)

[Gm1,Pm1,Wcg1,Wcp1]=margin(sys1) [Gm2,Pm2,Wcg2,Wcp2]=margin(sys2)

4 已知某系统的闭环传递函数()s Φ如下,试用roots ()命令来判断系统的稳定性。

)

5.01)(1.01()(s s s k s G ++=)

5.01)(1.01()(s s s k

s G ++=)

5.01)(1.01()(s s s k

s G ++=

25432325

()24576

s s s s s s s s ++Φ=+++++

num=[0 0 0 3 2 5]; den=[1 2 4 5 7 6]; D=num+den; roots(D)

5 某单位负反馈系统的开环控制系统的传递函数为

2k (0.80.64)

()(0.05)(5)(40)

K s s G s s s s s ++=

+++ (1)绘制系统的根轨迹;

num=[1 0.8 0.64]; x=[0 -0.05 -5 -40]; den=poly(x); rlocus(num,den)

(2)当10K =时,绘制系统的Bode 图,判断系统的稳定性,并且求出幅值裕度和相角裕度。

num=[1 0.8 0.64]; x=[0 -0.05 -5 -40]; den=poly(x); sys=tf(num,den) bode(sys),grid

[Gm,Pm,Wcg,Wcp]=margin(sys)

6 已知系统的状态空间模型如下:

???=11x

???-31x + ??

????01u [1=y ]1x

(1)绘制系统的Bode 图和nyquist 图; (2)求系统的幅值裕度和相位裕度;

A=[1,-1;1,3];B=[1,0]'; C=[1,1];D=0;

w=linspace(0.5,5,1000)*pi; sys=ss(A,B,C,D)

figure(1),bode(sys),grid figure(2),nyquist(sys,w)

[Gm,Pm,Wcg,Wcp]=margin(sys)

7 已知单位负反馈系统的开环传递函数为

)

1(1

2

++s s s ,试绘制系统的单位阶跃响

应、开环Bode 图和Nyquist 曲线,并求系统的幅值裕度和相位裕度。

sys=zpk(-1,[0 0 -1],1)

sys1=feedback(sys,1,-1)

figure(3)

step(sys1)

figure(1)

bode(sys),grid

figure(2)

nyquist(sys),grid

[Gm,Pm,Wcg,Wcp]=margin(sys)

编写程序题

1 编写两个m文件,分别使用for和while循环语句计算200

3

1

k

k

=∑。

y=0;

for k=1:200

y=y+k^3;

end

y

y=0;k=1;

while k<=200

y=y+k^3;

k=k+1;

end

y

2 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数,编写M 文件,输出全部水仙花数。

for m=100:999

m1=fix(m/100);

m2=fix((m-100*m1)/10);

m3=fix(m-100*m1-10*m2);

if m==m1^3+m2^3+m3^3

disp(m)

end

end

3 编写M文件,实现以下功能:从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。

i=1;

x=[];

sum=0;

a=input('请输入任意一个数,输0回车结束');

while (a~=0)

x(i)=a;

i=i+1;

sum=sum+a;

mea=(sum/(i-1));

a=input('请输入任意一个数,输0回车结束');

end

sum

mea

4 编写M脚本文件,使得运行该文件后能求出[100,200]之间第一个能被21

整除的整数。

for i=100:200

if mod(i,21)==0

break

end

end

i

5 先编写一个函数文件,文件名为tran,使得该函数文件实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。然后编写脚本文件,文件名为main1,在脚本文件中实现如下功能:要求用户从键盘输入直角坐标X和Y,调用函数文件实现直角坐标到极坐标的转换,输出极坐标的值。

tran.m :

function [rho,theta]=tran(x,y)

rho=sqrt(x*x+y*y);

theta=atan(y/x);

main1.m :

x=input('Please input x=:')

y=input('Please input y=:')

[rho,theta]=tran(x,y);

rho

theta

6 猜数游戏。首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“You won”,同时退出游戏。用户最多可以猜7次。

x=fix(100*rand(1));

i=1

while i<=7

y=input('')

if x==y

disp('You won') break; elseif x>y

disp('Low') else disp('High') end i=i+1; end

7 编写M 脚本文件,分别使用for 和 while 循环语句计算∑==10

1

i i i sum 的值,并

且显示出sum 的结果。

sum=0;

for i=1:10 sum=sum+i^i; end sum sum=0; while i<=10 sum=sum+i^i; i=i+1; end sum

8 用筛选法求某自然数范围内的全部素数。素数是大于1,且除了1和它本身以外,不能被其他任何整数所整除的整数。用筛选法求素数的基本思想是:要找出2~m 之间的全部素数,首先在2~m 中划去2的倍数(不包括2),然后划去3的倍数(不包括3),由于4已被划去,再找5的倍数 (不包括5),…,直到再划去不超过的数的倍数,剩下的数都是素数。 function y=sushu(x) y=2:x; n=2:x; for j=2:x m=j*n;

y=setdiff(y,m); end

9 已知 ∑

=-=n

k k y 1

121

,当n=100时,求y 的值。 y=0;n=100;

for k=1:n

y=y+(1/(2*k-1)); k=k+1;

end y

10 利用for 循环计算1!+2!+3!+….. +20!的值。

sum=0; for i=1:20 y=1; for n=1:i y=y*n; end

sum=sum+y; end sum

11 用while 循环来实现求1+2+……+100的值。

y=0;n=1; while n<=100 y=y+n; n=n+1; end y

12 编一函数计算以下分段函数值。

2

32(0)21

(01)321(1)x

x x x x x x

≤≥ function y=f(x);

if x<0 y=x;

elseif x>=0&x<1 y=2*x^2+1;

else y=3*x^3+2*x^2+1; end

13 我国新税法规定:个体工商户的生产、经营所得和对企事业单位的承包经营、承租经营所得应缴纳的个人所得税为

全年收入中应缴纳所得税部分 税率/% (1) 不超过5000元的 5 (2) 超过5000元至10000元的部分 10 (3) 超过10000元至30000元的部分 20 (4) 超过30000元至50000元的部分 30 (5) 超过50000元的部分 35 试编程加以计算。

x=input('x=') if x<=5000 y=0.05*x;

elseif x>5000&x<=10000 y=0.1*x;

elseif x>10000&x<=30000

y=0.2*x;

elseif x>30000&x<=50000

y=0.3*x;

else y=0.35*x;

end

y

14 矩阵乘法运算要求两矩阵的维数相容,否则会出错。设两个矩阵为A=[1,2; 5,6]; B=[7,9;20,11];先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。

A=[1,2;5,6];B=[7,9;20,11];

try

C=A*B;

catch

C=A.*B;

end

C

15 编制M脚本文件,要求从键盘逐个输入数值(input),然后判断输入的数是大于0还是小于0,并输出提示(使用disp命令)是正数(positive one)还是负数(negative one),同时记录输入的正数、负数的个数。当输入0时,终止此M文件的运行(使用break命令);当输入第10个数字时,显示记录的正、负数个数并终止程序。

i=0;j=0;

for n=1:10

x=input('The num is:')

if x>0

i=i+1;

disp('positive one')

elseif x<0

j=j+1;

disp('negative one')

else break

end

end

i,j

16 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数,编写M 文件,输出全部水仙花数。

17 编写M文件,实现以下功能:从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。

sum=0;cnt=0;

x=input('x=')

while x~=0

sum=sum+x;

cnt=cnt+1;

x=input('x=') end if cnt>0

average=sum/cnt; end

sum,average

18 一数组的元素满足规则: a(1)=a(2)=1, a(3)=a(1)+a(2),

a(4)=a(2)+a(3),…依次类推,求该数组中第一个大于10000的元素。

a(1)=1;a(2)=1;i=1; while a(i)<=10000

a(i+2)=a(i+1)+a(i); i=i+1; end i a(i)

19 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price 来表示):

price<200 没有折扣 200≤price<500 3%折扣 500≤price<1000 5%折扣 1000≤price<2500 8%折扣 2500≤price<5000 10%折扣

5000≤price 14%折扣

请编写程序,使得当从计算机输入所售商品的打折前价格后,能输出其实际销售价格。

x=input('x=') if x<200 y=x;

elseif x>=200&x<500 y=0.97*x;

elseif x>=500&x<1000 y=0.95*x;

elseif x>=1000&x<2500 y=0.92*x;

elseif x>=2500&x<5000 y=0.9*x; else y=0.86*x; end y

20 编写M 脚本文件,分别使用for 和 while 循环语句计算∑==10

1i i i sum 的值,

并且显示出sum 的结果。

21 已知∑

=-

=

n

k k

y

1

1

2

1

,当n=100时,求y的值。

22编写函数文件使其实现如下功能:当在命令窗口输入数字后,根据输入参数的个数决定输出的结果;当没有参数输入时,显示“无输入参数”;当有一个参数时,则以该参数为边绘制正方形;当有两个参数时,则以两个参数为长和宽绘制矩形。

function y=H(varargin) % varargin 表示可变的参数

if nargin==0

disp('无输入参数')

elseif nargin==1

r=varargin{1};

rectangle('position',[0 0 r r]) %表示从(0,0)点开始画宽为R,高为R的矩形else nargin==2

r1=varargin{1};

r2=varargin{2};

rectangle('position',[0 0 r1 r2])

end

23 编制M脚本文件,要求从键盘逐个输入数值(input),然后判断输入的数是大于0还是小于0,并输出提示(使用disp命令)是正数(positive one)还是负数(negative one),同时记录输入的正数、负数的个数。当输入0时,终止此M文件的运行(使用break命令);当输入第10个数字时,显示记录的正、负数个数并终止程序。

i=0;j=0;

for x=1:10

n=input('')

if n<0

i=i+1;

disp('negative one')

elseif n>0

j=j+1;

disp('position one')

else break

end

end

i

j

24 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。

for m=1:500

s=0;

for k=1:m/2

if rem(m,k)==0 s=s+k; end end if m==s

disp(m) end end

25 今有多项式P1(x)=x^4-2x+1,P2(x)=x^2+4x-0.5,要求先求得P(x)=P1(x)+P2(x),然后计算xi=0.2*i 各点上的P(xi)(i=0,1,2,…,5)值。 A=[1 0 0 -2 1];B=[0 0 1 4 -0.5]; C=A+B i=0:5; xi=0.2*i;

y=polyval(C,xi)

26 试编一个m 程序,将一维数组x 中的N 个数按颠倒的次序重新存储。要求运行程序后,在命令窗口提示“请用[]输入一个一维数组;”,输入完毕后若回车,就能在输出窗口显示刚才所输入的数组的颠倒次序。(如N=5,原来x 为:

x=[ 1 3 5 7 9 ]

而经过颠倒处理后x 中数据的次序应该为: x=[ 9 7 5 3 1 ])

x=input('[请用输入一个一维数组:x=]') x1=fliplr(x)

输入数值的时候顺序为:[23 53 65]再回车

模型建立及转换题

1 某系统的传递函数为

2321.323

()0.5 1.21

s s G s s s s ++=+++

使用MATLAB 求出状态空间表达式和零极点模型。

num=[1.3 2 3];den=[1 0.5 1.2 1]; sys=tf(num,den) nsys=zpk(sys)

2 求出以下系统的传递函数

1

0101

2000

031u -????

????=-+????????-????

X X , []110y =X

A=[-1,0,1;1,-2,0;0,0,-3];B=[0,0,1]';C=[1 1 0];D=1;

sys=ss(A,B,C,D) nsys=tf(sys)

3 已知某系统的传递函数为:2

264220

122412)(2

3423+++++++=s s s s s s s s G ,试用MATLAB 语言求出该系统的传递函数模型、状态空间模型和零极点增益模型。

num=[12 24 12 20];den=[2 4 6 2 2]; sys=tf(num,den) sys1=zpk(sys) sys2=ss(sys)

4 已知双闭环调速系统电流环内的前向通道3个模块传递函数分别为:

试求串联连接的等效传递函数及其等效状态空间模型。

num1=[0.0128 1];den1=[0.04 0]; num2=[30];den2=[0.00167,1]; num3=[2.5];den3=[0.0128 1]; sys1=tf(num1,den1) sys2=tf(num2,den2) sys3=tf(num3,den3) sys=sys1*sys2*sys3 nsys=ss(sys)

5 已知两个环节的传递函数分别为:

试求两环节并联连接等效传递函数的num 与den 向量及等效的状态空间模型。 num1=[1];den1=[1 2];

num2=[2 1];den2=[1 1 2]; sys1=tf(num1,den1) sys2=tf(num2,den2) sys=sys1+sys2

[num,den]=tfdata(sys,'v') nsys=ss(sys)

6 将传递函数模型2

3)(2++=s s s

s G 转换为状态空间模型和零极点模型。

num=[1 0];den=[1 3 2]; sys=tf(num,den) sys1=zpk(sys) sys2=ss(sys)

7 系统方程为u y y y

y 616116=+++ ,求出其状态空间表达式,写出A 、B 、C 、D 阵,建立其MATLAB 状态空间模型,然后绘制其单位阶跃响应曲线。

A=[0 1 0;0 0 1;-16 -11 -6];B=[0 0 6]'; C=[1 0 0];D=0; sys=ss(A,B,C,D)

s s s G 04.010128.0)(1+=1

00167.030

)(2+=

s s G 10128.05.2)(3+=s s G 21)(1+=s s G 2

1

2)(2

2+++=s s s s G

step(sys)

8 设有一质量弹簧阻尼系统,如下图所示。F(t)为输入的外力,y(t)为质量块的

位移,弹簧的弹性系数为k ,阻尼器的阻尼系数为f 。系统的动态方程组为:

)()()()(t F t ky t y f t y

m =+?+ 求出其状态空间表达式,写出A 、B 、C 、D 阵,建立其MATLAB 状态空间模型,然后绘制其单位阶跃响应曲线(只要写出MATLAB 语句即可)。

A=[0 1;-k/m -f/m];B=[0 F(t)/m]; C=[1 0];D=0; sys=ss[A,B,C,D] step(sys)

9 对下图中所示系统进行建模、模型转换及仿真:

⑴ 用MATLAB 语言表示图示系统的模型,并给出传递函数、零极点和状态空间三种模型的具体表达。

num1=[1 0.5];den1=[1 0.1]; z=[];p=[0 -2 -10];k=[20];

sys1=tf(num1,den1) sys2=zpk(z,p,k) sys3=sys1*sys2

sys=feedback(sys3,1,-1) nsys1=tf(sys) nsys2=ss(sys)

⑵ 用MATLAB 语言画出系统单位阶跃响应的波形。

10 对图中所示的质量—弹簧—阻尼机械系统,系统的动力学方程为:

ku ky y c y m =++?

?

?,其中,m=5kg ,k=2N/m ,c=0.1N/m.s 1-,建立其MATLAB 状态空

间模型,写出A 、B 、C 、D 阵,然后绘制其单位阶跃响应曲线。

A=[0,1;-2/5,-0.1/5]; B=[0,2/5]'; C=[1,0]; D=0;

sys=ss(A,B,C,D)

step(sys)

y

k

11求下面系统在阶跃信号为0.11(t)时系统的响应。

204036820

234++++s s s s

并求系统性能指标:稳态值、上升时间、调节时间、超调量 num=[20];den=[1 8 36 40 20]; sys=tf(num,den)

final=polyval(num,0)/polyval(den,0) [y,t]=step(sys) [yp,k]=max(y) tp=t(k)

chaotiao=100*(yp-final)/final n=1;

while y(n)

risetime=t(n) i=length(t);

while (y(i)>0.98*final&y(i)<1.02*final) i=i-1; end ts=t(i)

step(0.1*sys)

12 已知系统传递函数01

.12.01

)(2

++=

s s G s

,绘制系统阶跃响应曲线;绘出离

散化系统阶跃响应曲线,采样周期s T s 3.0=。

num=[1];den=[1 0.2 1.01]; sys1=tf(num,den) sys2=tf(num,den,0.3) figure(1) step(sys1) figure(2) step(sys2)

数值计算类题目

1 求解以下线性代数方程:

123102211313121x x x ????????????=??????????????????

A=[1,0,2;1,1,3;3,1,2]; B=[2,1,1]'; X=inv(A)*B

2 已知矩阵

013=121542??????????A ,218=414332??

????

????

B 试分别求出A 阵和B 阵的秩、转置、行列式、逆矩阵以及特征值。

A=[0 1 3;1 2 1;5 4 2];B=[2 1 8;4 1 4;3 3 2];

A1=rank(A) B1=rank(B) A2=A.' B2=B.' A3=det(A) B3=det(B) A4=inv(A) B4=inv(B) A5=eig(A) B5=eig(B)

3 已知矩阵

013=121542??????????A ,218=414332??

????

????

B 在Command 窗口中分别求出2

C =A 、

D 矩阵为A 中每个元素平方组成的矩阵、

E 矩阵为A 阵乘以B 阵、

F 矩阵为A 阵和B 阵数组乘积(即:对应元素分别相

乘的积构成的矩阵)。

A=[0 1 3;1 2 1;5 4 2];B=[2 1 8;4 1 4;3 3 2]; C=A^2 D=A.^2 E=A*B F=A.*B

4 求复数矩阵13

57362

324

3i i i i i i +-+

??

=?

?++-??

C 的转置C1与共轭转置C2。 A=[1 5 7;6 3 4];B=[3 -1 3;2 2 -3];

C=A+B*i C1=C.' C2=C'

5 假设a 、b 、c 和d 的定义如下:

???=21a ???10; ???-=01

b

???12; ??

?

???=23c ; 5=d 分别写出下列表达式的运算结果。

(1) a*b (2) a*c (3) a.*d (4) a*d

ans = -1 2 -2 5 ans = 3 8 ans = 5 0

10 5 ans = 5 0

6 求解由下面四个方程组成的方程组。

5

22778638

232432143214214321=+-+=++-=++=++-x x x x x x x x x x x x x x x

A=[2 -3 1 2;1 3 0 1;1 -1 1 8;7 1 -2 2]; B=[8 6 7 5]'; C=inv(A)*B

7 求解由下面四个方程组成的方程组。

51

2279823317

232432143214214321=+-+=++-=++=++-x x x x x x x x x x x x x x x

A=[2 -3 1 2;1 3 0 1;1 -1 1 8;7 1 -2 2]; B=[17 23 9 51]'; C=inv(A)*B

8 已知某班的5名学生的三门课成绩列表如下:

学生序号 1 2 3 4 5 高等数学 78 89 64 73 68 外语 83 77 80 78 70 MATLAB 语言 82 91 78 82 68

试写出有关命令,先分别找出三门课的最高分及其学生序号;然后找出三门课总分的最高分及其学生序号。

A=[78 89 64 73 68;83 77 80 78 70;82 91 78 82 68]; [Y,L]=max(A,[],2) B=sum(A,1); [Y1,L1]=max(B)

SIMULINK 建模分析题

1 某一单位负反馈控制系统,其开环传递函数为

1

()(1)

G s s s =

+ 给它输入阶跃量为2的阶跃信号,试使用Simulink 构造其闭环仿真模型,并且绘制其响应曲线。然后将已经建立的闭环控制系统封装成一个子系统。

2 典型的直流电动机双闭环调速系统的结构图如图所示,编写MATLAB 程序(或利用SIMULINK 工具),画出系统的单位阶跃响应曲线。

3 双环调速的电流环系统的方框图模型为:

建立该系统的SIMULINK 模型,然后在单位阶跃输入信号作用下对系统进行仿真。根据仿真结果计算超调量、上升时间、调节时间、稳态误差。

4 利用sisotool 工具完成下面的题目: 系统开环传递函数为:

绘制当K=5、30时系统的Bode 图,并判断系统的稳定性;计算K=5、30时系统的幅值和相位裕度;绘制K=5、30时系统的Nyquist 图;绘制K=5、30时系统的Nichols 图。

5 已知二阶系统微分方程:.

0)1(2=+--y y y y

1)0(,0)0(==y

y 求在时间区间t=[0,20]内的微分方程的解。

Vf.m

)

5.01)(1.01()(s s s K

s G ++=

Function dy=vf(t,y)

Dy=zeros(2,1);

Dy(1)=y(2);

Dy(2)=(1-y(1)^2)*y(2)-y(1);

Main.m

[T,Y]=ode45(‘vf’,[0 20],[0,1]);%调用离散ode45产生离散点时间向量和解向量

Plot(T,Y(:,1),’r-’,T,Y(:,2),’b:’)

Legend(‘y1’,’y2’)

6具有死区非线性特性的控制系统方框图如题下图所示。试绘制当输入信号

A

t

At

+

=时系统响应曲线。

?

r?

t

)(t

)(t

)(1

t

A

)(1

=和)(1

r?

图形绘制题

1绘制z=sin(x)*cos(y)的三维网格和三维曲面图,x,y变化范围均为[0,2π]。 x=0:pi/100:2*pi;

y=0:pi/100:2*pi;

[X,Y]=meshgrid(x,y)

Z=sin(X).*cos(Y);

subplot(1,2,1),surf(X,Y,Z); %曲面图

subplot(1,2,2),mesh(X,Y,Z); %网线图

2用MATLAB语言绘制[-2π,2π]区间内sinθ、cosθ曲线,数据点间隔

0.1弧度。要求分上下两个子图分别绘制sinθ、cosθ,并且sinθ用红色、实

线,cosθ用兰色、虚线,对图形标题及横纵坐标轴进行标注(图形标题分别为sinθ、cosθ,横纵坐标轴分别为x,y)。

t=-2*pi:0.1:2*pi;

y1=sin(t);

y2=cos(t);

subplot(2,1,1),plot(t,y1,'r')

title('sin(t)'),xlabel('x'),ylabel('y')

subplot(2,1,2),plot(t,y2,'b:')

title('cos(t)'),xlabel('x'),ylabel('y')

3 在[0 2π]范围内绘制二维曲线图y=sin(x)*cos(5x)。x=0:pi/50:2*pi;

y=sin(x).*cos(5*x);

plot(x,y)

4 在[0 2π]范围内绘制二维曲线图。

y=|1000sin(4x)|+1

x=0:pi/50:2*pi;

y=abs(1000*sin(4*x))+1;

plot(x,y)

一个简单的Matlab_GUI编程实例

Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:如下图所示; 选择Blank GUI(Default) 2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下

图所示; 布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。 1. 2. 3.function edit1_Callback(hObject, eventdata, handles) 4.% hObject handle to edit1 (see GCBO) 5.% eventdata reserved - to be defined in a future version of MATLAB

6.% handles structure with handles and user data (see GUIDATA) 7.% Hints: get(hObject,'String') returns contents of edit1 as text 8.% str2double(get(hObject,'String')) returns contents of edit1 as a double 复制代码 然后在上面这段代码的下面插入如下代码: 1. 2.%以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字,则现实空白内容input = str2num(get(hObject,'String')); %检查输入是否为空. 如果为空,则默认显示为0if (isempty(input)) set(hObject,'String','0')endguidata(hObject, handles); 复制代码 这段代码使得输入被严格限制,我们不能试图输入一个非数字。 4.为edit2_Callback添加同样一段代码 5 现在我们为计算按钮添加代码来实现把数据1和数据2相加的目的。 用3中同样的方法在m文件中找到pushbutton1_Callback代码段 如下; 1.function pushbutton1_Callback(hObject, eventdata, handles) 2.% hObject handle to pushbutton1 (see GCBO) 3.% eventdata reserved - to be defined in a future version of MATLAB 4.% handles structure with handles and user data (see GUIDATA) 复制代码

图论算法及其MATLAB程序代码

图论算法及其MATLAB 程序代码 求赋权图G =(V ,E ,F )中任意两点间的最短路的Warshall-Floyd 算法: 设A =(a ij )n ×n 为赋权图G =(V ,E ,F )的矩阵,当v i v j ∈E 时a ij =F (v i v j ),否则取a ii =0,a ij =+∞(i ≠j ),d ij 表示从v i 到v j 点的距离,r ij 表示从v i 到v j 点的最短路中一个点的编号. ①赋初值.对所有i ,j ,d ij =a ij ,r ij =j .k =1.转向② ②更新d ij ,r ij .对所有i ,j ,若d ik +d k j <d ij ,则令d ij =d ik +d k j ,r ij =k ,转向③. ③终止判断.若d ii <0,则存在一条含有顶点v i 的负回路,终止;或者k =n 终止;否则令k =k +1,转向②. 最短路线可由r ij 得到. 例1求图6-4中任意两点间的最短路. 解:用Warshall-Floyd 算法,MATLAB 程序代码如下: n=8;A=[0281Inf Inf Inf Inf 206Inf 1Inf Inf Inf 8607512Inf 1Inf 70Inf Inf 9Inf Inf 15Inf 03Inf 8 Inf Inf 1Inf 3046 Inf Inf 29Inf 403 Inf Inf Inf Inf 8630];%MATLAB 中,Inf 表示∞ D=A;%赋初值 for (i=1:n)for (j=1:n)R(i,j)=j;end ;end %赋路径初值 for (k=1:n)for (i=1:n)for (j=1:n)if (D(i,k)+D(k,j)

MATLAB简单程序大全

MATLAB简单程序大全 求特征值特征向量 A=[2 3 4;1 5 9;8 5 2] det(A) A' rank(A) inv(A) rref(A) eig(A)%求特征值和特征向量 卫星运行问题 h=200,H=51000,R=6378; a=(h+H+2*R)/2; c=(H-h)/2; b=(a^2-c^2)^(1/2); e=c/a; f=sqrt(1-exp(2).*cos(t)^2); l=int(f,t,0,pi/2) L=4*a.*l 动态玫瑰线 n=3;N=10000; theta=2*pi*(0:N)/N; r=cos(n*theta); x=r.*cos(theta); y=r.*sin(theta); comet(x,y) 二重积分 syms x y f=x^2*sin(y); int(int(f,x,0,1),y,0,pi) ezmesh(f,[0,1,0,pi]) 函数画图 syms x;f=exp(-0.2*x)*sin(0.5*x); ezplot(f,[0,8*pi])

玫瑰线 theta=0:0.01:2*pi; r=cos(3*theta); polar(theta,r,'r') 求x^2+y^2=1和x^2+z^2=1所围成的体积 syms x y z R r=1; Z=sqrt(1-x^2); y0=Z; V=8*int(int(Z,y,0,y0),x,0,1) 求导数及图像 f='1/(5+4*cos(x))'; subplot(1,2,1);ezplot(f) f1=diff(f) subplot(1,2,2);ezplot(f1) 绕x轴旋转 t=(0:20)*pi/10; r=exp(-.2*t).*sin(.5*t); theta=t; x=t'*ones(size(t)); y=r'*cos(theta); z=r'*sin(theta); mesh(x,y,z) colormap([0 0 0]) 某年是否闰年 year=input('input year:='); n1=year/4; n2=year/100; n3=year/400; if n1==fix(n1)&n2~=fix(n2) disp('是闰年') elseif n1==fix(n1)&n3==fix(n3) disp('是闰年') else

matlab源代码实例

1.硬币模拟试验 源代码: clear; clc; head_count=0; p1_hist= [0]; p2_hist= [0]; n = 1000; p1 = 0.3; p2=0.03; head = figure(1); rand('seed',sum(100*clock)); fori = 1:n tmp = rand(1); if(tmp<= p1) head_count = head_count + 1; end p1_hist (i) = head_count /i; end figure(head); subplot(2,1,1); plot(p1_hist); grid on; hold on; xlabel('重复试验次数'); ylabel('正面向上的比率'); title('p=0.3试验次数N与正面向上比率的函数图'); head_count=0; fori = 1:n tmp = rand(1); if(tmp<= p2) head_count = head_count + 1; end p2_hist (i) = head_count /i; end figure(head); subplot(2,1,2); plot(p2_hist); grid on; hold on; xlabel('重复试验次数'); ylabel('正面向上的比率'); title('p=0.03试验次数N与正面向上比率的函数图'); 实验结果:

2.不同次数的随机试验均值方差比较 源代码: clear ; clc; close; rand('seed',sum(100*clock)); Titles = ['n=5时' 'n=20时' 'n=25时' 'n=50时' 'n=100时']; Titlestr = cellstr(Titles); X_n_bar=[0]; %the samples of the X_n_bar X_n=[0]; %the samples of X_n N=[5,10,25,50,100]; j=1; num_X_n = 100; num_X_n_bar = 100; h_X_n_bar = figure(1);

matlab简单编程21个题目及答案

1、设 ? ? ? ? ? ? + + = ) 1( sin 3 5.0 cos 2 x x x y ,把x=0~2π间分为101点,画出以x为横坐 标,y为纵坐标的曲线。 第一题的matlab源程序: ①考虑cos(x)为一个整体,然后乘以中括号里面的全部 x=0:2*pi/100:2*pi; %x的步长以及范围从0到2*pi y=cos(x).*(0.5+3*sin(x)./(1+x.^2)); %y的表达式 plot(x,y)%画出图形 图如下: ②考虑对整体求解cos,先求x乘以括号中的部分 x=0:2*pi/100:2*pi; %x的步长以及范围从0到2*pi y=cos(x.*(0.5+3*sin(x)./(1+x.^2))); %y的表达式 plot(x,y) %画出图形

图如下: 2、产生8×6阶的正态分布随机数矩阵R1, 求其各列的平均值和均方差。并求该矩阵全体数的平均值和均方差。 第二题的matlab源程序如下: R1=randn(8,6) %产生正态分布随机矩阵 R1 = 1.0933 -0.7697 1.5442 -0.1924 1.4193 0.2157 1.1093 0.3714 0.0859 0.8886 0.2916 -1.1658 -0.8637 -0.2256 -1.4916 -0.7648 0.1978 -1.1480 0.0774 1.1174 -0.7423 -1.4023 1.5877 0.1049 -1.2141 -1.0891 -1.0616 -1.4224 -0.8045 0.7223 -1.1135 0.0326 2.3505 0.4882 0.6966 2.5855 -0.0068 0.5525 -0.6156 -0.1774 0.8351 -0.6669 1.5326 1.1006 0.7481 -0.1961 -0.2437 0.1873 aver=(sum(R1(1:end,1:end)))./8 %产生各行的平均值 aver = 0.0768 0.1363 0.1022 -0.3473 0.4975 0.1044 a=std(R1(1:end,1:end)) %产生各行的均方差也就是标准差 a = 1.0819 0.8093 1.3456 0.8233 0.8079 1.2150 aver1=(sum(R1(:)))./48 %全体数的平均值 aver1 =

matlab经典编程例题

以下各题均要求编程实现,并将程序贴在题目下方。 1.从键盘输入任意个正整数,以0结束,输出那些正整数中的素数。 clc;clear; zzs(1)=input('请输入正整数:');k=1; n=0;%素数个数 while zzs(k)~=0 flag=0;%是否是素数,是则为1 for yz=2:sqrt(zzs(k))%因子从2至此数平方根 if mod(zzs(k),yz)==0 flag=1;break;%非素数跳出循环 end end if flag==0&zzs(k)>1%忽略0和1的素数 n=n+1;sus(n)=zzs(k); end k=k+1; zzs(k)=input('请输入正整数:'); end disp(['你共输入了' num2str(k-1) '个正整数。它们是:']) disp(zzs(1:k-1))%不显示最后一个数0 if n==0 disp('这些数中没有素数!')%无素数时显示 else disp('其中的素数是:') disp(sus) end 2.若某数等于其所有因子(不含这个数本身)的和,则称其为完全数。编程求10000以内所有的完全数。 clc;clear;

wq=[];%完全数赋空数组 for ii=2:10000 yz=[];%ii的因子赋空数组 for jj=2:ii/2 %从2到ii/2考察是否为ii的因子 if mod(ii,jj)==0 yz=[yz jj];%因子数组扩展,加上jj end end if ii==sum(yz)+1 wq=[wq ii];%完全数数组扩展,加上ii end end disp(['10000以内的完全数为:' num2str(wq)])%输出 3.下列这组数据是美国1900—2000年人口的近似值(单位:百万)。 (1)若. 2c + = y+ 与试编写程序计算出上式中的a、b、c; 的经验公式为 t at bt y (2)若.bt 的经验公式为 y= 与试编写程序计算出上式中的a、b; y ae t (3)在一个坐标系下,画出数表中的散点图(红色五角星),c + =2中 ax bx y+拟合曲线图(蓝色实心线),以及.bt y=(黑色点划线)。 ae (4)图形标注要求:无网格线,横标注“时间t”,纵标注“人口数(百万)”,图形标题“美国1900—2000年的人口数据”。 (5)程序中要有注释,将你的程序和作好的图粘贴到这里。 clf;clc;clear %清除图形窗、屏幕、工作空间 t=1900:10:2000; y=[76 92 106 123 132 151 179 203 227 250 281]; p1=polyfit(t,y,2);%二次多项式拟合

(图论)matlab模板程序

(图论)matlab模板程序

第一讲:图论模型 程序一:可达矩阵算法 %根据邻接矩阵A(有向图)求可达矩阵P(有向图) function P=dgraf(A) n=size(A,1); P=A; for i=2:n P=P+A^i; end P(P~=0)=1; %将不为0的元素变为1 P; 程序二:无向图关联矩阵和邻接矩阵互换算法F表示所给出的图的相应矩阵 W表示程序运行结束后的结果 f=0表示把邻接矩阵转换为关联矩阵 f=1表示把关联矩阵转换为邻接矩阵 %无向图的关联矩阵和邻接矩阵的相互转换 function W=incandadf(F,f) if f==0 %邻接矩阵转换为关联矩阵 m=sum(sum(F))/2; %计算图的边数 n=size(F,1); W=zeros(n,m); k=1; for i=1:n for j=i:n if F(i,j)~=0 W(i,k)=1; %给边的始点赋值为1 W(j,k)=1; %给边的终点赋值为1 k=k+1; end end end elseif f==1 %关联矩阵转换为邻接矩阵 m=size(F,2); n=size(F,1); W=zeros(n,n); for i=1:m a=find(F(:,i)~=0); W(a(1),a(2))=1; %存在边,则邻接矩阵的对应值为1 W(a(2),a(1))=1;

end else fprint('Please imput the right value of f'); end W; 程序三:有向图关联矩阵和邻接矩阵互换算法 %有向图的关联矩阵和邻接矩阵的转换 function W=mattransf(F,f) if f==0 %邻接矩阵转换为关联矩阵 m=sum(sum(F)); n=size(F,1); W=zeros(n,m); k=1; for i=1:n for j=i:n if F(i,j)~=0 %由i发出的边,有向边的始点 W(i,k)=1; %关联矩阵始点值为1 W(j,k)=-1; %关联矩阵终点值为-1 k=k+1; end end end elseif f==1 %关联矩阵转换为邻接矩阵 m=size(F,2); n=size(F,1); W=zeros(n,n); for i=1:m a=find(F(:,i)~=0); %有向边的两个顶点 if F(a(1),i)==1 W(a(1),a(2))=1; %有向边由a(1)指向a(2) else W(a(2),a(1))=1; %有向边由a(2)指向a(1) end end else fprint('Please imput the right value of f'); end W;

三个遗传算法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程序的三个案例

图论实验三个案例 单源最短路径问题 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 +=U , 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果121n n v v v v -L 是从1v 到 n v 的最 短路径,则 121 n v v v -L 也必然是从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) %用Dijkstra 算法求单源最短路径 %输入参量ma 是距离矩阵 %输出参量是一个三行n 列矩阵,每列表示顶点号及顶点到源的最短距离和前顶点 n=size(ma,1);%得到距离矩阵的维数 s=ones(1,n);s(1)=0;%标记集合S 和S 的补 r=zeros(3,n);r(1,:)=1:n;r(2,2:end)=realmax;%初始化 for i=2:n;%控制循环次数 mm=realmax; for j=find(s==0);%集合S 中的顶点 for k=find(s==1);%集合S 补中的顶点

Matlab简单实例学习

Matlab 程序代码 绘制y = 10e-1.5t sin( 7.75t ) 的函数图象 7.75 fv clear; t=0:0.02:10; f1=10/sqrt(7.75).*exp(-1.5*t); f2=sin(sqrt(7.75).*t); y=f1.*f2; plot(t,y,'-k',t,y,'ok'); xlabel('t');ylabel('y(t) ');title('函数图像') axis([-2 10 -0.5 2]) 拉氏变换 clear; clc; syms s t fs1 fs2 fs3 ft1 ft2 ft3; L=1,C=0.1,R=[1.5 3 5]; h1=1/(L*C*s^2+R(1)*C*s+1); h2=1/(L*C*s^2+R(2)*C*s+1); h3=1/(L*C*s^2+R(3)*C*s+1); fs1=h1*(1/s); fs2=h2*(1/s); fs3=h3*(1/s);

ft1=ilaplace(fs1,s,t); ft2=ilaplace(fs2,s,t); ft3=ilaplace(fs3,s,t); ezplot(t,ft1); hold on; ezplot(t,ft2); hold on; ezplot(t,ft3); 信号编码 对[1 1 0 1 1 1 0 1 0 0 1]进行编码。 clear; clc; c=[1 1 0 1 1 1 0 1 0 0 1] for i=1:length(c) if i==1 d1(i)=0;d2(i)=0; elseif i==2 d1(i)=c(i-1);d2(i)=c(i-1); elseif i==3 d1(i)=mod(c(i-1)+c(i-2),2); d2(i)=c(i-1); else d1(i)=mod(c(i-1)+c(i-2),2); d2(i)=mod(c(i-1)+c(i-3),2); end

数字信号处理实验全部程序MATLAB

实验一熟悉MATLAB环境 一、实验目的 (1)熟悉MATLAB的主要操作命令。 (2)学会简单的矩阵输入和数据读写。 (3)掌握简单的绘图命令。 (4)用MATLAB编程并学会创建函数。 (5)观察离散系统的频率响应。 二、实验内容 认真阅读本章附录,在MATLAB环境下重新做一遍附录中的例子,体会各条命令的含义。在熟悉了MATLAB基本命令的基础上,完成以下实验。 上机实验内容: (1)数组的加、减、乘、除和乘方运算。输入A=[1 2 3 4],B=[3 4 5 6],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B并用stem语句画出A、B、C、D、E、F、G。 实验程序: A=[1 2 3 4]; B=[3 4 5 6]; n=1:4; C=A+B;D=A-B;E=A.*B;F=A./B;G=A.^B; subplot(4,2,1);stem(n,A,'fill');xlabel ('时间序列n');ylabel('A'); subplot(4,2,2);stem(n,B,'fill');xlabel ('时间序列n ');ylabel('B'); subplot(4,2,3);stem(n,C,'fill');xlabel ('时间序列n ');ylabel('A+B'); subplot(4,2,4);stem(n,D,'fill');xlabel ('时间序列n ');ylabel('A-B'); subplot(4,2,5);stem(n,E,'fill');xlabel ('时间序列n ');ylabel('A.*B'); subplot(4,2,6);stem(n,F,'fill');xlabel ('时间序列n ');ylabel('A./B'); subplot(4,2,7);stem(n,G,'fill');xlabel ('时间序列n ');ylabel('A.^B'); 运行结果:

matlab程序设计实例

MATLAB 程序设计方法及若干程序实例 樊双喜 (河南大学数学与 信息科学学院开封475004) 摘要本文通过对 MATLAB 程序设计中的若干典型问题做简要的分析和总结,并在此基础上着重讨论了有关算法设计、程序的调试与测试、算法与程序的优化以及循环控制等方面的问题.还通过对一些程序实例做具体解析,来方便读者进行编程训练并掌握一些有关MATLAB 程序设计方面的基本概念、基本方法以及某些问题的处理技巧等.此外,在文章的最后还给出了几个常用数学方法的算法程序, 供读者参考使用.希望能对初学者进行 MATLAB 编程训练提供一些可供参考的材料,并起到一定的指导和激励作用,进而为MATLAB 编程入门打下好的基础. 关键字算法设计;程序调试与测试;程序优化;循环控制 1 算法与程序 1.1 算法与程序的关系算法被称为程序的灵魂,因此在介绍程序之前应先了 解什么是算法.所谓算 法就是对特定问题求解步骤的一种描述.对于一个较复杂的计算或是数据处理的问题,通常是先设计出在理论上可行的算法,即程序的操作步骤,然后再按照算法逐步翻译成相应的程序语言,即计算机可识别的语言. 所谓程序设计,就是使用在计算机上可执行的程序代码来有效的描述用于解决特定问题算法的过程.简单来说,程序就是指令的集合.结构化程序设计由于采用了模块分化与功能分解,自顶向下,即分而治之的方法,因而可将一个较复杂的问题分解为若干子问题,逐步求精.算法是操作的过程,而程序结构和程序流程则是算法的具体体现. 1.2MATLAB 语言的特点 MATLAB 语言简洁紧凑,使用方便灵活,库函数极其丰富,其语法规则与科技人员的思维和书写习惯相近,便于操作.MATLAB 程序书写形式自由,利用其丰富

图论与网络优化课程设计_Matlab实现

图论与网络优化课程设计 四种基本网络(NCN、ER、WS、BA) 的构造及其性质比较 摘要:网络科学中被广泛研究的基本网络主要有四种,即:规则网络之最近邻耦合网络(Nearest-neighbor coupled network),本文中简称NCN;ER随机网络G(N,p);WS小世界网络;BA无标度网络。本文着重研究这几种网络的构造算法程序。通过运用Matlab软件和NodeXL网络分析软件,计算各种规模下(例如不同节点数、不同重连概率或者连边概率)各自的网络属性(包括边数、度分布、平均路径长度、聚类系数),给出图、表和图示,并进行比较和分析。 关键字:最近邻耦合网络;ER随机网络;WS小世界网络;BA无标度网络;Matlab;NodeXL。

四种基本网络(NCN、ER、WS、BA) 的构造及其性质比较 1.概述 1.网络科学的概述 网络科学(Network Science)是专门研究复杂网络系统的定性和定量规律的一门崭新的交叉科学,研究涉及到复杂网络的各种拓扑结构及其性质,与动力学特性(或功能)之间相互关系,包括时空斑图的涌现、动力学同步及其产生机制,网络上各种动力学行为和信息的传播、预测(搜索)与控制,以及工程实际所需的网络设计原理及其应用研究,其交叉研究内容十分广泛而丰富。网络科学中被广泛研究的基本网络主要有四种,即:规则网络之最近邻耦合网络(Nearest-neighbor coupled network),本文中简称NCN;ER随机网络G(N,p);WS小世界网络;BA无标度网络。本文着重研究这几种网络的构造算法程序。计算各种规模下(例如不同节点数、不同重连概率或者连边概率)各自的网络属性(包括边数、度分布、平均路径长度、聚类系数),给出图、表和图示,并进行比较和分析。 2.最近邻耦合网络的概述 如果在一个网络中,每一个节点只和它周围的邻居节点相连,那么就称该网络为最近邻耦合网络。这是一个得到大量研究的稀疏的规则网络模型。 常见的一种具有周期边界条件的最近邻耦合网络包含围成一个环的N个节点,其中每K个邻居节点相连,这里K是一个偶数。这类网络的一个重要特征个节点都与它左右各/2 就是网络的拓扑结构是由节点之间的相对位置决定的,随着节点位置的变化网络拓扑结构也可能发生切换。 NCN的Matlab实现: %function b = ncn(N,K) %此函数生成一个有N个节点,每个节点与它左右各K/2个节点都相连的最近邻耦合网络 %返回结果b为该最近邻耦合网络对应的邻接矩阵 function b = ncn(N,K) b=zeros(N); for i = 1:N for j = (i+1):(i+K/2) if j<=N b(i,j)=1; b(j,i)=1; else b(i,j-N)=1;

Matlab简单实例学习

Matlab 程序代码 绘制 1.5 10sin(7.75)7.75 t y e t -= 的函数图象。 fv clear; t=0:0.02:10; f1=10/sqrt(7.75).*exp(-1.5*t); f2=sin(sqrt(7.75).*t); y=f1.*f2; plot(t,y,'-k',t,y,'ok'); xlabel('t');ylabel('y(t) ');title('函数图像') axis([-2 10 -0.5 2]) 拉氏变换 clear; clc; syms s t fs1 fs2 fs3 ft1 ft2 ft3; L=1,C=0.1,R=[1.5 3 5]; h1=1/(L*C*s^2+R(1)*C*s+1); h2=1/(L*C*s^2+R(2)*C*s+1);

h3=1/(L*C*s^2+R(3)*C*s+1); fs1=h1*(1/s); fs2=h2*(1/s); fs3=h3*(1/s); ft1=ilaplace(fs1,s,t); ft2=ilaplace(fs2,s,t); ft3=ilaplace(fs3,s,t); ezplot(t,ft1); hold on; ezplot(t,ft2); hold on; ezplot(t,ft3); 信号编码 对[1 1 0 1 1 1 0 1 0 0 1]进行编码。 clear; clc; c=[1 1 0 1 1 1 0 1 0 0 1] for i=1:length(c) if i==1 d1(i)=0;d2(i)=0; elseif i==2 d1(i)=c(i-1);d2(i)=c(i-1); elseif i==3

多目标优化实例和matlab程序

NSGA-II 算法实例 目前的多目标优化算法有很多,Kalyanmoy Deb 的带精英策略的快速非支配排序遗传算法(NSGA-II)无疑是其中应用最为广泛也是最为成功的一种。本文用的算法是MATLAB 自带的函数gamultiobj ,该函数是基于NSGA-II 改进的一种多目标优化算法。 一、数值例子 多目标优化问题 42422 11211122124224212212112 12min (,)10min (,)55..55 f x x x x x x x x x f x x x x x x x x x s t x =-++-=-++-≤≤??-≤≤?二、Matlab 文件 1.适应值函数m 文件: function y=f(x) y(1)=x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-x(1)^2*x(2)^2; y(2)=x(2)^4-x(1)^2*x(2)^2+x(1)^4+x(1)*x(2);2.调用gamultiobj 函数,及参数设置: clear clc fitnessfcn=@f; %适应度函数句柄nvars=2; %变量个数lb=[-5,-5]; %下限ub=[5,5]; %上限A=[];b=[];%线性不等式约束 Aeq=[];beq=[];%线性等式约束 options=gaoptimset('paretoFraction',0.3,'populationsize',100,'generations',200,'stallGenLimit',200,'TolFun',1e-100,'PlotFcns',@gaplotpareto); %最优个体系数paretoFraction 为0.3;种群大小populationsize 为100,最大进化代数generations 为200, %停止代数stallGenLimit 为200,适应度函数偏差TolFun 设为1e-100,函数gaplotpareto :绘制Pareto 前端 [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,options)

遗传算法的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实现Zoutendijk编程例子

22 212312132312min f (x)x 2x 3x x x 2x x x x 4x 6x =+++-+-- . 123123x 2x x 4 x ,x ,x 0++≤≥ 取初始点(1)T x (0,0,0)=,通过Matlab 编程实现求解过程。 公用函数如下: 1、function [f,x]=func %设置目标函数 syms x1 x2 x3; f=x1^2+2*x2^2+3*x3^2+x1*x2-2*x1*x3+x2*x3-4*x1-6*x2; x=[x1,x2,x3]; end 2、function f_val=fval(x0) %求目标函数值 x0=transpose(x0); [f,x]=func; f_val=subs(f,x,x0); end 3、function s=diff_val(x0) %求目标函数梯度 [f,x]=func; grad=jacobian(f,x); s=subs(grad,x,x0); end 4、function h=fmin(x0,d0,vmax) %求函数最小值 [f,x]=func; syms h ; a=x0+h*d0; f_val=inline(subs(f,x,a)); if vmax==inf min_h=fminbnd(f_val,0,10000); else min_h=fminbnd(f_val,0,vmax); end h=min_h; end Zoutendijk 方法主函数 function [X0,f_val]=zoutendijk(A,b,x0,Aeq,beq) %自定义函数diff_val(x0)作用是求所给函数在x0出的偏导数

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%计算最小费用

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

图论实验三个案例 单源最短路径问题 1.1 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 ?∈; ④ 存在1i v +,使1()min{()}i l v l v +=,v S ∈; ⑤ 1{}i S S v += ,1{}i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果121n n v v v v - 是从1v 到n v 的最短路径,则121n v v v - 也必然是从1v 到1n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元素表示顶点i v 到 j v 的权 ij w ,若i v 到 j v 无边,则 realmax ij w =,其中realmax 是 MATLAB 常量,表示最大的实数(1.7977e+308)。 function re=Dijkstra(ma)

相关文档
最新文档