当前位置:首页 >> 数学 >>

Matlab习题与答案

习题 2 3.产生一均匀分布在(-5,5)之间的随机矩阵(50X2),要求精确到 小数点后一位。(准确的说 vpa 是用来设置有效数字的,这个与保留几位有明显的区
别!最好的方法还是使用 y=round(10*x)/10,但是效率低!)
6.利用 randn 函数产生均值为 0,方差为 1 的 10X10 正态分布随机矩 阵 A,然后统计 A 中大于-0.5 且小于 0.5 的元素的个数。

9.在一测量矩阵 A(100X3)中,存在有奇异值(假设大于 100 的值认
为是奇异值),编程实现删去奇异值所在的行。
M 函数文本:
function qts_2_9(a) %删去测量矩阵中存在奇异值的行 %函数调用形式为: %qts_2_9(a) %a 为测量矩阵; % [i,j]=size(a); d=1; for n=1:1:i for m=1:1:j
b=a(n,m); if (b>100) c(d)=n;
d=d+1; break; end end end for e=1:1:d-1 a(c(e)-e+1,:)=[]; end disp(a) end
10.在给定的 100X100 矩阵中,删去整行全为零的行,删去整列全为
零的列。

习题 3 2.将图形窗口分成两格,分别绘制正割和余割函数曲线,并加上适当 的标注。

5.将图形分成两个窗格,并分别绘制出函数在[-3,3]区间的曲线:

y1=2x+5

y2= x 2 -3x+1

利用 axis 调整刻度轴,使它们具有相同的缩放尺寸。

7.有一位研究生,一年中平均每月的费用为生活费 190 元,资料费 33, 电话费 45 元,购买衣服 42 元以及其他费用 45 元。请以图饼表示出 他每月的消费比例,并分离出表示资料费用的切片。请给图饼中每一 块加以标注。

9.画出下列函数的曲面及等高线。Z= x 2 ? y2 ? sin(xy) >> [x,y]=meshgrid(-3:.125:3); >> z=x.^2+y.^2+sin(x*y); >> c=ones(size(z)); >>figure(1) >>surfc(x,y,z,c),grid on >>title('z=x^2+y^2+sin(x*y)') >>xlabel('x') >>ylabel('y') >>zlabel('z')

10、画出各种大小和形状的球、柱体。 柱体 脚本程序: (1) >>figure(1) >> [X,Y,Z]=cylinder(2); >>surf(X,Y,Z) >>axis square >> [X,Y,Z]=cylinder(2,50); >>surf(X,Y,Z) >>axis([-2 2 -2 2 -2 2]) (2) >>figure(1) >> t=0:pi/10:2*pi; >> [x,y,z]=cylinder(2+sin(t)); >>surf(x,y,z) >>figure(2) >> [x,y,z]=cylinder(2+cos(t)); >>surf(x,y,z) >>figure(3) >> [x,y,z]=cylinder(2+tan(t)); >>surf(x,y,z)

球 脚本程序: (1) >>figure(1) >>sphere >>axis equal >> title('球') (2) >>figure(1) >> [x,y,z]=ellipsoid(4,4,4,3,3,3); >>surf(x,y,z) >>axis equal >> title('特殊的椭球') >>xlabel('x') >>ylabel('y') >>zlabel('z')
习题 4 1. 编写 M 函数实现:求一个数是否为素数,再编写一个主程序(脚
本文件),要求通过键盘输入一个整数,然后判断其是否为素数。

2. 编写 M 文件统计十进制数值中“0”的个数,然后编写脚本文件, 实现统计所有 1~2006 中“0”的总个数。

5.编写程序计算(x∈[-3 3],步长为 0.01)

? (-x 2 ? 4x ? 3) / 2 ? 3 ? x ? ?1

y=

? ?

? x2 ?1

?1? x ?1

??(?x 2 ? 4x ? 3) / 2 1 ? x ? 3

并画出[-3,3]上的曲线。

8.企业发放的奖金按个人完成的利润(I)提成。分段提成比例 k1 为

?10%

k1

?

?? ? ?

5% 2%

?? 1%

I ??10 10 ? I ? 20 20 ? I ? 40
I ? 40

即如王某完成 25 万元利润是,个人可得:

y=10x10%+10x5%+5x2%(万元)

