当前位置:文档之家› matlab编程练习

matlab编程练习

matlab编程练习
matlab编程练习

选择结构编程练习

1. 身高预测

每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。

设faHeight为其父身高,moHeight为其母身高,身高预测公式为

男性成人时身高=(faHeight + moHeight)×0.54cm

女性成人时身高=(faHeight×0.923 + moHeight)/2cm

此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生饮食习惯,那么可增加身高1.5%。

编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示良好,输入字符N表示不好),利用给定公式和身高预测方法对身高进行预测。

syms f m Y N

faHeight=input('请输入父亲的身高:');

moHeight=input('请输入母亲的身高:');

x=input('请输入x的性别:');

sport=input('是否喜欢运动(Y/N):');

diet=input('饮食是否良好(Y/N):');

if x==m

child=(faHeight+moHeight)*0.54;

else

child=(faHeight*0.923+moHeight)/2;

end

if sport==Y

child=child*1.02;

else

child=child;

end

if diet==Y

child=child*1.015;

else

child=child;

end

child

2. 简单的计算器

用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:

操作数1 运算符op 操作数2

计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

m=input('操作数1 运算符op 操作数2:','s');

q=find(m=='+'|m=='-'|m=='*'|m=='/'|m=='×'|m=='÷');

a=str2num(m(1:q-1));

b=m(q);

c=str2num(m(q+1:end));

switch b

case '+'

a+c

case '-'

a-c

case '*'

a*c

case '×'

a*c

case '/'

a/c

case '÷'

a/c

end

(1)如果要求程序能进行浮点数的算术运算,程序应该如何修改?如何比较实型变量data2和常数0是否相等?

format long

m=input('操作数1 运算符op 操作数2:','s');

q=find(m=='+'|m=='-'|m=='*'|m=='/'|m=='×'|m=='÷');

a=str2num(m(1:q-1));

b=m(q);

c=str2num(m(q+1:end));

switch b

case '+'

a+c

case '-'

a-c

case '*'

a*c

case '×'

a*c

case '/'

a/c

case '÷'

a/c

end

(2)如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空白符,

那么程序如何修改?

format long

m=input('操作数1 运算符op 操作数2:','s');

m(find(isspace(m))) = []

q=find(m=='+'|m=='-'|m=='*'|m=='/'|m=='×'|m=='÷');

a=str2num(m(1:q-1));

b=m(q);

c=str2num(m(q+1:end));

switch b

case '+'

a+c

case '-'

a-c

case '*'

a*c

case '×'

a*c

case '/'

a/c

case '÷'

a/c

end

(3)(选作题)如果要求连续做多次算术运算,每次运算结束后,程序都给出提示:

Do you want to continue(Y/N or y/n)?

用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态。那么,程序如何修改?

syms Y N y n

format long

a=input('请输入操作数1:');

b=input('请输入运算符op,','s');

c=input('请输入操作数2:');

switch b

case '+'

a+c

case '-'

a-c

case '*'

a*c

case '×'

a*c

case '/'

a/c

case '÷'

a/c

end

F=input('Do you want to continue(Y/N or y/n)');

while F==Y

format long

a=input('请输入操作数1:');

b=input('请输入运算符op,','s');

c=input('请输入操作数2:');

switch b

case '+'

a+c

case '-'

a-c

case '*'

a*c

case '×'

a*c

case '/'

a/c

case '÷'

a/c

end

F=input('Do you want to continue(Y/N or y/n)');

End

(2) format long

d='y';

while d=='Y'|d=='y'

m=input('操作数1 运算符op 操作数2:','s');

m(find(isspace(m))) = []

q=find(m=='+'|m=='-'|m=='*'|m=='/'|m=='×'|m=='÷'); a=str2num(m(1:q-1));

b=m(q);

c=str2num(m(q+1:end));

switch b

case '+'

a+c

case '-'

a-c

case '*'

a*c

case '×'

a*c

case '/'

a/c

case '÷'

a/c

end

d=input('Do you want to continue(Y/N or y/n)?','s');

end

循环结构编程练习

猜数游戏

在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果按下列要求循序渐进地编程实现,会发现其实这个程序是很容易实现的。那么,现在就开始吧,先编写第1个程序,然后试着在第1个程序的基础上编写第2个程序,……

程序1 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。

程序2 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。

程序3 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。

程序4 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

a=fix((100+1)*rand(1));

b=input('请输入一个大于0小于100的整数:');

for i=1:10

if a==b

disp('You win!')

disp(['你总共用了',num2str(i),'次'])

break;

elseif b>a

disp(['Too high!You hava ',num2str(10-i),' chances!'])

else

disp(['Too low!You hava ',num2str(10-i),' chances!'])

end

b=input('请再输入一个整数:')

end

1 .猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半另一个,以后每天早晨都吃剩下的一半另一个,到第十天早晨再想吃时,就剩一个桃子。问第一天共摘了多少桃子。

要求:分别用三种语句编写程序。

(1)function Peach

clc

number=1;

x(10)=number;

