python用tanh画图

用tanh函数画图

圆形

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt# 创建一个二维网格
xx = np.linspace(-1, 1, 1000)
yy = np.linspace(-1, 1, 1000)
x_i, y_i = np.meshgrid(xx, yy)# 圆的半径和中心
r = 0.4
center_x, center_y = 0, 0  # 假设圆心在(0, 0)# 计算每个网格点到圆心的距离
distance = np.sqrt((x_i - center_x) ** 2 + (y_i - center_y) ** 2)# 使用tanh函数来近似表示半圆区域
# 注意:tanh函数不能直接用于表示半圆,但我们可以通过设置阈值来近似表示
epsilon = 0.01 # 控制tanh函数的“陡峭度”
u0 = 0.5 * (1 + np.tanh((r - distance) / epsilon))
u0[distance > r] = -1  # 强制圆外的值为-1# 绘制结果
fig, ax = plt.subplots()
p = ax.pcolormesh(x_i, y_i, u0, cmap='viridis', shading='auto')
ax.set_aspect('equal', 'box')  # 保持x和y轴的比例相同
fig.colorbar(p, ax=ax, label='u0 Value')# 设置标题和坐标轴标签
plt.title('Approximate Half Circle using tanh')
plt.xlabel('X')
plt.ylabel('Y')# 显示图形
plt.show()

半圆

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt# 创建一个二维网格
xx = np.linspace(-1, 1, 1000)
yy = np.linspace(-1, 1, 1000)
x_i, y_i = np.meshgrid(xx, yy)# 圆的半径和中心
r = 0.4
center_x, center_y = 0, -1  # 假设圆心在(0, -1)# 计算每个网格点到圆心的距离
distance = np.sqrt((x_i - center_x) ** 2 + (y_i - center_y) ** 2)# 使用tanh函数来近似表示半圆区域
# 注意:tanh函数不能直接用于表示半圆,但我们可以通过设置阈值来近似表示
epsilon = 0.01 # 控制tanh函数的“陡峭度”
u0 = 0.5 * (1 + np.tanh((r - distance) / epsilon))
u0[distance > r] = -1  # 强制圆外的值为-1# 绘制结果
fig, ax = plt.subplots()
p = ax.pcolormesh(x_i, y_i, u0, cmap='viridis', shading='auto')
ax.set_aspect('equal', 'box')  # 保持x和y轴的比例相同
fig.colorbar(p, ax=ax, label='u0 Value')# 设置标题和坐标轴标签
plt.title('Approximate Half Circle using tanh')
plt.xlabel('X')
plt.ylabel('Y')# 显示图形
plt.show()

两个圆形

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

import numpy as np
import matplotlib.pyplot as plt# 创建一个二维网格
xx = np.linspace(0, 1, 1000)
yy = np.linspace(0, 1, 1000)
x_i, y_i = np.meshgrid(xx, yy)# 圆的半径和中心
r1 = 0.15  # 如果要分开点,就设为0.14
r2 = 0.15  # 如果要分开点,就设为0.14
center_x1, center_y1 = 0.35, 0.5  # 圆心1
center_x2, center_y2 = 0.65, 0.5  # 圆心2# 计算每个网格点到圆心的距离
distance1 = np.sqrt((x_i - center_x1) ** 2 + (y_i - center_y1) ** 2)
distance2 = np.sqrt((x_i - center_x2) ** 2 + (y_i - center_y2) ** 2)# 使用tanh函数来近似表示半圆区域
# 注意:tanh函数不能直接用于表示半圆,但我们可以通设置阈值来近似表示
epsilon = 0.01 # 控制tanh函数的“陡峭度”
phi1 = np.tanh((r1 - distance1) / (2 * epsilon))
phi2 = np.tanh((r2 - distance2) / (2 * epsilon))u0 = np.maximum(phi1, phi2)
# u0 = 1 * (1 + phi1 + phi2)  # 两种都可以生成两个圆# 分别找出距离两个圆心都大于半径的点的索引
outside_circle1 = distance1 > r1
outside_circle2 = distance2 > r2# 使用逻辑与来找出两个条件都满足的点
outside_both_circles = np.logical_and(outside_circle1, outside_circle2)# 将这些点对应的u0值设置为-1
u0[outside_both_circles] = -1# 绘制结果
fig, ax = plt.subplots()
p = ax.pcolormesh(x_i, y_i, u0, cmap='viridis', shading='auto')
ax.set_aspect('equal', 'box')  # 保持x和y轴的比例相同
fig.colorbar(p, ax=ax, label='u0 Value')# 设置标题和坐标轴标签
plt.title('Approximate Half Circle using tanh')
plt.xlabel('X')
plt.ylabel('Y')# 显示图形
plt.show()

