习题2.6代码
import numpy as np
import pandas as pd
import sympy as sp
sp.init_printing(use_unicode=True)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['Times New Roman + SimSun + WFM Sans SC']
plt.rcParams['mathtext.fontset']='cm'
Times New Roman + SimSun + WFM Sans SC
simsum宋体, times new roman -*, simhei黑体, kaiti楷体,
dengxian等线, fangsong仿宋, Microsoft Yahei微软雅黑
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['figure.dpi'] = 200
plt.rcParams['figure.figsize'] = [4, 3]
plt.rcParams['font.size'] = 12
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
import pandas as pd
from numpy.linalg import norm
a = pd.read_excel('F:\python数学建模与算法\源程序\《Python数学建模算法与应用》程序和数据\第2章 Python使用入门\附件1:区域高程数据.xlsx', header=None, nrows=874)
b = a.values
[m, n]=b.shape
x0 = np.arange(m)50
y0 = np.arange(n)50;
s = 0
for i in np.arange(m-1):
for j in np.arange(n-1):
p1 = np.array([x0[i], y0[i], b[i, j]])
p2 = np.array([x0[i+1],y0[j],b[i+1,j]])
p3 = np.array([x0[i+1],y0[j+1],b[i+1,j+1]])
p4 = np.array([x0[i],y0[j+1],b[i,j+1]])
p12 = norm(p1-p2); p23 = norm(p3-p2); p13 = norm(p3-p1)
p14 = norm(p4-p1); p34 = norm(p4-p3)
L1 = (p12+p23+p13)/2;s1 = np.sqrt(L1(L1-p12)(L1-p23)(L1-p13))
L2 = (p13+p14+p34)/2; s2 = np.sqrt(L2(L2-p13)(L2-p14)(L2-p34))
s = s+s1+s2
print("Area:", s)
fig = plt.figure(dpi=800)
ax = fig.add_subplot(121, projection='3d')
X, Y = np.meshgrid(x0, y0)
ax.plot_surface(X, Y, b.T, cmap='viridis')
ax.set_xlabel('$x$', fontsize=4, labelpad=0.01)
ax.set_ylabel('$y$', fontsize=4, labelpad=0.01)
ax.set_zlabel('$z$', fontsize=4, labelpad=0.01)
ax.tick_params(which='major', labelsize=4)
fig = plt.figure(dpi=800)
ax = fig.add_subplot(111)
a = ax.contourf(x0, y0, b.T, 50, cmap='copper')
ax.tick_params(which='major', labelsize=8)
ax.set_aspect(1)
fig.colorbar(a, ax=ax)
ax.plot(30000, 0, marker='', markerfacecolor='w', markeredgecolor='k', markersize=6, markeredgewidth=0.5, clip_on=False, zorder=10)
ax.text(30500, 200, 'A', color='w', fontsize=8)
ax.plot(43000, 30000, marker='', markerfacecolor='w', markeredgecolor='k', markersize=6, markeredgewidth=0.5, clip_on=False, zorder=10)
ax.text(43600, 29500, 'B')
ax.xaxis.set_clip_on(False)
fig.show()