fprintf('计算结果如下:\n');

for i=9:-1:1

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

fprintf(' 第%d天有%d个桃子\n',i,x(i));

end

(2)

i=10;x=1;

while i>1

i=i-1;

x=(x+1)*2;

end;x

(3)

function y=Eatpeach(x);

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

for x=1:100000;

y=x;

for i=1:9

y=Eatpeach(y);

end

if y==1

x

break

end

end

2 .编写程序验证下列结论:任何一个自然数n 的立方都等于n 个连续奇数之和。例如:1

3 =1 ;2 3 =3+5 ;3 3 =7+9+11 。

要求:程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为0 时止。

n=input('请输入一个数字:');

k=n*n*n;

s=0;

for 1:2:k;

c=i;

A=[];

s=0;

for b=i:n;

s=c+s;

A=[c,A];

c=c+2;

end

if

s==k

A

break;

end

end

函数编程练习

1. 给小学生出加法考试题

编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程。

程序 1 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,程序结束。

程序 2 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。

程序 3 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! You have tried three times! Test over!”,程序结束。

程序4 连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。

程序5 通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。

format short

disp('小数保留4位小数');

j=0;

for i=1:10;

a=fix(1+9*rand(1));

b=fix(1+9*rand(1));

c=fix(1+4*rand(1));

switch c

case 1

d=input([num2str(a),'+',num2str(b),'='],'s');

q=a+b;

if d==num2str(q)

disp('you are right!');

j=j+1;

else

disp('Not correct!');

end

case 2

d=input([num2str(a),'-',num2str(b),'='],'s');

q=a-b;

if d==num2str(q)

disp('you are right!');

j=j+1;

else

disp('Not correct!');

end

case 3

d=input([num2str(a),'×',num2str(b),'='],'s');

q=a*b;

if d==num2str(q)

disp('you are right!');

j=j+1;

else

disp('Not correct!');

end

case 4

d=input([num2str(a),'÷',num2str(b),'=']);

if d==round((a/b)*10^4)/10^4

disp('you are right!');

j=j+1;

else

disp('Not correct!');

end

end

end

score=10*j

【思考题】如果要求将整数之间的四则运算题改为实数之间的四则运算题,那么程序该如何修改呢?请读者修改程序,并上机测试程序运行结果。

2.掷骰子游戏

编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,投两枚骰子之后,计算点数之和。如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。