正方形

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt# 创建一个二维网格
xx = np.linspace(-1, 1, 1000)
yy = np.linspace(-1, 1, 1000)
x_i, y_i = np.meshgrid(xx, yy)# 正方形的中心和边长
center_x, center_y = 0, 0  # 假设正方形中心在(0, 0),为了简化计算
side_length = 0.5  # 正方形边长的一半# 使用tanh函数来近似正方形的四个边界
# 注意:这不是一个完美的正方形,只是一个近似
epsilon = 0.01  # 控制tanh函数的“陡峭度”# 近似上边界
u_top = 0.5 * (1 + np.tanh((side_length - np.abs(y_i - center_y)) / epsilon))
# 近似下边界
u_bottom = 0.5 * (1 + np.tanh((side_length - np.abs(y_i + center_y)) / epsilon))
# 近似左边界
u_left = 0.5 * (1 + np.tanh((side_length - np.abs(x_i - center_x)) / epsilon))
# 近似右边界
u_right = 0.5 * (1 + np.tanh((side_length - np.abs(x_i + center_x)) / epsilon))# 四个边界的交集(即正方形内部)应取得高值
u0 = np.minimum(np.minimum(u_top, u_bottom), np.minimum(u_left, u_right))
u0[u0 < 0.99] = -1  # 强制非正方形内部的值为-1(可调整阈值)
u0[u0 >= 0.99] = 1  # 强制正方形内部的值为1(可调整阈值)# 绘制结果
fig, ax = plt.subplots()
p = ax.pcolormesh(x_i, y_i, u0, cmap='viridis', shading='auto')
ax.set_aspect('equal', 'box')  # 保持x和y轴的比例相同
fig.colorbar(p, ax=ax, label='u0 Value')# 设置标题和坐标轴标签
plt.title('Approximate Square using tanh')
plt.xlabel('X')
plt.ylabel('Y')# 显示图形
plt.show()

长方形

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt# 创建一个二维网格
xx = np.linspace(-1, 1, 1000)
yy = np.linspace(-1, 1, 1000)
x_i, y_i = np.meshgrid(xx, yy)# 长方形的中心和尺寸
center_x, center_y = 0, 0  # 假设长方形中心在(0, 0)
width = 0.6  # 长方形的宽度
height = 0.4  # 长方形的高度
half_width = width / 2
half_height = height / 2# 使用tanh函数来近似长方形的四个边界
epsilon = 0.01  # 控制tanh函数的“陡峭度”# 近似上边界
u_top = 0.5 * (1 + np.tanh((half_height - (y_i - center_y)) / epsilon))
# 近似下边界
u_bottom = 0.5 * (1 + np.tanh((half_height - (center_y - y_i)) / epsilon))
# 近似左边界
u_left = 0.5 * (1 + np.tanh((half_width - (x_i - center_x)) / epsilon))
# 近似右边界
u_right = 0.5 * (1 + np.tanh((half_width - (center_x - x_i)) / epsilon))# 长方形的内部是四个边界的交集,取四个边界中的最小值
u0 = np.minimum.reduce([u_top, u_bottom, u_left, u_right])
u0[u0 < 0.99] = -1  # 强制非长方形内部的值为-1(可调整阈值)
u0[u0 >= 0.99] = 1  # 强制长方形内部的值为1(可调整阈值)# 绘制结果
fig, ax = plt.subplots()
p = ax.pcolormesh(x_i, y_i, u0, cmap='viridis', shading='auto')
ax.set_aspect('equal', 'box')  # 保持x和y轴的比例相同
fig.colorbar(p, ax=ax, label='u0 Value')# 设置标题和坐标轴标签
plt.title('Approximate Rectangle using tanh')
plt.xlabel('X')
plt.ylabel('Y')# 显示图形
plt.show()

