偏导数的可视化

news2024/9/22 13:40:33

偏导数的可视化

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_xy
        self.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_xy
        self.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.coloradmin.cn/o/2034445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Ubuntu24.04搭建turn服务器】

1.安装与启动 首先安装coturn sudo apt-get update -y sudo apt-get install coturn -y可以看到默认的TURN服务是不启动的 # Uncomment it if you want to have the turnserver running as an automatic system service daemon # #TURNSERVER_ENABLED1编辑配置文件取消注释 …

【区块链+食品安全】湖南省食品行业联合会:溯链中国—基于区块链的食品安全可信追溯平台 | FISCO BCOS应用案例

食品安全追溯体系的建设,能够切实加强食品安全监管,确保人民群众饮食安全和身体健康,是创建食品安全城市必不可少的一部分。然而,中心化存储、信息孤岛、窜货是传统溯源行业最大痛点。区块链技术的快速发展, 使得防伪溯…

42.【C语言】冒泡排序

目录: 冒泡排序 *核心思想 *分析 *代码 *优化 15.冒泡排序(bubble sort) *核心思想:两两相邻的元素进行比较,满足条件则两者交换 *分析 现要求升序排序 输入: 9 8 7 6 5 4 3 2 1 0 输出:0 1 2 3 4 5 6 7 8 9 下面展示一趟冒泡排…

NLP从零开始------9文本进阶处理之文本相似度计算

1.文本相似度计算简介 在自然语言处理中,经常会涉及度量两个文本相似度的问题。在诸如对话系统和信息减速等中,度量句子或短语之间的相似度尤为重要。在新闻学传媒中应用文本相似度可以帮助读者快速检索到想要了解的报道。 文本相似度的定义式如下所示&a…

江协科技STM32学习笔记(第08章 USART串口)

第08章 USART串口 8.1 USART串口协议 8.1.1 通信接口 在STM32中,集成了很多用于通信的外设模块,比如下表所列。 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。 针对STM32内部没有的功能,比如蓝牙无…

04创建型设计模式——建造者模式

一、建造者模式简介 建造者模式(Builder Pattern)又被称为生成器模式。它旨在构建一个复杂对象的各个部分,而不需要指定该对象的具体类。该模式特别适用于对象的构建过程复杂且需要多个步骤的情况。建造者模式是一种对象创建型模式之一&…

【Mysql】mysql三种安装方式(二进制、yum、docker)

一、环境信息 centos7.6_x86、glib2.17 mysql官网下载地址:MySQL :: Download MySQL Community Server 二、 二进制安装 #下载解压安装包 [roothadoop03 ~]# wget -c https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz [ro…

PX4二次开发快速入门

文章目录 前言一、概述二、二次开发基础(自定义工作队列,自定义uorb)三、自定义串口驱动(添加一个毫米波雷达并定高)四、自定义I2C驱动(驱动一个oled显示屏)五、自定义参数六、自定义日志七、自…

机器学习笔记:编码器与解码器

目录 介绍 组成结构 代码实现 编码器 解码器 合并编码器-解码器 思考 介绍 在机器翻译中,输入的序列与输出的序列经常是长度不相等的序列,此时,像自然语言处理这种直接使用循环神经网络或是门控循环单元的方法就行不通了。因此&#x…

Qt 窗口:菜单、工具与状态栏的应用

目录 引言: 1. 菜单栏 1.1 创建菜单栏 1.2 在菜单栏中添加菜单 1.3 创建菜单项 1.4 在菜单项之间添加分割线 1.5 综合示例 2.工具栏 2.1 创建工具栏 2.2 设置停靠位置 2.3 设置浮动属性 2.4 设置移动属性 3. 状态栏 3.1 状态栏的创建 3.2 在状态栏中显…

Pytorch_cuda版本的在线安装命令

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 运行效果如下: 这个方法是直接从pytorch官网进行在线下载和安装。 cu121,表示当前您安装的cuda版本是12.1

java基础概念15-字符串

public static void main(String[] args) {String name "张三";name "李四";System.out.println(name);// 李四} name变量是一个引用变量,它存储的是对字符串对象的引用(即内存地址),而不是字符串对象本身的…

【Git】远程仓库新建分支后,拉到本地开发

1. 在远程仓库上创建分支 2. git fetch origin:在本地同步远程仓库的分支(获取远程仓库所有分支的所有修改) 3. git remote -a:查看所有分支(远程+本地) 4. git checkout -b 本地名 远程仓库…

华夏erp2.3代码审计

1 sql注入代码 该项目使用的是Mybits的数据库,直接在*.xml文件中全局搜索 ${我们选一个比较有可能有注入的 UserMapperEx.xml 进行查 看 回溯到UserMapperEx.java。 继续回溯到UserService.java。 继续回溯可以看到UserComponent.java中userName的值是从search中获取的。 在s…

CodeWave--创建实体与枚举

一、实体的创建 可视化开发左侧边栏选择数据模块,在实体菜单下,选择2处的“” ,即可创建一个默认的实体类,修改3处的实体名称,再在实体页签中,添加所需的字段即可。 注:id是自动生成的主键&…

域名是什么?1分钟快速了解

任何一个互联网上的设备,包括服务器或我们的个人电脑设备,都有一个对应的地址,即IP地址,(比如,192.168.1.1)。所有设备,都通过这个独立唯一的IP地址来互相访问。 由于IP地址不容易被记忆&#…

仅需三步,轻松制作电脑系统安装盘!

系统安装在现在可谓是必不可少的技能。自己系统坏了,不用到电脑安装,省了不少大洋,在朋友面前也可以装装大神,百利无一害呀,还不赶快学起来! 按照以前常规方式,每个电脑系统都会配有一个光盘,然后放到光驱里面读取安装,但随着笔记本越做越薄,光驱慢慢被取消了。所以…

广州网站建设运营团队

广州是中国南部的一座国际化大都市,拥有众多创新科技企业和互联网公司。随着数字经济的快速发展,网站建设和运营已经成为企业发展和推广的重要手段。作为一支专业的网站建设运营团队,我们深知在这个信息化时代,拥有一个优质的网站…

React 学习——react项目中加入echarts图

实现的代码如下: import * as echarts from echarts import { useEffect, useRef } from react; const Home ()>{const chartRef useRef(null);useEffect(()>{// const chartDom document.getElementById(main);//使用id获取节点const chartDom chartRef…

Linux系统驱动(十六)platform驱动

文章目录 一、简介(一)device、bus、driver模型(二)platform驱动原理 二、platform总线驱动的API(一)设备信息端(二)设备驱动端(三)驱动中获取设备信息函数&a…