第04章MATLAB程序设计例题源程序.docx

上传人:b****6 文档编号:6230091 上传时间:2023-01-04 格式:DOCX 页数:11 大小:29.97KB
下载 相关 举报
第04章MATLAB程序设计例题源程序.docx_第1页
第1页 / 共11页
第04章MATLAB程序设计例题源程序.docx_第2页
第2页 / 共11页
第04章MATLAB程序设计例题源程序.docx_第3页
第3页 / 共11页
第04章MATLAB程序设计例题源程序.docx_第4页
第4页 / 共11页
第04章MATLAB程序设计例题源程序.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

第04章MATLAB程序设计例题源程序.docx

《第04章MATLAB程序设计例题源程序.docx》由会员分享,可在线阅读,更多相关《第04章MATLAB程序设计例题源程序.docx(11页珍藏版)》请在冰豆网上搜索。

第04章MATLAB程序设计例题源程序.docx

第04章MATLAB程序设计例题源程序

第4章MATLAB程序设计

例4.1建立一个命令文件将变量a,b的值互换,然后运行该命令文件。

程序1:

首先建立命令文件并以文件名exch.m存盘:

clear;

a=1:

10;

b=[11,12,13,14;15,16,17,18];

c=a;a=b;b=c;

a

b

然后在MATLAB的命令窗口中输入exch,将会执行该命令文件。

程序2:

首先建立函数文件fexch.m:

function[a,b]=exch(a,b)

c=a;a=b;b=c;

然后在MATLAB的命令窗口调用该函数文件:

clear;

x=1:

10;

y=[11,12,13,14;15,16,17,18];

[x,y]=fexch(x,y)

例4.2求一元二次方程ax2+bx+c=0的根。