【思考题】将游戏规则改为:计算机想一个数作为一个骰子掷出的点数(在用户输入

数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。其余规则相同,然后请读者重新编写该程序。

format short

d='y';

while d=='Y'|d=='y'

A=1+(6-1)*round(rand(1));%系统随机生成一个

disp(['如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。'])

B=input('请随便输入数字1~6:');

a1=A(1)+B(1);

if a1==3|a1==11

disp(['因为第一个骰子值=',num2str(A),';第二个的=',num2str(B),';两个之和=',num2str(a1)]);

disp(['你赢了!']);

elseif a1==2||a1==7||a1==12

disp(['你输了']);

disp(['因为第一个骰子值=',num2str(A),';第二个的=',num2str(B),';两个之和=',num2str(a1)]);

elseif a1==4|a1==5|a1==6|a1==8|a1==9|a1==10

k=a1;

k1=0;

while k>0

k1=k1+1;

disp(['第',num2str(k1),'次丢的结果:','第一个骰子值=',num2str(A),';第二个的=',num2str(B),';两个之和=',num2str(a1)]);

disp(['未分出输赢,继续丢,【已丢了',num2str(k1),'次】']);

A=1+(6-1)*round(rand(1));%系统随机生成一个

B=input('请随便输入数字1~6:');

a1=A(1)+B(1);

if a1==k

disp(['你赢了!']);

disp(['因为第',num2str(k1+1),'次丢的结果是:','第一个骰子值=',num2str(A),';第二个的=',num2str(B),';两个之和=',num2str(a1)]);

break;

elseif k1==7

disp(['你输了!']);

disp(['因为你已经花费了所有机会']);

break;

end

end

end

d=input('Do you want to continue(Y/N or y/n)?','s');

end

MATLAB程序设计教程(第二版)课后答案(可编辑修改word版)

MATLAB 第二版课后答案unit3-8 unit3 实验指导 1、 n=input('请输入一个三位数:'); a=fix(n/100); b=fix((n-a*100)/10); c=n-a*100-b*10; d=c*100+b*10+a 2(1) n=input('请输入成绩'); switch n case num2cell(90:100) p='A'; case num2cell(80:89) p='B'; case num2cell(70:79) p='C'; case num2cell(60:69) p='D'; otherwise p='E'; end price=p (2)n=input('请输入成绩'); if n>=90&n<=100 p='A'; elseif n>=80&n<=89 p='B'; elseif n>=70&n<=79 p='C'; elseif n>=60&n<=69 p='D'; else p='E'; end price=p (3)try n; catch price='erroe' end 3 n=[1,5,56,4,3,476,45,6,3,76,45,6,4,3,6,4,23,76,908,6];

b=n(1); for m=2:20 if n(m)>a a=n(m); elseif n(m)=0 disp(A([n],:)); elseif n<0 disp(lasterr); else disp(A([6],:)); disp(lasterr); end 7(1) f=[];

matlab编程训练

matlab训练 建立一个脚本文件,用于两个变量值的互相交换。 x=input('输入变量x='); y=input('输入变量y='); z=x; x=y; y=z; x y 比较从键盘输入的两个数的大小,输出其中较大的数。(扩展,输出两个同型矩阵中对应位置较大的数) function [ y ] = ex2( x ) a=input('输入数字x='); b=input('输入数字y='); if a>b fprintf('较大数为%d\n',a) elseif a

c = input('请输入常数项: '); discriminant = b^2 - 4 * a * c; if discriminant > 0 x1 = (-b + sqrt(discriminant)) / (2*a); x2 = (-b - sqrt(discriminant)) / (2*a); fprintf('x1 = %f\n', x1); fprintf('x2 = %f\n', x2); elseif discriminant == 0 x1 = ( -b ) / (2*a); fprintf('x1 = x2 = %f\n', x1); else real_part = (-b) / (2*a); imag_part = sqrt( abs(discriminant)) / (2*a); disp('此方程无实根:'); fprintf('x1 = %f + i %f \n',real_part, imag_part); fprintf('x1 + %f - i %f \n', real_part, imag_part); end 编写一个函数求圆的面积与周长,并编写测试脚本文件测试结果。function ex4 r=input('请输入此圆的半径: '); S=pi*r; C=2*pi*r; fprintf('此圆的面积是:'); disp(S) fprintf('此圆的周长是:');

《MATLAB程序设计与应用(刘卫国)》(第二版) 答案

《MATLAB程序设计与应用(刘卫国)》(第二版)实验一MATLAB运算基础 1.(1) z1=2*sin(pi*85/180)/(1+exp(2)) (2)x=[2,1+2i;-0.45,5]; z2=log(x+sqrt(1+x.^2))/2 (3)a=-3.0:0.1:3.0; z3=0.5*(exp(0.3*a)-exp(-0.3*a)).*sin(a+0.3)+log((0.3+a)/2) (4)t=0:0.5:2.5; z4=(t>=0&t<1).*t.^2+(t>=1&t<2).*(t.^2-1)+(t>=2&t<3).*(t.^2-2*t+1) 2. A=[12,34,-4;34,7,87;3,65,7]; B=[1,3,-1;2,0,3;3,-2,7]; (1)a=A+6*B b=A-B+eye(size(A)) %I=eye(size(A)) (2)c=A*B d=A.*B (3)e=A^3 f=A.^3 (4)g=A/B h=B\A (5)m=[A,B] n=[A([1,3],:);B^2] 3. A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20;21,22,23,24,25]; B=[3,0,16;17,-6,9;0,23,-4;9,7,0;4,13,11]; (1)C=A*B (2)D=C(3:end,2:end) 4.(1) a=100:999; b=rem(a,21)==0; c=find(b); d=length(c) (2)ch='Just as Bianhaiman said,Xiehong is ...'; e=find(ch>='A'&ch<='Z'); ch(e)=[] 实验二 MATLAB矩阵分析与处理 1.E=eye(3);

MATLAB程序设计教程课后答案

实验指导 1、 n=input('请输入一个三位数:'); a=fix(n/100); b=fix((n-a*100)/10); c=n-a*100-b*10; d=c*100+b*10+a 2(1) n=input('请输入成绩'); switch n case num2cell(90:100) p='A'; case num2cell(80:89) p='B'; case num2cell(70:79) p='C'; case num2cell(60:69) p='D'; otherwise p='E'; end price=p (2)n=input('请输入成绩'); if n>=90&n<=100 p='A'; elseif n>=80&n<=89 p='B'; elseif n>=70&n<=79 p='C'; elseif n>=60&n<=69 p='D'; else p='E'; end price=p (3)try n; catch price='erroe' end 3 n=[1,5,56,4,3,476,45,6,3,76,45,6,4,3,6,4,23,76,908,6]; a=n(1);

for m=2:20 if n(m)>a a=n(m); elseif n(m)=0 disp(A([n],:)); elseif n<0 disp(lasterr); else disp(A([6],:)); disp(lasterr); end 7(1) f=[]; for n=1:40

MATLAB 语言程序设计基础(2)