边界上的长方形

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt# 创建一个二维网格
xx = np.linspace(-0.5, 0.5, 1000)
yy = np.linspace(0, 0.5, 1000)
x_i, y_i = np.meshgrid(xx, yy)# 长方形的中心和尺寸
center_x, center_y = 0, 0.0625  # 假设长方形中心在(0, 0)
width = 0.5  # 长方形的宽度(长)
height = 0.125  # 长方形的高度
half_width = width / 2
half_height = height / 2# 使用tanh函数来近似长方形的四个边界
epsilon = 0.01  # 控制tanh函数的“陡峭度”# 近似上边界
u_top = 1 * (1 + np.tanh((half_height - (y_i - center_y)) / epsilon))
# 近似下边界
u_bottom = 1 * (1 + np.tanh((half_height - (center_y - y_i)) / epsilon))
# 近似左边界
u_left = 1 * (1 + np.tanh((half_width - (x_i - center_x)) / epsilon))
# 近似右边界
u_right = 1 * (1 + np.tanh((half_width - (center_x - x_i)) / epsilon))# 长方形的内部是四个边界的交集,取四个边界中的最小值
u0 = np.minimum.reduce([u_top, u_bottom, u_left, u_right])
u0[u0 < 0.99] = -1  # 强制非长方形内部的值为-1(可调整阈值)
u0[u0 >= 0.99] = 1  # 强制长方形内部的值为1(可调整阈值)# # 绘制结果
# fig, ax = plt.subplots()
# p = ax.pcolormesh(x_i, y_i, u0, cmap='viridis', shading='auto')
# ax.set_aspect('equal', 'box')  # 保持x和y轴的比例相同
# fig.colorbar(p, ax=ax, label='u0 Value')
#
# # 设置标题和坐标轴标签
# plt.title('Approximate Rectangle using tanh')
# plt.xlabel('X')
# plt.ylabel('Y')
#
# # 显示图形
# plt.grid()
# plt.show()# 估算角点位置(这里只是估算,不是精确值)
# 左上角
x_left_top, y_left_top = center_x - half_width, center_y + half_height
# 右上角
x_right_top, y_right_top = center_x + half_width, center_y + half_height
# 左下角
x_left_bottom, y_left_bottom = center_x - half_width, center_y - half_height
# 右下角
x_right_bottom, y_right_bottom = center_x + half_width, center_y - half_height# 绘制结果
fig, ax = plt.subplots()
p = ax.pcolormesh(x_i, y_i, u0, cmap='viridis', shading='auto')
ax.set_aspect('equal', 'box')  # 保持x和y轴的比例相同
fig.colorbar(p, ax=ax, label='u0 Value')# 设置标题和坐标轴标签
plt.title('Approximate Rectangle using tanh')
plt.xlabel('X')
plt.ylabel('Y')# 显示长方形四个角的坐标数字
plt.text(x_left_top, y_left_top, f'({x_left_top:.2f}, {y_left_top:.2f})', va='top', ha='right', color='red')
plt.text(x_right_top, y_right_top, f'({x_right_top:.2f}, {y_right_top:.2f})', va='top', ha='left', color='red')
plt.text(x_left_bottom, y_left_bottom, f'({x_left_bottom:.2f}, {y_left_bottom:.2f})', va='bottom', ha='right', color='red')
plt.text(x_right_bottom, y_right_bottom, f'({x_right_bottom:.2f}, {y_right_bottom:.2f})', va='bottom', ha='left', color='red')# 显示网格和图形
plt.grid()
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/339759.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建智慧监控系统的功能架构,保障安全与便利

智慧监控系统作为现代城市安全管理的重要工具&#xff0c;不仅能够提供有效的安防监控&#xff0c;还能为人们的生活带来更多的便利。本文将探讨智慧监控系统的功能架构&#xff0c;以实现安全和便利的双重目标。 ### 1. 智慧监控系统背景 随着城市化进程的加速&#xff0c;人…

Mybatis实现树形结构方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

C语言基础——数组(2)

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 前言 一、二维数组的创建 1.1 二维数组的概念 1.2二维数组的创建 二、二维数组…

手写防抖debounce

手写防抖debounce 应用场景 当需要在事件频繁触发时&#xff0c;只执行最后一次操作&#xff0c;可以使用防抖函数来控制函数的执行频率,比如窗口resize事件和输入框input事件&#xff1b; 这段代码定义了一个名为 debounce 的函数&#xff0c;它接收两个参数&#xff1a;fn…

刷新页面控制台莫名奇妙报错显示/files/test_files/file_txt.txt

今天突然发现每次刷新页面都有几个报错&#xff0c;不刷新页面就没有。 这个报错应该不是我们系统的问题&#xff0c;是因为装了浏览器插件的原因。比如我安装了 大家有没有遇到类似的问题。

数据结构第三篇【链表的相关知识点一及在线OJ习题】

数据结构第三篇【链表的相关知识点一及在线OJ习题】 链表链表的实现链表OJ习题顺序表和链表的区别和联系 本文章主要讲解关于链表的相关知识&#xff0c;喜欢的可以三连喔 &#x1f600;&#x1f603;&#x1f604;&#x1f604;&#x1f60a;&#x1f60a;&#x1f643;&#…

我的app开始养活我了

大家在日常使用各类 app 时应该会发现&#xff0c;进入 app 会有个开屏广告&#xff0c;在使用 app 中&#xff0c;时不时的也会有广告被我们刷到。 这时候如果我们看完了这个广告&#xff0c;或者点击了这个广告的话&#xff0c;app商家就会获得这个广告的佣金。 这个佣金就是…