a=input('a=?

');

b=input('b=?

');

c=input('c=?

');

d=b*b-4*a*c;

x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];

disp(['x1=',num2str(x

(1)),',x2=',num2str(x

(2))]);

例4.3计算分段函数:

x=input('请输入x的值:

');

ifx==10

y=cos(x+1)+sqrt(x*x+1);

else

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

end

y

也可以用单分支if语句来实现:

x=input('请输入x的值:

');

y=cos(x+1)+sqrt(x*x+1);

ifx~=10

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

end

y

或用以下程序:

x=input('请输入x的值:

');

ifx==10

y=cos(x+1)+sqrt(x*x+1);

end

ifx~=10

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

end

y

例4.4输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。

c=input('请输入一个字符','s');

ifc>='A'&c<='Z'

disp(setstr(abs(c)+abs('a')-abs('A')));

elseifc>='a'&c<='z'

disp(setstr(abs(c)-abs('a')+abs('A')));

elseifc>='0'&c<='9'

disp(abs(c)-abs('0'));

else

disp(c);

end

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

price<200没有折扣

200≤price<5003%折扣

500≤price<10005%折扣

1000≤price<25008%折扣

2500≤price<500010%折扣

5000≤price14%折扣

输入所售商品的价格,求其实际销售价格。

price=input('请输入商品价格');

switchfix(price/100)

case{0,1}%价格小于200

rate=0;

case{2,3,4}%价格大于等于200但小于500

rate=3/100;

casenum2cell(5:

9)%价格大于等于500但小于1000

rate=5/100;

casenum2cell(10:

24)%价格大于等于1000但小于2500

rate=8/100;

casenum2cell(25:

49)%价格大于等于2500但小于5000

rate=10/100;

otherwise%价格大于等于5000

rate=14/100;

end

price=price*(1-rate)%输出商品实际销售价格

例4.6矩阵乘法运算要求两矩阵的维数相容,否则会出错。

先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。

A=[1,2,3;4,5,6];

B=[7,8,9;10,11,12];

try

C=A*B;

catch

C=A.*B;

end

C

lasterr%显示出错原因

例4.7一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。

输出全部水仙花数。

form=100:

999

m1=fix(m/100);%求m的百位数字

m2=rem(fix(m/10),10);%求m的十位数字

m3=rem(m,10);%求m的个位数字

ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3

disp(m)

end

end

例4.8已知

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

y=0;n=100;

fori=1:

n

y=y+1/i/i;

end

y

在实际MATLAB编程中,为提高程序的执行速度,常用向量运算来代替循环操作,所以上述程序通常由下面的程序来代替:

n=100;

i=1:

n;

f=1./i.^2;

y=sum(f)

例4.9设

,求s=

a=0;b=3*pi;

n=1000;h=(b-a)/n;

x=a;s=0;

f0=exp(-0.5*x)*sin(x+pi/6);

fori=1:

n

x=x+h;

f1=exp(-0.5*x)*sin(x+pi/6);

s=s+(f0+f1)*h/2;

f0=f1;

end

s

上述程序来源于传统的编程思想。

也可以利用向量运算,从而使得程序更加简洁,更赋有MATLAB的特点。

程序如下:

a=0;b=3*pi;

n=1000;h=(b-a)/n;

x=a:

h:

b;

f=exp(-0.5*x).*sin(x+pi/6);

fori=1:

n

s(i)=(f(i)+f(i+1))*h/2;

end

s=sum(s)

例4.10写出下列程序的执行结果。

s=0;

a=[12,13,14;15,16,17;18,19,20;21,22,23];

fork=a

s=s+k;

end

disp(s');

例4.11从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。

sum=0;

n=0;

x=input('Enteranumber(endin0):

');

while(x~=0)

sum=sum+x;

n=n+1;

x=input('Enteranumber(endin0):

');

end

if(n>0)

sum

mean=sum/n

end

例4.12根据矩阵指数的幂级数展开式求矩阵指数。

X=input('EnterX:

');

E=zeros(size(X));

F=eye(size(X));

n=1;

whilenorm(F,1)>0

E=E+F;

F=F*X/n;

n=n+1;

end

E

expm(X)%调用MATLAB矩阵指数函数求矩阵指数

例4.13求[100,200]之间第一个能被21整除的整数。

forn=100:

200

ifrem(n,21)~=0

continue

end

break

end

n

例4.14若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。

求[1,500]之间的全部完数。

例4.15用筛选法求某自然数范围内的全部素数。

m=input('m=');

p=1:

m;p

(1)=0;

fori=2:

sqrt(m)

forj=2*i:

i:

m

p(j)=0;

end

end

n=find(p~=0);

p(n)

关于在p中划去i的倍数(不包括i),可利用矩阵运算一步完成,从而得到更为简洁的程序:

m=input('m=');

p=2:

m;

fori=2:

sqrt(m)

n=find(rem(p,i)==0&p~=i);

p(n)=[];

end

p

例4.16编写函数文件求半径为r的圆的面积和周长。

函数文件如下:

function[s,p]=fcircle(r)

%CIRCLEcalculatetheareaandperimeterofacircleofradiir

%r圆半径

%s圆面积

%p圆周长

%2006年2月30日编

s=pi*r*r;

p=2*pi*r;

将以上函数文件以文件名fcircle.m存盘,然后在MATLAB命令窗口调用该函数:

[s,p]=fcircle(10)

例4.17利用函数文件,实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。

函数文件tran.m:

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

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

theta=atan(y/x);

调用tran.m的命令文件main1.m:

x=input('Pleaseinputx=:

');

y=input('Pleaseinputy=:

');

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

rho

the

例4.18利用函数的递归调用,求n!

functionf=factor(n)

ifn<=1

f=1;

else

f=factor(n-1)*n;%递归调用求(n-1)!

end

在命令文件main2.m中调用函数文件factor.m求s=1!

+2!

+3!

+4!

+5!

s=0;

fori=1:

5

s=s+factor(i);

end

s

例4.19任意排列问题。

MATLAB提供的函数randperm(n),可以产生一个从整数1到整数n的任意排列。

编写一个函数来实现randperm(n)函数的功能,即给出一个由任意数组成的行向量,然后产生这个行向量元素的任意排列。

functionY=rndprm1(X)

%RNDPRM1用for循环产生一个行向量的任意排列

%RNDPRM1(X)产生行向量X的任意排列

[m,n]=size(X);

ifm>1

error('RNDPRM1acceptsasinputsonlyvectors');

end

Y=[];%从一个空矩阵开始

l=n;%X的元素个数

fori=1:

n

k=1+fix(l*rand);%随机选择Y的下一个元素的位置

x=X(k);%被选择的元素

Y=[Y,x];%将X添加到Y中

X(k)=[];%从X中删除x元素

l=l-1;%更新X的元素个数

end

第二个程序用函数的递归调用:

functionY=rndprm2(X)

%RNDPRM2用递归调用产生一个行向量的任意排列

%RNDPRM2(X)产生一个X的任意排列

[m,n]=size(X);

l=n;

ifm>1

error('RNDPRM2acceptsasinputsonlyvectors')

end

ifn<=1

Y=X;

else

k=1+fix(l*rand);%随机选择Y的下一个元素的位置

x=X(k);%被选择的元素

X(k)=[];%从X中删除x元素

Z=rndprm2(X);%将剩下的元素随机排列

Y=[Z,x];%构造输出向量

l=l-1;

end

例4.20nargin用法示例。

函数文件examp.m:

functionfout=charray(a,b,c)

ifnargin==1

fout=a;

elseifnargin==2

fout=a+b;

elseifnargin==3

fout=(a*b*c)/2;

end

命令文件mydemo.m:

x=[1:

3];

y=[1;2;3];

examp(x)

examp(x,y')

examp(x,y,3)

例4.21全局变量应用示例。

先建立函数文件wadd.m,该函数将输入的参数加权相加。

functionf=wadd(x,y)

globalALPHABETA

f=ALPHA*x+BETA*y;

在命令窗口中输入:

globalALPHABETA

ALPHA=1;

BETA=2;

s=wadd(1,2)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1