就此编写程序,求企业职工的奖金。

习题 5

1. 求下列矩阵的逆矩阵和行列式的值。

?1 9 8?
(1) ??7 2 5??
??3 - 2 7??

?1 0 - 7 5 ?

(2) ??0 - 26 7

2

? ?

?7 4 3 5 ?

??8 - 3 2 15??

2. 求解下列线性代数的方程。

(1)

???2xx11

? ?

2x2 2x2

? 3x3 ? 5x3

? 11 ? 12

?? 3x1 ? 5x2 ? x3 ? 31

?

(2)

?? ?

?

3x1 ? x2 ? 5x4 ? 2 6x2 ? 7x3 ? 3x4 ? 4
4x2 ? 33 ? 7

??2x1 ? x2 ? 2x3 ? 6x4 ? 8

3 通过测量的一组数据

t1

2

3

4

5

6

7

8

9

10

y 4.842 4.362 3.754 3.368 3.169 3.083 3.034 3.016 3.012 3.005

分别采用 y1?t? ? c1 ? c2e?t 和 y2 ?t? ? d1 ? d2te?t 进行拟合,并画出拟合
曲线进行对比。

5.求解下列线性微分方程,并画出状态轨迹。

??5x1

? 5x2

? 6x3

?

?
x1

(1) ??3x1

?

2x2

? 5x3

?

?
x2

?

?

?? 2x1 ? x2 ? 4x3 ? x3

X(0)=[1 -4 5]’

(1)

? ?

x1

? 2x2

? 3x3

?

x4

?

?
x1

(2)

?? ?

?
3x1 ? x3 ? 2x4 ? x2
?

? ?

x1 ? 2x2 ? 5x4 ? x3
?

?? 2x1 ? 3x2 ? x4 ? x4

X(0)=[1 -1 2 1]’

(2)

15 产生一个信号 x=3sin( w1t) +10sin( w2t ?? ) +10randn(size(t)) 其中 w1=2? *20,w2=2? *200,? ? ? /4 这一信号表示被噪声污染 的信号,设计程序求 DFT,并绘图显示,说明 DFT 在信号检测 中的作用。

??

20

微分方程组

? ?

x1

?t

?

?

0.5
?

?

x1

?t

?

?? ?x 2

?

x1?t? ?

4x2 ?4?

当 t=0 时,x1(0)=1,x2(0)=-0.5,求微分方程 t??0, 25?上的解,

并画出 x1-x2 的系统轨迹。
习题六: P293 综合设计实例:
(1)每个班的平均成绩; (交结果)