%第六章微分方程问题的解法 % 微分方程的解析解方法 % 常微分方程问题的数值解法 % 微分方程问题算法概述 % 四阶定步长Runge-Kutta算法及MATLAB 实现 % 一阶微分方程组的数值解 % 微分方程转换 % 特殊微分方程的数值解 % 边值问题的计算机求解 % 偏微分方程的解 % 6.1 微分方程的解析解方法 % y=dsolve(f1, f2, …, fm ,'x') % syms t; u=exp(-5*t)*cos(2*t+1)+5; % uu=5*diff(u,t,2)+4*diff(u,t)+2*u % syms t y; % y=dsolve(['D4y+10*D3y+35*D2y+50*Dy+24*y='... % '87*exp(-5*t)*cos(2*t+1)+92*exp(-5*t)*sin(2*t+1)+10'],'y(0)=3','Dy(0)=2','D2y(0)=0','D3y(0)=0') % [x,y]=dsolve('D2x+2*Dx=x+2*y-exp(-t)',... % 'Dy=4*x+3*y+4*exp(-t)') % syms t x; % x=dsolve('Dx=x*(1-x^2)+1') % Warning: Explicit solution could not be found; implicit solution returned. % > In D:\MATLAB6p5\toolbox\symbolic\dsolve.m at line 292 % x = % t-Int(1/(a-a^3+1),a=``..x)+C1=0 % 故只有部分非线性微分方程有解析解。 % 6.2 微分方程问题的数值解法 % 6.2.1 微方程问题算法概述 %Euler算法% %function [outx,outy]=MyEuler(fun,x0,xt,y0,PointNum) % fun 表示f(x,y); x0,xt:自变量的初值和终值; % y0:函数在x0处的值,其可以为向量形式; % PointNum表示自变量在[x0,xt]上取的点数 % if nargin<5 |PointNum<=0 %PointNum 默认值为100 % PointNum=100; % end % if nargin<4 % y0默认值为0

《MATLAB程序设计》复习资料

Matlab 习题及复习要点 1. Matlab 的英文组成;程序和变量的命名规则; 在MATLAB 语言中是区分字母大小的,也就是说,大写字母和小写字母代表的东西是不同的。 2.Matlab 中注释、关键词等的显示颜色;如何设置当前路径、如何设置搜索路径(例如第一次上机练习过的,新建的“D:\temp ”目录中有脚本文件abc.m ,若要能在命令窗口输入abc 执行则..); 3.熟悉Matlab 中的几种数据类型(int8、double 、logical 等); 4.在MATLAB 中计算数学公式(如三角函数、对数、开根号等)的表达; 5.掌握数组的几个操作(裁剪、扩增、eye 、zeros 等)、对角阵指令、均匀分布随即向量指令;数组中行和列的分隔符; 6. 在循环结构中的几个命令:break 、continue 等; 7. 已知字符'A'、'Z'、'a'、'z'的ASCII 码分别为65、90、97、122,str1为全为大写字母的字符串,采用什么命令可将该字符串转换成小写。 8. 在MATLAB 中求解线性方程组=Ax b 可采用什么指令; 9. 掌握基本运算符,例如*、.*、/、./、^、.^ 的区别 10.读懂逻辑表达式,会写出逻辑表达式的结果(0或1) 11. 掌握集中循环结构,尤其if..elseif…else…end 和swich…case 结构的语法,要准确。 12. 会编写分段函数的程序; x 和y 满足如下关系: 221211212x x y x x x x ?? 编写函数y=f(x),用于计算上述分段函数。 13. 绘图时采用的几个命令的掌握:hold on 、plot 、plot3 14*.用语句[x, y]=meshgrid(a:b)构建网格数据,例子如下: 示例一: x=-3:1:3;y=-2:1:2; [X,Y]= meshgrid(x,y); 这里meshgrid (x ,y )的作用是分别产生以向量x 为行,向量y 为列的两个大小相同的矩阵,其中x 的行是从-3开始到3,每间隔1记下一个数据,并把这些数据集成矩阵X ;同理y 的列则是从-2到2,每间隔1记下一个数据,并集成矩阵Y 。即 X= -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3

刘卫国版MATLAB程序设计与应用课后实验六八九

实验六 高层绘图操作 %第一题: 程序代码如下: x=linspace(0,2*pi,101); y=(0.5+3*sin(x)./(1+x.^2)).*cos(x); plot(x,y) 01234567 -1 -0.5 0.5 1 1.5 %第二题: %(1) 程序代码如下: x=linspace(-2*pi,2*pi,100); y1=x.^2; y2=cos(2*x); y3=y1.*y2; plot(x,y1,'b-',x,y2,'r:',x,y3,'y--'); text(4,16,'\leftarrow y1=x^2'); text(6*pi/4,-1,'\downarrow y2=cos(2*x)'); text(-1.5*pi,-2.25*pi*pi,'\uparrow y3=y1*y2');

-8 -6 -4 -2 2 4 6 8 -30-20 -10 10 20 30 40 %(2) 程序代码如下: x=linspace(-2*pi,2*pi,100); y1=x.^2; y2=cos(2*x); y3=y1.*y2; subplot(1,3,1);%分区 plot(x,y1); title('y1=x^2');%设置标题 subplot(1,3,2); plot(x,y2); title('y2=cos(2*x)'); subplot(1,3,3); plot(x,y3); title('y3=x^2*cos(2*x)');

