当前位置:   article > 正文

Python数学实验与建模 课后习题第2章解析_python数学实验与建模课后答案第二章

python数学实验与建模课后答案第二章

习题2

2.1 考虑下面的 3 × 4 3\times4 3×4矩阵

[ 1 2 3 4 5 6 7 8 9 10 11 12 ] \begin {bmatrix} 1 & 2 &3&4 \\ 5 & 6 &7&8\\ 9&10&11&12 \end{bmatrix} \quad 159261037114812
(1)使用array函数在Python中构建该矩阵

A = np.array(((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)))
  • 1

(2)使用arange函数构造该矩阵

A = np.arange(1, 13).reshape(3, 4)
  • 1

(3)表达式A[2,:]的结果是什么?类似的表达式A[2:]的结果是什么?

[ 9 10 11 12]
[[ 9 10 11 12]]
  • 1
  • 2

2.2 构造范德蒙德矩阵(Vandermonde matrix

[ 1 1 1 1 1 2 4 8 1 3 9 27 1 4 16 64 ] \begin {bmatrix} 1 & 1 &1&1 \\ 1 & 2 &4&8 \\1&3&9&27 \\1&4&16&64 \end{bmatrix} \quad 1111123414916182764
提示:Numpy模块中可以通过vander命令直接构建

v = np.array([1,2,3,4])
V = np.vander(v, increasing=True)
  • 1
  • 2

numpy.vander使用方法
numpy.vander(x, N=None, increasing=False) 生成范德蒙矩阵。

2.3 令 v = [ 1 , − 1 , 1 ] T v=[1,-1,1]^T v=[1,1,1]T,构造如下投影矩阵:

P = v v T v T v 和 Q = I − P P=\frac{vv^T}{v^Tv} 和Q=I-P P=vTvvvTQ=IP

v = np.array([[1, -1, 1]]).T
P = np.dot(v,v.T)/np.dot(v.T,v)
I = np.eye(3)
Q = I - P 
  • 1
  • 2
  • 3
  • 4

2.4 编写程序,生成包含1000个0~100内的随机整数,并统计每个元素的出现次数

import random
x = [random.randint(0, 100) for i in range(1000)]
d = set(x)
print(d)
for i in d:
    print(i, ':', x.count(i))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.5 编写程序,生成包含20个随机数的数组,然后将前10个元素升序排列,后10个元素降序排列,并输出结果

import numpy as np
x = np.random.randint(100, size=20)
x[0:10].sort()  # 前10个元素升序排列
x[10:20] = abs(np.sort(-x[10:20]))  # 后十个元素降序排列
  • 1
  • 2
  • 3
  • 4

2.6 求矩阵 A = [ 9 80 205 40 90 − 60 96 1 210 − 3 101 89 ] A=
[980205409060961210310189]
\quad
A=990210806032059610140189
的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。矩阵可能存在多个鞍点,也可能没有鞍点

import numpy as np

A = np.array([[9, 80, 205, 40],
              [90, -60, 96, 1],
              [210, -3, 101, 89]])

for i in range(A.shape[0]):
    for j in range(A.shape[1]):
        if A[i][j] == max(A[i]) and A[i][j] == max(A[:, j]):
            print('鞍点为:', A[i][j])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.7 假设有一个英文文本文件,编写程序读取其内容,并将其中的大写字母变为小写字母,小写字母变为大写字母。

f = open('problem.txt', 'r', encoding='utf-8')  # 为输入打开一个文本文件
s = f.read()  # 读取
s = s.swapcase()  # 大小写互换
f = open('problem.txt', 'w', encoding='utf-8')  # 为输出建立一个新的文本文件
f.write(s)
f.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.8 在同一个图形界面中分别画出6条曲线

y = k x 2 s i n ( x ) + 2 k + c o s ( x 3 ) , k = 1 , 2 , . . . , 6 y=kx^2sin(x)+2k+cos(x^3),k=1,2,...,6 y=kx2sin(x)+2k+cos(x3),k=1,2,...,6
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10, 10, 0.01)
plt.figure()
for i in range(6):
    k = i + 1
    y = k * x ** 2 * np.sin(x) + 2 * k + np.cos(x ** 3)
    text = 'k = ' + str(k)
    plt.plot(x, y, label=text)

plt.legend()
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.9 把屏幕开成2行3列6个子窗口,每个子窗口画一条曲线,画出曲线

y = k x 2 s i n ( x ) + 2 k + c o s ( x 3 ) , k = 1 , 2 , . . . , 6 y=kx^2sin(x)+2k+cos(x^3),k=1,2,...,6 y=kx2sin(x)+2k+cos(x3),k=1,2,...,6
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10, 10, 0.01)
plt.figure()
for i in range(6):
    k = i + 1
    ax = plt.subplot(2, 3, k)
    y = k * x ** 2 * np.sin(x) + 2 * k + np.cos(x ** 3)
    text = '$k = ' + str(k) + '$'
    plt.plot(x, y, label=text)
    plt.legend()
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.10 分别画出下列二次曲面:

(1)单叶双曲面
x 2 8 + y 2 10 − z 2 6 = 1 \frac{x^2}{8}+\frac{y^2}{10}-\frac{z^2}{6}=1 8x2+10y26z2=1
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-20, 20, 0.1)
y = np.arange(-20, 20, 0.1)
X, Y = np.meshgrid(x, y)
ax = plt.subplot(1, 1, 1, projection='3d')
Z = (1 - X ** 2 / 8 - Y ** 2 / 10) * 6
ax.plot_surface(X, Y, Z, cmap='viridis')
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.set_zlabel(r'$z$')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(2)双叶双曲面
x 2 8 − y 2 12 − z 2 8 = 1 \frac{x^2}{8}-\frac{y^2}{12}-\frac{z^2}{8}=1 8x212y28z2=1
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-20, 20, 0.1)
y = np.arange(-20, 20, 0.1)
X, Y = np.meshgrid(x, y)
ax = plt.subplot(1, 1, 1, projection='3d')
Z = (1 - X ** 2 / 8 + Y ** 2 / 12) * 8
ax.plot_surface(X, Y, Z, cmap='rainbow')
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.set_zlabel(r'$z$')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(3)椭圆抛物面
x 2 10 + y 2 6 = z \frac{x^2}{10}+\frac{y^2}{6}=z 10x2+6y2=z
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-20, 20, 0.1)
y = np.arange(-20, 20, 0.1)
X, Y = np.meshgrid(x, y)
Z = X ** 2 / 10 + Y ** 2 / 6
ax = plt.subplot(1, 1, 1, projection='3d')
ax.plot_surface(X, Y, Z)
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.set_zlabel(r'$z$')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.11 莫比乌斯带是一种拓扑学结构,它只有一个面和一个边界,是1858年德国数学家、天文学家莫比乌斯和约翰·李斯丁独立发现的,其参数方程为 { x = ( 2 + s 2 cos ⁡ t 2 ) cos ⁡ t y = ( 2 + s 2 cos ⁡ t 2 ) sin ⁡ t z = s 2 sin ⁡ t 2 \left\{
x=(2+s2cost2)costy=(2+s2cost2)sintz=s2sint2
\right.
x=(2+2scos2t)costy=(2+2scos2t)sintz=2ssin2t
其中, 0 ≤ t ≤ 2 π , − 1 ≤ s ≤ 1 0\leq t\leq2\pi,-1\leq s \leq 1 0t2π,1s1。绘制莫比乌斯纽带

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

ax = plt.axes(projection='3d')
s = np.linspace(-1, 1, 1000)
t = np.linspace(0, 2 * np.pi, 1000)
x = (2 + s / 2 * np.cos(t / 2) * np.cos(t))
y = (2 + s / 2 * np.cos(t / 2) * np.sin(t))
z = s / 2 * np.sin(t / 2)
ax.plot3D(x, y, z, 'k')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.12 画出如下函数的等高线,并进行标注

(1) z = x e − x 2 − y 2 , − 2 ≤ x ≤ 2 , − 2 ≤ y ≤ 3 ; z=xe^{-x^2-y^2},-2\leq x\leq 2,-2\leq y\leq3; z=xex2y2,2x2,2y3;
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2, 2, 1000)
y = np.linspace(-2, 3, 2000)
z = np.zeros((len(y), len(x)))
for i in range(len(x)):
    for j in range(len(y)):
        z[j][i] = x[i] * np.exp(-x[i] ** 2 - y[j] ** 2)
contr = plt.contour(x, y, z)
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.clabel(contr)
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

(2) z = ( 1 − x 2 − y 2 ) e − y 3 3 , − 1.5 ≤ x ≤ 2 , − 1.5 ≤ y ≤ 2 z=(1-x^2-y^2)e^{\frac{-y^3}{3}},-1.5\leq x \leq2,-1.5\leq y\leq2 z=(1x2y2)e3y3,1.5x2,1.5y2
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1.5, 2, 1000)
y = np.linspace(-1.5, 2, 2000)
z = np.zeros((len(y), len(x)))
for i in range(len(x)):
    for j in range(len(y)):
        z[j][i] = (1-x[i]**2-y[j]**2)*np.exp(-y[j]**3/3)
contr = plt.contour(x, y, z)
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.clabel(contr)
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.13 附件1:区域高程数据.xlsx(数据见封底二维码)给出了某区域 43.65 k m × 58.2 k m 43.65km\times58.2km 43.65km×58.2km的高程数据,画出该区域的三维网格图和等高线图,在A(30,0)和B(43,30)(单位:km)点处建立了两个基地,在等高线图上标注出这两个点。

在这里插入图片描述
在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

z = np.zeros((1165, 874))
x = np.arange(0, 50 * 874, 50)
y = np.arange(0, 50 * 1165, 50)
excel = pd.read_excel('附件1:区域高程数据.xlsx', header=None)  # 不加索引
excel = excel.drop([874, 875, 876, 877])  # 去掉无用行数据

for i in range(874):  # 把excel二维数组存储到Python中
    for j in range(1165):
        z[j][i] = int(excel.iloc[i, j])

ax = plt.axes(projection='3d')
X, Y = np.meshgrid(x, y)
ax.plot_surface(X, Y, z, cmap='viridis')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()

contr = plt.contour(x, y, z)
plt.xlabel('x')
plt.ylabel('y')
plt.clabel(contr)
plt.show()
  • 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
  • 26
  • 27
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/183228
推荐阅读
相关标签
  

闽ICP备14008679号