(2)计算教师的实际学时数。(交结果)
3. 某学期期末共进行了五门课程考试,为开展宿舍之间的竞争, 要求将一个中的 n(5~8)个人的五门可的成绩组合成二维阵列。 假设你班共有十个宿舍,从 1 到十进行编号,将所有宿舍学生 的成绩组合成三维阵列,求出每个宿舍的平均值,并排列出名 次。 源代码如下: function average dorm.number=6;dorm.ave=0; dorm.mark=[60 70 80 90 100;61 62 63 64 65 ;71 72 73

74 75;76 77 78 79 80;81 81 82 82 83;78 76 72 31 99]; dorm(2).number=7;dorm(2).ave=0; dorm(2).mark=[71 71 62.3 68.3 71.2; 63.9 60.7 59.2
55.4 61.2;76.2 68.9 70.1 71.3 84;... 66.1 65.4 68.2 70.0 80;56.9 59.1 52.3 57.2 69;66.1
60.9 61.2 64.9 45;77.1 78.9 69.9 72.1 70]; dorm(3).number=8;dorm(3).ave=0; dorm(3).mark=[56.9 59.1 71 62.3 68.3;56 65 45 32 19;76
77 78 79 80;60 70 80 90 100;... 70.1 71.3 84 64 65;66.1 60.9 61.2 62 63;78 98 86 65
78;90 91 92 93 94]; dorm(4).number=6;dorm(4).ave=0; dorm(4).mark=[56.9 59.1 71 62.3 68.3;61 62 63 64
65 ;86.2 68.9 70.1 71.3 84;66.1 60.9 61.2 64.9 45;... 60 70 80 90 100;81 81 82 82 83;];
dorm(5).number=7;dorm(5).ave=0; dorm(5).mark=[56.9 59.1 71 62.3 68.3;61 62 63 64 65 ;56.2 68.9 70.1 71.3 84;66.1 60.9 61.2 64.9 45;...
60 70 80 90 100;81 81 82 82 83;45 46 47 48 49]; dorm(6).number=8;dorm(6).ave=0; dorm(6).mark=[90 80 80 95 100;61 62 63 64 65 ;71 72 73 74 75;76 77 78 79 80;81 81 82 82 83;...

78 76 72 31 99;56.9 59.1 71 62.3 68.3;61 62 63 64 65 ;];
dorm(7).number=6;dorm(7).ave=0; dorm(7).mark=[56.9 59.1 71 62.3 69.3;61 62 93 64 65 ;86.2 98.9 70.1 91.3 84;66.1 60.9 61.2 64.9 45;...
60 70 80 90 100;81 81 82 82 83;]; dorm(8).number=7;dorm(8).ave=0; dorm(8).mark=[56.9 59.1 71 62.3 68.3;91 92 63 94 65 ;86.2 68.9 70.1 71.3 84;66.1 60.9 61.2 64.9 45;...
60 70 80 90 100;81 81 82 82 83;45 46 47 48 49]; dorm(9).number=8;dorm(9).ave=0; dorm(9).mark=[90 80 80 95 100;71 72 83 94 95 ;81 92 93 74 75;76 77 78 79 80;81 81 82 82 83;...
78 76 72 31 99;56.9 59.1 71 62.3 68.3;61 62 63 64 65 ;];
dorm(10).number=6;dorm(10).ave=0; dorm(10).mark=[90 80 80 95 100;61 62 63 64 65 ;71 72 73 74 75;76 77 78 79 80;81 81 82 82 83;...
78 76 72 31 99;56.9 59.1 71 62.3 68.3;61 62 63 64 65 ;];
dorm1={'宿舍 1',dorm(1)}; dorm2={'宿舍 2',dorm(2)};

dorm3={'宿舍 3',dorm(3)}; dorm4={'宿舍 4',dorm(4)}; dorm5={'宿舍 5',dorm(5)}; dorm6={'宿舍 6',dorm(6)}; dorm7={'宿舍 7',dorm(7)}; dorm8={'宿舍 8',dorm(8)}; dorm9={'宿舍 9',dorm(9)}; dorm10={'宿舍 10',dorm(10)}; dormall=cat(3,dorm1,dorm2,dorm3,dorm4,dorm5,dorm6, dorm7,dorm8,dorm9,dorm10); s='的平均分是'; for i=1:10
ave=0;tol=0; tol=sum(sum(dormall{1,2,i}.mark)); dorm(i).ave=tol/(dormall{1,2,i}.number);
end for i=1:10
a=sort([dorm(1).ave dorm(2).ave dorm(3).ave dorm(4).ave dorm(5).ave...
dorm(6).ave dorm(7).ave dorm(8).ave dorm(9).ave dorm(10).ave]);

for j=1:10 if(a(1,11-i)==dorm(j).ave)
disp([dormall{1,1,j},s,num2str(dorm(j).ave)]); end
end end end

习题 7

1.

在[-1,1]区间上绘制出 y=-2x^2+4 的曲线, 并在

图中标注出最大值点的坐标.(第三题)

如果另有一条曲线 z=-2x^2+4+sin(2*PI*x)请在同一窗口

中绘制出这两条曲线并加上极值点的标注

2.

任意给定一句英文句子, 请提取其每个单词, 并

设计一结构, 其域有 Name、No、Length、Value,

分别用于存储每个单词的名称、句中序号、单词

长度、单词各个字符的 ASCII 码。

源代码如下:

function putout allwords=''; disp('请输入句子'); keyboard;

while(any(r)) [w,r]=strtok(r); allwords=strvcat(allwords,w);
end a=size(allwords); for i=1:a(1)
word(i).name=allwords(i,:); word(i).no=i;
word(i).length=length(allwords(i,:)); word(i).value=0;
word(i).value=sum(int8(allwords(i,:)))+wor d(i).value;
end for i=1:a(1)
disp(word(i).name) disp(word(i).no) disp(word(i).length) disp(word(i).value) end end