-10 10 0510 15202530 35 40y1=x 2 -10 10 -1-0.8 -0.6 -0.4-0.200.20.4 0.6 0.8 1y2=cos(2*x) -10 10 -30-20 -10 10 20 30 40 y3=x 2*cos(2*x) %(3) 程序代码如下: x=linspace(-2*pi,2*pi,20); y1=x.^2; subplot(2,2,1);%分区 bar(x,y1); title('y1=x^2的条形图');%设置标题 subplot(2,2,2); stairs(x,y1); title('y1=x^2的阶梯图'); subplot(2,2,3); stem(x,y1); title('y1=x^2的杆图'); subplot(2,2,4); fill(x,y1,'r');%如果少了'r'则会出错 title('y1=x^2的填充图'); %其他的函数照样做。

MATLAB程序设计教程(第二版)第三章实验报告下载

大学社区网收集整理https://www.doczj.com/doc/0512949914.html, 评分 日期湖南商学院北津学院实验报告 课程名称MATLAB科学计算编程语言 实验名称MATLAB程序设计 专业班级信科1121班 姓名xxx 学号xxx 实验日期2012年11月5日 2012—2013学年度第一学期 一、实验目的 1.掌握利用if语句、switch语句实现选择结构的方法。 2.掌握利用for语句、while语句实现循环结构的方法。 3.熟悉利用向量运算来代替循环操作的方法并理解MATLAB程序设计的特点 4.掌握定义和调用MATLAB函数的方法。

