#全国大学生数学建模竞赛 #MWORKS体验官 打卡第五天
主题活动
发布于 2025-08-21 16:16:34
查看 3过去311天
#全国大学生数学建模竞赛 #MWORKS体验官 打卡第五天
题目

思路
第一题
第一问:首先,定义f(x,y,z)函数,然后使用sympy库里面的diff计算f(x,y,z)对x,y,z的偏导数
第二问:首先,定义g(x,y,z)函数,然后使用sympy库里面的diff计算g(x,y,z)对x,y,z的偏导数
第二题
第一问:首先,定义温度分布函数T(x,y),然后使用sympy库里面的diff计算T(x,y)对x,y的偏导数,即梯度
第二问:先计算在v=(3,4)处的单位向量,在和梯度相乘,即为方向导数。数学表达式如下

结果
第一题
第一问:
f 对 x 的偏导数: 2xy*(tan(x)*2 + 1) + 2ytan(x) + 3zexp(3xz)
f 对 y 的偏导数: 2xtan(x) - zsin(yz)
f 对 z 的偏导数: 3xexp(3xz) - ysin(yz)
第二问:
g 对 x 的偏导数: -y(x + yz + y)cos(xy)/sin(xy)**2 + 1/sin(xy)
g 对 y 的偏导数: -x(x + yz + y)cos(xy)/sin(xy)**2 + (z + 1)/sin(xy)
g 对 z 的偏导数: y/sin(xy)
第二题
第一问:
温度 T 在点 (0.5, -0.5) 处的梯度∇T: [-47.23665527 94.47331055]
第二问:
该点温度沿方向v=(3,4)的方向导数: 47.23665527410147
结果截图

代码
# 第一题
from sympy import symbols, diff, tan, exp, cos, sin
# 定义符号变量
x, y, z = symbols('x y z')
# 第一问
# 定义f(x,y,z)函数表达式
f = 2 * x * y * tan(x) + exp(3 * x * z) + cos(y * z)
# 对 x 求偏导
f_x = diff(f, x)
# 对 y 求偏导
f_y = diff(f, y)
# 对 z 求偏导
f_z = diff(f, z)
print("f 对 x 的偏导数:", f_x)
print("f 对 y 的偏导数:", f_y)
print("f 对 z 的偏导数:", f_z)
# 第二问
# 定义g(x,y,z)函数表达式
g = (x + y + y * z) / sin(x * y)
# 对 x 求偏导
g_x = diff(g, x)
# 对 y 求偏导
g_y = diff(g, y)
# 对 z 求偏导
g_z = diff(g, z)
print("g 对 x 的偏导数:", g_x)
print("g 对 y 的偏导数:", g_y)
print("g 对 z 的偏导数:", g_z)
# 第二题
import numpy as np
from sympy import lambdify, symbols, exp , diff
# 定义符号变量
x, y = symbols('x y')
# 定义温度分布函数T(x,y)
T = 100 * exp(-x**2 - 2 * y**2)
# 第一问求梯度∇T
T_x = diff(T, x)
T_y = diff(T, y)
# 将符号函数转换为可计算数值的函数
T_x_func = lambdify((x, y), T_x, 'numpy')
T_y_func = lambdify((x, y), T_y, 'numpy')
# 在点 (0.5, -0.5) 处计算梯度
grad_T = np.array([T_x_func(0.5, -0.5), T_y_func(0.5, -0.5)])
print("温度 T 在点 (0.5, -0.5) 处的梯度∇T:", grad_T)
# 第二问计算方向导数
v = np.array([3, 4])
# 计算 v 的模长
v_norm = np.linalg.norm(v)
# 单位向量
v_unit = v / v_norm
# 方向导数
directional_derivative = np.dot(grad_T, v_unit)
print("该点温度沿方向v=(3,4)的方向导数:", directional_derivative)
所属专栏:其他
产品信息:Syslab Online