第04章MATLAB程序设计例题源程序Word文件下载.docx

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

第04章MATLAB程序设计例题源程序Word文件下载.docx

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

第04章MATLAB程序设计例题源程序Word文件下载.docx

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语句来实现:

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

ifx~=10

或用以下程序:

例4.4输入一个字符,若为大写字母,则输出其对应的小写字母;

若为小写字母,则输出其对应的大写字母;

若为数字字符则输出其对应的数值,若为其他字符则原样输出。

请输入一个字符'

'

s'

ifc>

='

A'

&

c<

Z'

disp(setstr(abs(c)+abs('

a'

)-abs('

)));

elseifc>

&

z'

disp(setstr(abs(c)-abs('

)+abs('

0'

9'

disp(abs(c)-abs('

));

disp(c);

例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;

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;

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)

例4.8已知

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

y=0;

n=100;

fori=1:

n

y=y+1/i/i;

在实际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);

x=x+h;

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

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

f0=f1;

s

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

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

程序如下:

x=a:

h:

b;

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

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

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;

disp(s'

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

sum=0;

n=0;

Enteranumber(endin0):

while(x~=0)

sum=sum+x;

n=n+1;

x=input('

if(n>

0)

sum

mean=sum/n

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

X=input('

EnterX:

E=zeros(size(X));

F=eye(size(X));

n=1;

whilenorm(F,1)>

E=E+F;

F=F*X/n;

E

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

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

forn=100:

200

ifrem(n,21)~=0

continue

break

例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

n=find(p~=0);

p(n)

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

m=input('

p=2:

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

p~=i);

p(n)=[];

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:

Pleaseinputx=:

y=input('

Pleaseinputy=:

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

rho

the

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

functionf=factor(n)

ifn<

=1

f=1;

f=factor(n-1)*n;

%递归调用求(n-1)!

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

+2!

+3!

+4!

+5!

5

s=s+factor(i);

例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'

Y=[];

%从一个空矩阵开始

l=n;

%X的元素个数

k=1+fix(l*rand);

%随机选择Y的下一个元素的位置

x=X(k);

%被选择的元素

Y=[Y,x];

%将X添加到Y中

X(k)=[];

%从X中删除x元素

l=l-1;

%更新X的元素个数

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

functionY=rndprm2(X)

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

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

RNDPRM2acceptsasinputsonlyvectors'

Y=X;

X(k)=[];

Z=rndprm2(X);

%将剩下的元素随机排列

Y=[Z,x];

%构造输出向量

例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;

命令文件mydemo.m:

x=[1:

3];

y=[1;

2;

examp(x)

examp(x,y'

examp(x,y,3)

例4.21全局变量应用示例。

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

functionf=wadd(x,y)

globalALPHABETA

f=ALPHA*x+BETA*y;

在命令窗口中输入:

ALPHA=1;

BETA=2;

s=wadd(1,2)

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

当前位置:首页 > 求职职场 > 社交礼仪

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

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