二、实验环境 系统windows7旗舰版 处理器Intel(R)Core(TM)i7-3610M CPU @ 2.30GHz 安装内存 4.00GB (3.07GB 可用)系统类型64位操作系统运行环境 MATLAB 5.3 三、实验基本原理 利用上课所学知识解决以下问题: 1.从键盘输入一个3位数的整数,将它反向输出。如输入639,输出936。 2.输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。 要求: (1)分别用if 语句和switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。3.输入20个数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB 的max 函数、min 函数来实现。 4.23.0ln )3.0sin(23.03.0a a e e y a a +++?=?,当a 取-3.0、-2.9、-2.8、…、2.8、2.9、 3.0时,求各点的函数值。要求分别用顺序结构和循环结构实现。 5.当n 分别取100、1000、10000时,求下列各式的值: (1)) 6...(n 1...31211122222π=+++++(2)) 2...()12)(12()2)(2(...756653443122π =??? ?????+?????????××????????××????????××n n n n 要求分别用循环结构和向量运算(使用sum 函数)来实现。 6.建立5×6矩阵,要求输出矩阵第n 行元素。当n 值超过矩阵的行数时,自动转为输出矩阵最后一行元素,并给出出错信息。 7已知,o999 ) 20()30()40(f f f y += (1)当)5ln(10)(2 ++=n n n f 时,y 的值是多小。 (2)当+×+×+×=433221)(n f …+)1(+×n n 时,y 的值是多小。 8.先用函数的递归调用定义一个函数文件求 ∑=n i m i 1,然后调用该函数文件求

Matlab语言程序设计

MATLAB 语言程序设计 1、应用题(20 分) 某工厂生产A和B两种产品,它们需要经过三种设备的加工,工时如表1所列。设备一、二、三每天可使用的时间分别不超过12、10和8小时。产品A和B的利润随市场的需求有所波动,如果预测未来某个时期内A和B的利润分别为4000元/吨和3000元/吨,问每天应安排产品A、B各多少吨,才能使工厂获利最大? 表 1 生产产品工时表 产品设备一设备二设备三 A/(小时/吨) 3 3 4 B/(小时/吨) 4 3 2 设备每天最多可工作时数/小时12 10 8 请写出具体解决方案,并编写该解决方案的具体MATLAB程序代码。 假设每天应安排生产产品A和B分别为和吨,依题意可建数学模型如下: max z=4000x 1+ 3000x2 3x1+ 4x2≤12 3x1+ 3x2≤10 4x1+ 2x2≤8 x1≥0, x2≥0 首先将目标函数转换为标准形式:min z=-4000-3000 M文件如下: f = [-4000;-3000]; A = [3 4;3 3;4 2]; b = [12;10;8]; lb = zeros(2,1); [x,fval] = linprog(f,A,b,[],[],lb) 结果如下图1所示: 图1

2、结合MATLAB 图像的读写知识,请你写出具体MATLAB 图像读写方法,结合实例,给出图像读写步骤。(20分) 读写方法: imfinfo(FileNAme) %从FileNAme中获取或显示图像文件的特征数据 [X,cmap]=imread(FileNAme) %读取变址图像的数据矩阵与伴随色图,并分别送给X 和cmap X=imread(FileNAme) %从FileNAme中读取强度图像或真彩图像的数据矩阵并送给X imwrite(X,cmap,FileName,Parameter,Value) %将变址图像写入文件 imwrite(X ,FileName,Parameter,Value)%将强度图像或真彩图像写入文件 [例2-1] M文件如下: I=imread('m2.png'); imwrite(I,'m2.tif'); [X,cmap]=imread('m2.tif'); image(X); colormap(cmap); axis image off; 结果如下图2所示: 图2 3、结合课本第四章所提供的18种绘图方法,请实现其中8种绘图,提供程序代码及所绘制的图形。(30分)

Matlab编程与应用习题和一些参考答案

Matlab 上机实验一、二 3.求下列联立方程的解???????=+-+-=-+=++-=--+4 1025695842475412743w z y x w z x w z y x w z y x >> a=[3 4 -7 -12;5 -7 4 2;1 0 8 -5;-6 5 -2 10]; >> b=[4;4;9;4]; >> c=a\b 4.设???? ??????------=81272956313841A ,??????????-----=793183262345B ,求C1=A*B’;C2=A’*B;C3=A.*B,并求上述所有方阵的逆阵。 >> A=[1 4 8 13;-3 6 -5 -9;2 -7 -12 -8]; >> B=[5 4 3 -2;6 -2 3 -8;-1 3 -9 7]; >> C1=A*B' >> C2=A'*B >> C3=A.*B >> inv(C1) >> inv(C2) >> inv(C3) 5.设 ?? ????++=)1(sin 35.0cos 2x x x y ,把x=0~2π间分为101点,画出以x 为横坐标,y 为纵坐标的曲线。 >> x=linspace(0,2*pi,101); >> y=cos(x)*(0.5+(1+x.^2)\3*sin(x)); >> plot(x,y,'r') 6.产生8×6阶的正态分布随机数矩阵R1, 求其各列的平均值和均方差。并求该矩阵全体数的平均值和均方差。 (mean var ) a=randn(8,6) mean(a) var(a) k=mean(a) k1=mean(k) i=ones(8,6) i1=i*k1 i2=a-i1 i3=i2.*i2 g=mean(i3) g2=mean(g)

《MATLAB程序设计》复习

Matlab习题及复习要点 1.Matlab的英文组成;程序和变量的命名规则; 在MATLAB语言中是区分字母大小的,也就是说,大写字母和小写字母代表的东西是不同的。 2.Matlab中注释、关键词等的显示颜色;如何设置当前路径、如何设置搜索路径(例如第一次上机练习过的,新建的“D:\temp”目录中有脚本文件abc.m,若要能在命令窗口输入abc执行则..); 3.熟悉Matlab中的几种数据类型(int8、double、logical等); 4.在MATLAB中计算数学公式(如三角函数、对数、开根号等)的表达; 5.掌握数组的几个操作(裁剪、扩增、eye、zeros等)、对角阵指令、均匀分布随即向量指令;数组中行和列的分隔符; 6. 在循环结构中的几个命令:break、continue等; 7. 已知字符'A'、'Z'、'a'、'z'的ASCII码分别为65、90、97、122,str1为全为大写字母的字符串,采用什么命令可将该字符串转换成小写。 Ax b可采用什么指令; 8. 在MATLAB中求解线性方程组 9. 掌握基本运算符,例如*、.*、/、./、^、.^ 的区别 10.读懂逻辑表达式,会写出逻辑表达式的结果(0或1) 11. 掌握集中循环结构,尤其if..elseif…else…end和swich…case结构的语法,要准确。 12. 会编写分段函数的程序; x和y满足如下关系: 编写函数y=f(x),用于计算上述分段函数。 13. 绘图时采用的几个命令的掌握:hold on、plot、plot3 14*.用语句[x, y]=meshgrid(a:b)构建网格数据,例子如下: 示例一: x=-3:1:3;y=-2:1:2; [X,Y]=?meshgrid(x,y); 这里meshgrid(x,y)的作用是分别产生以向量x为行,向量y为列的两个大小相同的矩阵,其中x的行是从-3开始到3,每间隔1记下一个数据,并把这些数据集成矩阵X;同理y的列则是从-2到2,每间隔1记下一个数据,并集成矩阵Y。即X= -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 Y = -2 -2 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0

matlab程序设计与应用第二版习题答案

matlab程序设计与应用第二版习题答案【篇一:matlab程序设计与应用(第二版)实验答案】 %实验一 matlab运算基础 %第1题 %(1) z1=2*sin(85*pi/180)/(1+exp(2)) %(2) x=[2,1+2i;-0.45,5]; z2=0.5*log(x+sqrt(1+x.^2)) %(3) a=-3.0:0.1:3.0; z3=(exp(0.3*a)-exp(-0.3*a))/2.*sin(a+0.3)+log((0.3+a)/2) %(4) t=0:0.5:2.5; z4=t.^2.*(t=0t1)+(t.^2-1).*(t=1t2)+(t.^2-2*t+1).*(t=2t3) %第2题 a=[12 34 -4;34 7 87;3 65 7]; b=[1 3 -1;2 0 3;3 -2 7]; a+6*b a-b+eye(size(a)) a*b a.*b a^3 a.^3 a/b b\a [a,b] [a([1,3],:);b^2] %第3题 a=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 22 23 24 25] b=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11] c=a*b f=size(c) d=c(f(1)-2:f(1),f(2)-1:f(2)) whos %第4题 %(1):

