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

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

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

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

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

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

第4章MATLAB程序设计

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

程序1:

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

clear;

a=1:

10;

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

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

a

b

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

程序2:

首先建立函数文件:

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)

例求一元二次方程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))]);

例计算分段函数:

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

例输入一个字符,假设为大写字母,那么输出其对应的小写字母;假设为小写字母,那么输出其对应的大写字母;假设为数字字符那么输出其对应的数值,假设为其他字符那么原样输出。

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

例某商场对顾客所购置的商品实行打折销售,标准如下(商品价格用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)%输出商品实际销售价格

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

先求两矩阵的乘积,假设出错,那么自动转去求两矩阵的点乘。

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%显示出错原因

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

输出全部水仙花数。

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

,当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)

例设

,求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)

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

s=0;

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

fork=a

s=s+k;

end

disp(s');

例从键盘输入假设干个数,当输入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

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

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矩阵指数函数求矩阵指数

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

forn=100:

200

ifrem(n,21)~=0

continue

end

break

end

n

例假设一个数等于它的各个真因子之和,那么称该数为完数,如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

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

函数文件如下:

function[s,p]=fcircle(r)

%CIRCLEcalculatetheareaandperimeterofacircleofradiir

%r圆半径

%s圆面积

%p圆周长

%2006年2月30日编

s=pi*r*r;

p=2*pi*r;

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

[s,p]=fcircle(10)

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

函数文件:

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

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

theta=atan(y/x);

调用的命令文件:

x=input('Pleaseinputx=:

');

y=input('Pleaseinputy=:

');

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

rho

the

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

functionf=factor(n)

ifn<=1

f=1;

else

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

end

在命令文件中调用函数文件求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

例nargin用法例如。

函数文件:

functionfout=charray(a,b,c)

ifnargin==1

fout=a;

elseifnargin==2

fout=a+b;

elseifnargin==3

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

end

命令文件:

x=[1:

3];

y=[1;2;3];

examp(x)

examp(x,y')

examp(x,y,3)

例全局变量应用例如。

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

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