一款高效办公软件及48个快捷键

君子生非异也&#xff0c;善假于物也。 一天&#xff0c;技术同事亲自操刀要撰写一篇公号文档&#xff0c;于是问我需要什么样的排版格式&#xff1f; 我很快甩了一篇《水经注文档排版规范》给对方。 片刻之后&#xff0c;同事觉得这样写文档的效率太低&#xff0c;于是说要…

64位Office API声明语句第119讲

跟我学VBA&#xff0c;我这里专注VBA, 授人以渔。我98年开始&#xff0c;从源码接触VBA已经20余年了&#xff0c;随着年龄的增长&#xff0c;越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友&#xff0c;都来学习VBA,利用VBA,起码可以提高…

2024年比较火的桌面便利贴,适合懒人的电脑便签

在2024年的数字化生活中&#xff0c;高效的电脑便签软件成为了许多“懒人”提升生产力的秘密武器。这些软件不仅让信息记录变得轻松快捷&#xff0c;还能帮助用户有效管理时间&#xff0c;减少遗忘&#xff0c;让桌面保持整洁有序。 其中&#xff0c;“好用便签”以简洁的设计…

新闻发稿:8个新闻媒体推广中最常见的错误-华媒舍

在数字时代&#xff0c;新闻媒体的推广手段已经越来越多样化。许多媒体在推广过程中常常会犯下一些常见错误。本文将会介绍八个新闻媒体在推广中最常见的错误&#xff0c;并希望能够帮助各位更好地规避这些问题。 1. 缺乏明确的目标受众 在进行推广前&#xff0c;新闻媒体需要…

【一百】【算法分析与设计】N皇后问题常规解法+位运算解法

N皇后问题 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 给出一个nnn\times nnn的国际象棋棋盘&#xff0c;你需要在棋盘中摆放nnn个皇后&#xff0c;使得任意两个皇后之间不能互相攻击。具体来说&#xff0c;不能存在两个皇后位于同…

任务3.3 学生喂养三种宠物:猫、狗和鸟

本任务旨在通过Java面向对象编程中的多态性和方法重载概念&#xff0c;实现一个学生喂养三种不同宠物&#xff08;猫、狗、鸟&#xff09;的程序。 定义基类和派生类 创建一个Animal基类&#xff0c;包含所有动物共有的属性和方法&#xff0c;如name、age、speak()、move()和ea…

项目-双人五子棋对战: websocket的讲解与使用 (1)

项目介绍 接下来, 我们将制作一个关于双人五子棋的项目, 话不多说先来理清一下需求. 1.用户模块 用户的注册和登录 管理用户的天梯分数, 比赛场数, 获胜场数等信息. 2.匹配模块 依据用户的天梯积分, 实现匹配机制. 3.对战模块 把两个匹配到的玩家放到同一个游戏房间中, 双方通…

基于大数据爬虫技术的图书推荐系统与可视化平台设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

MySQL数据库语法(二)

一、数据库的创建 创建数据库CRATE DATABASE语法&#xff1a;CREATE DATABASE [IF NOT EXISTS]数据库名;功能&#xff1a;用给定的名字创建一个数据库如果数据库已经存在&#xff0c;发生一个错误。查看创建数据库&#xff1a;SHOW CREATE DATABASE <数据库名>&#xff…

好用的linux链接工具

工具下载链接&#xff1a; FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.3.10,更新日期2023.12.31 - FinalShell官网FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功…

SpringBoot——全局异常处理

目录 异常 项目总结 新建一个SpringBoot项目 pom.xml Result&#xff08;通用的响应结果类&#xff09; MyBusinessException自定义异常类 GlobalExceptionHandler全局异常处理类 ExceptionController控制器 SpringbootExceptionApplication启动类 参考文章&#xff1a…

Facebook开户|Facebook公共主页疑难杂症详解

​​要要切克闹&#xff0c;公共主页我来道...哈喽呀家人们中午好&#xff0c;上一次学习还是在上一次..hhh相信很多家人在做Facebook的时候总会遇到各种各样匪夷所思的bug&#xff01;经常被搞心态吧&#xff01;那么咱们今天呢就来总结一下各类的bug以及解决方法&#xff0c;…

EPSON爱普生RTC RA8900CE/RA8000CE+松下Panasonic电池组合

RTC是一种实时时钟&#xff0c;用于记录和跟踪时间&#xff0c;具有独立供电和时钟功能。在某些应用场景中&#xff0c;为了保证RTC在断电或者其他异常情况下依然能够正常工作&#xff0c;需要备份电池方案来提供稳定的供电。本文将介绍EPSON爱普生RTC RA8900CE/RA8000CE松下Pa…