数模习题2(matlab)
实验 1 Matlab 程序设计与作图
一、实验目的
-
MATLAB 软件的数组操作及运算练习;
-
直接使用 MATLAB 软件进行作图练习;
-
用 MATLAB 语言编写命令 M 文件和函数 M 文件;
-
学会简单的并行计算设计。
二.实验内容
1.
已知矩阵
\[ A =
\begin{bmatrix}
3&1&1\\
2&1&2\\
1&2&3\\
\end{bmatrix} ,
B =
\begin{bmatrix}
1&1&-1\\
2&-1&0\\
1&0&1\\
\end{bmatrix}
\]
要求:(1)屏幕输出 \(A\) 与 \(B\);(2)\(A\) 的转置 \(A^T\);(3)求 \(A+B\) 的值;(4)求 \(A-B\) 的值;(5)求 \(4A\);(6)求 \(A \times B\);(7)求 \(A^{-1}\);(8)求 \(B/A\) 及 \(B \times A^{-1}\) ;(9)求 \(B \backslash A\) 及 \(A^{-1} \times B\)。
>> A = [3 1 1;2 1 2;1 2 3]
A =
3 1 1
2 1 2
1 2 3
>> B = [1 1 -1;2 -1 0;1 0 1]
B =
1 1 -1
2 -1 0
1 0 1
>> A.'
ans =
3 2 1
1 1 2
1 2 3
>> A + B
ans =
4 2 0
4 0 2
2 2 4
>> A - B
ans =
2 0 2
0 2 2
0 2 2
>> 4 * A
ans =
12 4 4
8 4 8
4 8 12
>> A * B
ans =
6 2 -2
6 1 0
8 -1 2
>> A ^ (-1) %% inv(A)
ans =
0.2500 0.2500 -0.2500
1.0000 -2.0000 1.0000
-0.7500 1.2500 -0.2500
>> B / A
ans =
2.0000 -3.0000 1.0000
-0.5000 2.5000 -1.5000
-0.5000 1.5000 -0.5000
>> B * A^(-1)
ans =
2.0000 -3.0000 1.0000
-0.5000 2.5000 -1.5000
-0.5000 1.5000 -0.5000
>> B\A %% 左除,对应线性方程 B*X=A 的解,此处等价于inv(B)*A
ans =
1.5000 1.0000 1.5000
1.0000 1.0000 1.0000
-0.5000 1.0000 1.5000
>> A^(-1) * B %% 此处等价于A\B
ans =
0.5000 0.0000 -0.5000
-2.0000 3.0000 0.0000
1.5000 -2.0000 0.5000
>>
2.
有一函数 $f(x,y)= x^2+sinxy+2y $,写一程序,输入自变量的值,输出函数值。
>> f = @(x,y) x^2 + sin(x*y) + 2*y
f =
包含以下值的 function_handle:
@(x,y)x^2+sin(x*y)+2*y
>> f(1,pi/2)
ans =
5.1416 %% 2 + pi
>>
3.
用 plot
fplot
分别绘制函数 \(y=cos(tan(\pi x))\) 图形。
>> x = -1:0.001:1;
>> y = cos(tan(pi*x));
>> plot(x,y)
>> fplot(@(x) cos(tan(pi*x)),[-1,1])
4.
绘制函数的图形:
\[\left\{
\begin{matrix}
x=t-sint^3 \\ y=1-cos^3t
\end{matrix}
\right.
\quad ,t \in [0,2\pi]
\]
>> t = 0:0.01*pi:2*pi;
>> x = t-sin(t.^3);
>> y = 1-(cos(t)).^3;
>> plot(x,y) %%或者用fplot(@(t)(t-sin(t^3)),@(t)(1-(cos(t))^3),[0,2*pi])
5.
作出下列曲面的三维图形:
\[\left\{
\begin{matrix}
x = (1+cosu)cosv \\ y = (1+cosu)sinv \\ z=sinu
\end{matrix}
\right.
\quad ,u \in (0,2 \pi),v \in (0,2 \pi)
\]
>> u = linspace(0,2*pi,100);
>> v = linspace(0,2*pi,100);
>> [uu,vv] = meshgrid(u,v);
>> x = (1 + cos(uu)) .* cos(vv);
>> y = (1 + cos(uu)) .* sin(vv);
>> z = sin(uu);
>> surf(x,y,z)
6.
建立一个 M 文件:求所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如:153 是一个水仙花数,因为 153=13+53+33。
for i = 1:1:9
for j = 0:1:9
for k = 0:1:9
if i^3 + j^3 + k^3 == i*100 + j*10 + k
disp(i*100+j*10+k)
end
end
end
end
>> Q6
153
370
371
407
7.
编写一个脚本文件,要求计算出一个最小的正整数,使它的阶乘大于 200000.
n = 1;
k = 1;
while n <= 2 * 10^5
n = n * k;
k = k + 1;
end
disp(k-1)
>> Q7
9
8.
编写一个脚本文件,要求:当输入两个正整数时,返回这两个正整数的最大公约数与最小公倍数。
a = input('');
b = input('');
fprintf("gcd:%d\n",gcd(a,b))
fprintf("lcm:%d\n",lcm(a,b))
>> Q8
24
32
gcd:8
lcm:96
9.
画一个以原点为中心,10为半径的五角星,并让它以角速度10°/秒绕原心逆时针旋转(作图动画可由pause函数实现)
angl = 0;
tim = 0.1;
step = 0;
while step <= 100
cla;
n = 1:2:11;
x = sin(0.4*n*pi);
y = cos(0.4*n*pi);
xx = x * cosd(angl) - y * sind(angl);
yy = x * sind(angl) + y * cosd(angl);
plot(xx,yy,'k');
axis equal;
angl = angl + 10 * tim;
pause(tim);
step = step + 1;
end
10.
设计并行计算程序,完成下列小问题:
- 随机生成10个数值在 \([0,5]\) 之间的二维向量,并计算它们的长度;
- 将第一问的向量作为点坐标,计算它们到直线 \(3x+4y=3\) 的距离;
- 在正方形 \([-5,5] \times [-5,5]\) 中,随机生成10个点,计算它们到原点的距离,对距离小于6的点,计算 \(sin(xy)\) ;否则计算 \(sin(x)+sin(y)\) 。
>> vec = 5 * rand(10,2)
vec =
3.2787 3.5302
0.1786 0.1592
4.2456 1.3846
4.6700 0.2309
3.3937 0.4857
3.7887 4.1173
3.7157 3.4741
1.9611 1.5855
3.2774 4.7511
0.8559 0.1722
>> len = sqrt(sum(vec.^2,2))
len =
4.8179
0.2392
4.4657
4.6757
3.4283
5.5952
5.0868
2.5219
5.7719
0.8731
>> A = 3;B = 4;C = -3;
>> dis = abs(A .* vec(:,1) + B .* vec(:,2) + C) / 5
dis =
4.1914
0.3655
3.0551
2.3867
1.8247
4.9671
4.4087
1.8451
5.1673
0.0513
>> x = -5 + 10 * rand(10,1);
>> y = -5 + 10 * rand(10,1);
>> dis = zeros(10,1);
>> anss = zeros(10,1);
>> for i = 1:10
dis(i) = sqrt(x(i)^2 + y(i)^2);
if dis(i) < 6
anss(i) = sin(x(i) * y(i));
else
anss(i) = sin(x(i)) + sin(y(i));
end
end
>> disp([x,y])
2.5127 3.4072
-2.4490 -2.4572
0.0596 3.1428
1.9908 -2.5648
3.9090 4.2926
4.5929 -1.5002
0.4722 -3.0340
-3.6138 -2.4892
-3.5071 1.1604
-2.4249 -0.2671
>> disp(dis)
4.2335
3.4692
3.1434
3.2467
5.8058
4.8317
3.0706
4.3881
3.6941
2.4396
>> disp(anss)
0.7602
-0.2623
0.1861
0.9236
-0.8782
-0.5703
-0.9905
0.4165
0.8005
0.6034