数模习题2(matlab)

实验 1 Matlab 程序设计与作图

一、实验目的

  1. MATLAB 软件的数组操作及运算练习;

  2. 直接使用 MATLAB 软件进行作图练习;

  3. 用 MATLAB 语言编写命令 M 文件和函数 M 文件;

  4. 学会简单的并行计算设计。

二.实验内容

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.

设计并行计算程序,完成下列小问题:

  1. 随机生成10个数值在 \([0,5]\) 之间的二维向量,并计算它们的长度;
  2. 将第一问的向量作为点坐标,计算它们到直线 \(3x+4y=3\) 的距离;
  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

posted @ 2024-04-01 21:49  theFaeSorceress  阅读(23)  评论(0编辑  收藏  举报