偏导数的可视化

devtools/2024/9/24 10:47:27/

偏导数的可视化

flyfish

函数 f ( x , y ) = sin ⁡ ( x ) ⋅ cos ⁡ ( y ) f(x, y) = \sin(x) \cdot \cos(y) f(x,y)=sin(x)cos(y)
在这里插入图片描述

import numpy as np
from sympy import lambdify, sin, cos
from sympy.abc import x, y
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建一个用于计算和可视化的类
class FunctionVisualization:def __init__(self, num=301):"""初始化类,并设置网格数量和函数定义"""self.num = num# 创建 x 和 y 的坐标轴self.x_array = np.linspace(-3, 3, self.num)self.y_array = np.linspace(-3, 3, self.num)self.xx, self.yy = np.meshgrid(self.x_array, self.y_array)# 定义较简单的函数 f_xyself.f_xy = sin(x) * cos(y)# 将 SymPy 函数转换为 NumPy 可执行的函数self.f_xy_fcn = lambdify([x, y], self.f_xy)def compute_function_values(self):"""计算函数在网格上的值"""return self.f_xy_fcn(self.xx, self.yy)def plot_function(self, f_zz):"""绘制函数的三维图和二维等高线图:param f_zz: 函数在网格上的值"""fig = plt.figure(figsize=(12, 6))# 设置颜色方案contour_color = '#008080'  # 青色等高线contourf_color = 'viridis'  # 等高线填充颜色图谱# 三维图ax = fig.add_subplot(1, 2, 1, projection='3d')ax.plot_wireframe(self.xx, self.yy, f_zz, color=[0.7, 0.7, 0.7], linewidth=0.25)# 绘制等高线colorbar = ax.contour(self.xx, self.yy, f_zz, 20, cmap=contourf_color)ax.contour(self.xx, self.yy, f_zz, levels=[0], colors=contour_color, linestyles='-')fig.colorbar(colorbar, ax=ax)ax.set_proj_type('ortho')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel(r'$f(x, y)$')ax.view_init(azim=-135, elev=30)ax.grid(False)# 二维等高线图ax2 = fig.add_subplot(1, 2, 2)colorbar = ax2.contourf(self.xx, self.yy, f_zz, 20, cmap=contourf_color)ax2.contour(self.xx, self.yy, f_zz, levels=[0], colors=contour_color, linestyles='-')fig.colorbar(colorbar, ax=ax2)ax2.set_xlabel('x')ax2.set_ylabel('y')ax2.set_aspect('equal', adjustable='box')plt.tight_layout()plt.show()def visualize_function(self):"""计算并可视化函数"""# 计算函数值f_zz = self.compute_function_values()# 绘制函数self.plot_function(f_zz)# 创建类的实例并进行可视化
visualization = FunctionVisualization()
visualization.visualize_function()

计算并可视化 f ( x , y ) = sin ⁡ ( x ) ⋅ cos ⁡ ( y ) f(x, y) = \sin(x) \cdot \cos(y) f(x,y)=sin(x)cos(y)关于 x 的偏导数
在这里插入图片描述
计算并可视化 f ( x , y ) = sin ⁡ ( x ) ⋅ cos ⁡ ( y ) f(x, y) = \sin(x) \cdot \cos(y) f(x,y)=sin(x)cos(y) 关于 y 的偏导数在这里插入图片描述

compute_function_values:计算函数在网格上的值。
compute_partial_derivative:计算关于给定变量的偏导数
plot_partial_derivative:绘制偏导数的三维图和二维等高线图。
visualize:调用方法来计算并可视化偏导数