a=100:999; b=rem(a,21); c=length(find(b==0)) %(2): a=lsdhksdlkklsdkl; k=find(a=aa=z); a(k)=[] %实验二 matlab矩阵分析与处理 %第1题 e=eye(3); r=rand(3,2); o=zeros(2,3); s=diag([2,3]); a=[e,r;o,s]; a^2 b=[e,(r+r*s);o,s^2] %第2题 h=hilb(5) p=pascal(5) hh=det(h) hp=det(p) th=cond(h) tp=cond(p) %第3题 a=fix(10*rand(5)) h=det(a) trace=trace(a) rank=rank(a) norm=norm(a) %第4题 a=[-29,6,18;20,5,12;-8,8,5] [v,d]=eig(a) %数学意义略 %第5题方法一 %(1): a=[1/2,1/3,1/4;1/3,1/4,1/5;1/4,1/5,1/6]; b=[0.95,0.67,0.52]; x=inv(a)*b %(2):

05级通信工程、电子信息工程《MATLAB语言程序设计》考试卷

安徽农业大学2006―2007学年第二学期 《MATLAB 语言程序设计》试卷(A 卷) 考试形式: 闭卷笔试,2小时 适用专业: 05级通信工程、电子信息工程 一、填空题(本题满分30分,每空3分) 1. 设有程序 A=[1,2,3,4;4,3,2,1;1, -2 ,1, -2];B=[3,1,-1;0,4,2];A1=A(:,[1 3]); M=size(A1)+ length(B(:,2)) 将下列命令的运行结果填在横线上 M= ;A1+B' = . 2. A=[1,2,3,4;2,3,4,5;3,4,5,6]; A1=sum(A<4,2);A([2,3],:)=[],A2=A A1= ; A2= ; 3.P=[1,2,3,4;3,0,1,2];max(P)= ;mean(P,2)= 院: 专业班级: 姓名: 学号: 装 订 线

