matlab第2章练习及答案.docx

上传人:b****8 文档编号:9688301 上传时间:2023-05-20 格式:DOCX 页数:19 大小:61.53KB
下载 相关 举报
matlab第2章练习及答案.docx_第1页
第1页 / 共19页
matlab第2章练习及答案.docx_第2页
第2页 / 共19页
matlab第2章练习及答案.docx_第3页
第3页 / 共19页
matlab第2章练习及答案.docx_第4页
第4页 / 共19页
matlab第2章练习及答案.docx_第5页
第5页 / 共19页
matlab第2章练习及答案.docx_第6页
第6页 / 共19页
matlab第2章练习及答案.docx_第7页
第7页 / 共19页
matlab第2章练习及答案.docx_第8页
第8页 / 共19页
matlab第2章练习及答案.docx_第9页
第9页 / 共19页
matlab第2章练习及答案.docx_第10页
第10页 / 共19页
matlab第2章练习及答案.docx_第11页
第11页 / 共19页
matlab第2章练习及答案.docx_第12页
第12页 / 共19页
matlab第2章练习及答案.docx_第13页
第13页 / 共19页
matlab第2章练习及答案.docx_第14页
第14页 / 共19页
matlab第2章练习及答案.docx_第15页
第15页 / 共19页
matlab第2章练习及答案.docx_第16页
第16页 / 共19页
matlab第2章练习及答案.docx_第17页
第17页 / 共19页
matlab第2章练习及答案.docx_第18页
第18页 / 共19页
matlab第2章练习及答案.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

matlab第2章练习及答案.docx

《matlab第2章练习及答案.docx》由会员分享,可在线阅读,更多相关《matlab第2章练习及答案.docx(19页珍藏版)》请在冰点文库上搜索。

matlab第2章练习及答案.docx

matlab第2章练习及答案

第二章例题

命令文件(ScriptFile)和函数文件(FunctionFile)例2-1

建立一个M文件,其功能是:

用两个实变量R、M生成复变量RM,然后运行该M文件。

程序1:

建立一个命令文件。

clear;

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

M=[11,12,13;14,15,16];

RM=R+i*M

以文件名setcomp保存命令文件,然后在MATLAB的命令窗口中输入setcomp,将会执行该命令文件,输出为:

程序2:

建立一个函数文件。

functionRM=fsetcomp(R,M)

RM=R+i*M;

以文件名fsetcomp保存命令文件,

然后在MATLAB的命令窗口中输入fsetcomp,将会输出出错信息。

在命令窗口输入:

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

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

c=fsetcomp(a,b)

顺序结构例2-2

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

由于MATLAB能进行复数运算,所以不需要判断方程的判别式,而直接根据求根公式求根。

程序如下:

a=2;

b=6;

c=3;

%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))]);

用网孔分析法或节点电压法分析

1、用网孔分析法求下图中电流I1,I2,I3

解:

建模:

(1)标出网孔电流方向及符号(如下图)

(2)列网孔方程

(3)写成矩阵形式

(4)待求量与网孔电流的关系

I1=Ia;I2=-Ib;I3=Ia-Ib;

编程:

clear,closeall,formatcompact

R1=6;R2=3;R3=6;Us1=24;Us2=30;%输入已知参数

r11=R1+R3;r12=-R3;%为已知矩阵元素赋值

r21=-R3;r22=R2+R3;

R=[r11r12;r21r22];Us=[Us1;Us2];%列出已知矩阵

I=R\Us;%算出未知矩阵

Ia=I

(1),Ib=I

(2),%从矩阵元素中求出网孔电流

pause(5)%暂停5秒

I1=Ia;I2=-Ib;I3=Ia-Ib;%写出待求量与网孔电流的关系

disp(['I1=',num2str(I1),',I2=',num2str(I2),',I3=',num2str(I3)]);

选择结构例2-3

%判断是否为偶数,单分支

x=input('输入x=');%当x为矩阵时,逻辑判断里面的每一个元素

ifrem(x,2)==0

disp('xiseven');

end

%判断是否全为偶数,双分支

x=input('输入x=');

ifrem(x,2)==0

disp('xisalleven');

else

disp('xisnotalleven');

end

%计算分段函数:

程序如下:

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

');

ifx<0

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

else

y=sin(x)/(x+1);

end

disp(y)

多分支if语句:

例2-4

%%判断是否全为偶数,多分支

x=input('输入x=');

ifisempty(x)

disp('xisempty')

elseifisnan(x)

disp('xisnotanumber')