import numpy as np
from sympy import lambdify, diff, sin, cos
from sympy.abc import x, y
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建一个用于计算和可视化的类
class FunctionVisualization:def __init__(self, num=301):"""初始化类,并设置网格数量和函数定义"""self.num = num# 创建 x 和 y 的坐标轴self.x_array = np.linspace(-3, 3, self.num)self.y_array = np.linspace(-3, 3, self.num)self.xx, self.yy = np.meshgrid(self.x_array, self.y_array)# 定义较简单的函数 f_xyself.f_xy = sin(x) * cos(y)# 将 SymPy 函数转换为 NumPy 可执行的函数self.f_xy_fcn = lambdify([x, y], self.f_xy)def compute_function_values(self):"""计算函数在网格上的值"""return self.f_xy_fcn(self.xx, self.yy)def compute_partial_derivative(self, variable):"""计算函数关于某一变量的偏导数:param variable: 求导的变量,x 或 y"""# 计算偏导数df_d_var = diff(self.f_xy, variable)# 将偏导数函数转换为可执行函数df_d_var_fcn = lambdify([x, y], df_d_var)# 返回在网格上的偏导数return df_d_var_fcn(self.xx, self.yy)def plot_partial_derivative(self, variable, df_d_var_zz):"""绘制函数关于某一变量的偏导数的三维图和二维等高线图:param variable: 偏导数变量:param df_d_var_zz: 偏导数在网格上的值"""fig = plt.figure(figsize=(12, 6))# 设置颜色方案contour_color = '#FFA500'  # 橙色等高线contourf_color = 'coolwarm'  # 等高线填充颜色图谱# 三维图ax = fig.add_subplot(1, 2, 1, projection='3d')ax.plot_wireframe(self.xx, self.yy, df_d_var_zz, color=[0.7, 0.7, 0.7], linewidth=0.25)# 绘制等高线colorbar = ax.contour(self.xx, self.yy, df_d_var_zz, 20, cmap=contourf_color)ax.contour(self.xx, self.yy, df_d_var_zz, levels=[0], colors=contour_color, linestyles='-')fig.colorbar(colorbar, ax=ax)ax.set_proj_type('ortho')ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel(fr'$\frac{{\partial f}}{{\partial {variable}}}$')ax.view_init(azim=-135, elev=30)ax.grid(False)# 二维等高线图ax2 = fig.add_subplot(1, 2, 2)colorbar = ax2.contourf(self.xx, self.yy, df_d_var_zz, 20, cmap=contourf_color)ax2.contour(self.xx, self.yy, df_d_var_zz, levels=[0], colors=contour_color, linestyles='-')fig.colorbar(colorbar, ax=ax2)ax2.set_xlabel('x')ax2.set_ylabel('y')ax2.set_aspect('equal', adjustable='box')plt.tight_layout()plt.show()def visualize(self):"""计算并可视化函数及其偏导数"""# 计算并可视化 f_xy 关于 x 的偏导数df_dx_zz = self.compute_partial_derivative(x)self.plot_partial_derivative('x', df_dx_zz)# 计算并可视化 f_xy 关于 y 的偏导数df_dy_zz = self.compute_partial_derivative(y)self.plot_partial_derivative('y', df_dy_zz)# 创建类的实例并进行可视化
visualization = FunctionVisualization()
visualization.visualize()

http://www.ppmy.cn/devtools/94249.html

相关文章

解决ONENOTE复制文字到外部为图片(Ditto)

默认情况下,在ONENOTE中记录的文字,在复制粘贴到外部时,会成为一张图片格式 如下图这段文字,粘贴到QQ中变为了图片 解决办法:安装Ditto Ditto下载链接 点击Download下载 双击安装.exe,选择安装路径后&…

2024.8.7(SQL语句)

一、回顾 1、主服务器 [rootslave-mysql ~]# yum -y install rsync [rootmaster-mysql ~]# yum -y install rsync [rootmaster-mysql ~]# tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar [rootmaster-mysql ~]# ls [rootmaster-mysql ~]# tar -xf mysql-8.0.33-linux-glib…

Java如何使用 HTTP 请求下载图片

工具类: public FileInputStream fileDownload(String fileLink) throws Exception {System.out.println("开始下载"fileLink);// 转码中文URL url new URL(encodeURLChinese(fileLink));System.out.println("fileLink:"url);// 开始下载Trust…

三防平板满足多样化定制为工业领域打造硬件解决方案

在当今工业领域,数字化、智能化的发展趋势日益显著,对于高效、可靠且适应各种复杂环境的硬件设备需求不断增长。三防平板作为一种具有坚固耐用、防水防尘防摔特性的工业级设备,正以其出色的性能和多样化的定制能力,为不同行业的应…

云计算虚拟化Libvirt Domain XML Format中文版—对照学习使用

笔者在云计算工作中记录虚拟化Libvirt XML相关学习内容 说明资料源:部分术语及libvirt目标域XML格式(Domain XML Format)1. 元素和属性概述(Element and attribute overview)1.1 通用元数据(General metadata)1.2 操作系统启动(Operating system booting)1.2.1 BIOS…

江协科技STM32学习笔记

第01章 STM32简介及开发环境搭建 1.1 STM32简介 1.1.1 STM32F103C8T6 系列:主流系列STM32F1 内核:ARM Cortex-M3 主频:72MHz RAM:20K(SRAM) ROM:64K(Flash) 供电…

网络基础知识(一遍过)

文章目录 导读1、局域网定义与优缺点局域网的组建 2、广域网定义与特点技术与应用与局域网的区别安全性与稳定性 3、IP地址IP地址的作用IP地址的类型 4、端口号5、协议6、协议分层一、协议分层的定义二、协议分层的好处三、常见的协议分层模型四、协议分层的工作原理 导读 计算…

ECMAScript6语法:箭头函数

在 ES6 中,可以使用箭头“>”定义函数。根据不同的使用场景,箭头函数有多种不同的语法。箭头函数的基本组成包括函数参数、箭头和函数体。 1、箭头函数的语法 第一种情况:箭头函数中只有一个参数,函数体中只有一条语句&#…