二、(本题满分12分)试编写计算程序 V; 与特征向量 U 的特征值 B 2 A 求 (4). E; 5 B A 2B BX 解矩阵 . (3) ); A B) (B(A R R 的秩 A (2). |; B) 2 B)(A (A | D (1). , 6 2 1 5 7 2 , 2 1 5 1 2 3 3 2 1 1 1 + + = + = + - = ? ? ? ? ? ? ? - = ? ? ? ? ? ? ? = - - T T T B A 方程 设

三、(本题满分8分) 的程序组写出求解超定线性方程?????? ?=++-=++=--=++1 21212:321 321321 321x x x x x x x x x x x x 四、(本题满分16分)运用符号运算功能写出下列各题Matlab 程序 解求方程03.12=-x e x Adx dx A d x wx x x xe A x ??? ????=-1 022,,cos )sin(sin .2并计算 生成符号矩阵

练习3 MATLAB程序设计

练习4 MATLAB 程序设计 一、目的和要求 (1)掌握MAM 的程序流程控制结构。 (2)掌握M 文件的结构。 (3)掌握函数调用和参数传递。 (4)了解程序性能剖析窗口。 (5)掌握利用函数句柄进行数值分析。 二、内容和步骤 MATLAB 的语法规则简洁,编程效率高,作为一个完整的程序语言,MATLAB 也有其各种程序流程控制、文件格式和函数调用的规则,通过函数的调用就能够组成庞大的程序,完成复杂的功能。 1.使用程序流程控制 Fibonacci 数列的各元素为:1,1,2,3,5,8,…,满足以下关系: 2 1211 1--+===n n n F F F F F 用M 函数文件实现,数列的元素个数为输入变量。 (l )按M 函数文件格式创建文件开头。 function f=shiyan0501(n) %SHIYAN0501 Fibonacci % Fibonacci 数列 % n 元素个数 % f 构成Fibonacci 数列向量 (2)用While 循环实现程序功能。 f(1)=1;f(2)=1;i=2; while i<=n f(i+1)=f(i-1)+f(i); i =i+1; end 在命令窗口输入调用命令调用函数,元素个数n=10, 结果:( ) (3)使用for 循环实现,重新编制上述函数。 结果:(

) (4)当Fibonacci 数列中某个元素大于50时,用“break ”命令退出循环结构,修改程序如下: 结果:( ) (5)将该.m 文件生成P 码文件: >>pcode shiyan0501 将 shiyan0501.m 删除,重新调用函数文件,执行结果如下: 结果:( ) 2.使用函数调用 计算 2 5 21 22 2432(2)!arcsin ,143 1645 2 (!)(21) n n x x n x x x x n n +???≈+ + ++

Matlab程序设计教程(第二版)刘卫国课后参考答案解析

第二章 1 求下列表达式的值。 (1) w=sqrt(2)*(1+0.34245*10^(-6)) (2) a=3.5; b=5; c=-9.8; x=(2*pi*a+(b+c)/(pi+a*b*c)-exp(2))/tan(b+c)+a (3) a=3.32; b=-7.9; y=2*pi*a^(2)*[(1-pi/4)*b-(0.8333-pi/4)*a] (4) t=[2,1-3*i;5,-0.65]; z=1/2*exp(2*t)*log(t+sqrt(1+t^(2))) 2 求下列表达式 A=[-1,5,-4;0,7,8;3,61,7]; B=[8,3,-1;2,5,3;-3,2,0]; (1) A+6*B A^2-B+eye (2) A*B A.*B B.*A (3) A/B B\A (4) [A,B] [A([1,3],:);B^2] 3 根据已知,完成下列操作 (1) A=[23,10,-0.778,0;41,-45,65,5;32,5,0,32;6,-9.54,54,3.14]; K=find(A>10&A<25); A(K) (2) A=[23,10,-0.778,0;41,-45,65,5;32,5,0,32;6,-9.54,54,3.14]; B=A(1:3,:) C=A(:,1:2) D=A(2:4,3:4) E=B*C (3) E

f=input('输入一个数:','s'); f(end :-1:1) 2 用if语句 score=input('请输入成绩:'); if score>=90&&score<=100 disp('A'); elseif score>=80&&score<=89 disp('B'); elseif score>=70&&score<=79 disp('C'); elseif score>=60&&score<=69; disp('D'); elseif score<60&&score>=0; disp('E'); else disp('出错'); end 用switch语句 score=input('请输入成绩:'); switch fix(score/10) case {9,10} disp('A'); case {8} disp('B'); case {7} disp('C'); case {6} disp('D'); case {0,1,2,3,4,5} disp('E'); otherwise disp('出错'); end 第四章1题 1) X=0:10; Y=x-x.^3/6; P lot(x,y)

matlab程序设计实例

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

MATLAB程序设计教程课后答案.doc

MATLAB第二版课后答案unit3-8 unit3 实验指导 1、 n=input('请输入一个三位数:'); a=fix(n/100); b=fix((n-a*100)/10); c=n-a*100-b*10; d=c*100+b*10+a 2( 1) n=input(' 请输入成绩 '); switch n case num2cell(90:100) p='A'; case num2cell(80:89) p='B'; case num2cell(70:79) p='C'; case num2cell(60:69) p='D'; otherwise p='E'; end price=p (2) n=input(' 请输入成绩 '); if n>=90&n<=100 p='A'; elseif n>=80&n<=89 p='B'; elseif n>=70&n<=79 p='C'; elseif n>=60&n<=69 p='D'; else p='E'; end price=p (3) try n; catch price='erroe' end 3 n=[1,5,56,4,3,476,45,6,3,76,45,6,4,3,6,4,23,76,908,6];

a=n(1) ; b=n(1); for m=2:20 if n(m)>a a=n(m); elseif n(m)=0 disp(A([n],:)); elseif n<0 disp(lasterr); else disp(A([6],:)); disp(lasterr); end 7( 1) f=[];

《MATLAB语言程序设计》练习题1(08通信)

《MATLAB语言程序设计》练习题1(2010.5) 一、填空题 1.设有程序 A=[1,2,3,4;6,-5,6,3];B=[2,4,5,7];A1=A(:,[1 3 4]);A2=A(1,[2,3]). 将下列命令的运行结果填在横线上 size(A)= ;A(1,: ).*B= ;length(B)= ; A1= ; A2= ;A+3= ;B.^2= 2. A=[1,2,3,4;6,-5,6,3];B=[-2,4,-6,7,9];A1=(A<3);A2=all(A(:,1)<5);A3=any(A(2,:)<10); A4=find(abs(B)<3| abs(B)>7); A5=find(abs(B)<7& abs(B)>3) A1= ; A2= ; A3= ; A4= ;A5= .

; ).4(; 2(3).);BA R(A R 2).A (|;)(|).1(,21 4154 101 ,32 1214 1531 1 1 V U A E B A B AX AB D B A :、T T 与特征向量 的特征值 求解矩阵方程 的秩设题试编写程序计算下列各二+=+==???? ? ? ?--=????? ? ?-=--- ??? ?? ?? ??=+-=++-=++=-+=++???????=-++-=-++=-++=+++?? ?=-++=+++3 512332232.31 23322352:.2221 432:.13213213213213214321 43214321432143214321x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 、超定方程组 恰定方程组 欠定方程组 程组的程序 写出求解下列各线性方三 .)(,cos 3)sin()sin(cos 2sin )(.3;)(,,1 sin )ln(.2;02.1: ,4 321 2 2 2 2 3 变换的计算并计算生成符号矩阵 的根求方程下列各题运用符号运算功能计算四Laplace t A wt e wt t t te t t t te t t A dx x A dx A d x x e s x x A x x 、ut t t x ? ??? ? ??? ? ?=??? ? ??? ?+==+---? 的解 函数求解微分方程用1)0(')0(,sin '2".4===++x x t x x x dsolve (1) 若.2 c bt at y t y ++=的经验公式为 与试编写程序计算出上式中的a 、b 、c;

文本预览
相关文档 最新文档