elseifisinf(x)

disp('xisainf')

elseifisstr(x)

disp('xisastring')

elseifrem(x,2)==0

disp('xisalleven');

elsedisp('xisnotalleven');

end

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

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

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

disp(lower(c));

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

disp(upper(c));

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

disp(str2num(c)^2);

else

disp(c);

end

switch语句例2-5:

将上例改用switch语句实现。

c=input('请输入一个字符:

','s');

cc=abs(c);

switch(cc)

casenum2cell(abs('A'):

abs('Z'))

disp(lower(c));

casenum2cell(abs('a'):

abs('z'))

disp(upper(c));

casenum2cell(abs('0'):

abs('9'))

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

otherwise

disp(c);

end

%num2cell函数是将数值矩阵转化为单元矩阵,num2cell(1:

5)等价于{1,2,3,4,5}。

%编写一个函数,将百分制的学生成绩转换为五级制的成绩

functionf=trangrade(x)

switchfix(x/10)%向0舍入为整数

case{10,9}

f='A';

case8

f='B';

case7

f='C';

case6

f='D';

otherwise

f='E';

end

try语句例2-6

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

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

A=input('请输入A矩阵:

');

B=input('请输入B矩阵:

');

lasterr('');%清除原有的错误信息

try

C=A*B;

catch

C=A.*B;

end

C

disp(lasterr)%显示出错原因

分别计算[123;456],[789;101112]和[123;456],[12;34;56]时的值

%计算各元素的和,如果有输入元素出错则输出和为0并显示出错的原因

x=input('请输入');

try

sum=sum(x)

catch

sum=0,

end

lasterr%显示出错的原因

分别输入[123b9]和[12379]

for语句例2-7

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

输出全部水仙花数。

shu=[];%用于存放结果,先赋空值

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

shu=[shu,m];%存入结果

end

end

shu

%用for语句为数组x赋值

x

(1)=10;

fori=2:

6

x(i)=2*x(i-1);

end

plot(x)

x

%AnM-filescripttoproduce"flowerpetal"plots

theta=-pi:

0.01:

pi;

rho(1,:

)=2*sin(5*theta).^2;

rho(2,:

)=cos(10*theta).^3;

rho(3,:

)=sin(theta).^2;

rho(4,:

)=5*cos(3.5*theta).^3;

fori=1:

4

polar(theta,rho(i,:

))%极坐标画图

pause

end

%已知

,求y的值

y=0;

n=100;

fori=1:

n

y=y+(-1)^(i-1)/i;

end

disp(y)

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

s=0;

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

fork=a

s=s+k;

end

disp(s);

while语句例2-8

求使最小的n。

程序如下:

y=0;

n=0;

while(y<=1.5)

n=n+1;

y=y+1/n/n;

end

disp(['满足条件的n是:

',num2str(n)])

%输入两个整数,求它们的最小公倍数。

程序如下:

x=input('请输入第一个数:

');

y=input('请输入第二个数:

');

z=max(x,y);

whileor(rem(z,x)~=0,rem(z,y)~=0)

z=z+1;

end

disp([num2str(x),'和',num2str(y),'的最小公倍数是:

',num2str(z)])

%搜寻最小的阶乘为100位数字的整数n值。

n=1;

whileprod(1:

n)<1e99%prod(1:

n)是把1到n之间的元素相乘

n=n+1;

end

n

break语句例2-9

%搜寻最小的阶乘为100位数字的整数n值。

也可以编写程序如下:

n=1;

whilen>0

n=n+1;

ifprod(1:

n)>=1e99%prod(1:

n)是把1到n之间的元素相乘

break

end

end

n

%设计一个计算平均成绩及不及格率的程序,若输入成绩为负值,则显示出错信息

clear,closeall

sum=0;%给总分初始值

fail=0;%给不及格人数初始值

x=input('输入成绩');

fori=1:

length(x)

ifx(i)<0

disp('Error:

variablemustbepositive');

break;

elseifx(i)<60

fail=fail+1;

end

sum=sum+x(i);

end

ifx>0

average=sum/length(x)

failrate=fail/length(x)

end

continue语句例2-10

%设计一个计算及格率及不及格率的程序,

x=input('请输入成绩')

i=0;m=0;n=0;%n不及格人数,m及格人数,给初始值

whilei

i=i+1;

ifx(i)>=60

m=m+1;

continue

end

n=n+1;

end

pass=m/i

fail=n/i

【例2.12】设x,y,z均为正整数,求下列不定方程组共有多少组解。

这类方程的个数少于未知数的个数的方程称为不定方程,一般没有唯一解,而有多组解。

对于这类问题,可采用穷举法,即将所有可能的取值一个一个地去试,看是否满足方程,如满足即是方程的解。

首先确定3个变量的可取值,x、y、z均为正整数,所以3个数的最小值是1,而其和为20,所以3者的最大值是18。

n=0;

a=[];

forx=1:

18

fory=1:

18

z=20-x-y;

if25*x+20*y+16*z==400

a=[a;x,y,z];

n=n+1;

end

end

end

disp(['方程组共有',num2str(n),'组解']);

disp(a)

函数文件的基本结构例2-11:

functiony=mean(x,dim)

%MEANAverageormeanvalue.

%Forvectors,MEAN(X)isthemeanvalueoftheelementsinX.For

%matrices,MEAN(X)isarowvectorcontainingthemeanvalueof

%eachcolumn.ForN-Darrays,MEAN(X)isthemeanvalueofthe

%elementsalongthefirstnon-singletondimensionofX.

%

%MEAN(X,DIM)takesthemeanalongthedimensionDIMofX.

%

%Example:

IfX=[012

%345]

%

%thenmean(X,1)is[1.52.53.5]andmean(X,2)is[1

%4]

%

%SeealsoMEDIAN,STD,MIN,MAX,COV.

%Copyright1984-2002TheMathWorks,Inc.

%$Revision:

5.17$$Date:

2002/06/0517:

06:

39$

ifnargin==1,

%DeterminewhichdimensionSUMwilluse

dim=min(find(size(x)~=1));

ifisempty(dim),dim=1;end

y=sum(x)/size(x,dim);

else

y=sum(x,dim)/size(x,dim);

end

函数定义行定义了的函数的名称,以及输入输出参数的数量和名称

H1行当使用lookfor命令来查询函数的帮助时显示的信息

帮助文本用help命令可查询到帮助文本

函数主体函数中真正计算和输出赋值等工作的代码

注释为了增加函数体中代码的可读性而加入的说明性文本

用type命令可显示以上所有的信息

编写求一个向量之和以及向量平均值的函数文件。

function[s,m]=fvector(v)

%VECTORfvector.mcalculatessumandmeanofavector

%v向量

%s和

%m平均值

%2008年12月10日编

[m,n]=size(v);

if(m>1&n>1)|(m==1&n==1)

error('Inputmustbeavector')

end

s=sum(v);%求向量和

m=s/length(v);%求向量平均值

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

[s,p]=fvector(1:

10)

用lookfor、help、type命令分别显示函数的相关信息

函数文件中的return语句例2-12

编写一个计算阶乘的函数,如果阶乘的值小于等于四位,则输出阶乘的值y。

如果阶乘的值大于四位,则输出最小的阶乘为5位数字的整数i

functionf=prod1(m)

f=1;

fori=2:

m

iff>=1e4

f=i-1;

return%中止当前执行的命令,返回到调用函数或等待键盘输入指令

end

f=f*i;

end

函数调用例2-13

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

函数文件tran.m:

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)

利用函数的递归调用,求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

nargin用法示例例2-14

输入参数为一个时进行平方运算,输入参数为两个时进行加法运算,为三个时,三个参数相乘除以3。

functionfout=charray(a,b,c)

ifnargin==1

fout=a.^2;

elseifnargin==2

fout=a+b;

elseifnargin==3

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

end

命令文件main3.m:

x=examp(1:

3)

y=examp(1:

3,4:

6)

z=examp(1:

3,[1;2;3],15)

全局变量应用例2-15

函数文件wadd.m

functionf=wadd(x,y)

globalALPHABETA

f=ALPHA*x+BETA*y;

在命令窗口中输入:

globalALPHABETA

ALPHA=1;

BETA=2;

s=wadd(1,2)

程序优化例2-16

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

tic

y=0;

n=10000;

fori=1:

n

y=y+1/i/i;

end

toc

disp(y)

%向量求和

tic

n=10000;

i=1:

n;

f=(-1).^(i-1)./i;

y=sum(f);

toc

disp(y)

clear;

a=0;

forn=2:

1000

a(n)=a(n-1)+10;

end

%预留内存空间2:

clear;

a=zeros(1,1000);

forn=2:

1000

a(n)=a(n-1)+10;

end

clear;

a=rand(1000);%生成一个32×32的矩阵

tic

x=a.^3;

toc

tic

y=a.*a.*a;

toc

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

当前位置:首页 > 法律文书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2