【C语言标准库函数】双曲函数:sinh(), cosh(), tanh()

目录

一、头文件

二、函数简介

2.1. 双曲正弦函数 sinh(double x)

2.2. 双曲余弦函数 cosh(double x)

2.3. 双曲正切函数 tanh(double x)

三、函数实现(概念性)

四、注意事项

4.1. 参数类型

4.2. 计算精度

4.3. 函数返回值

4.4. 环境差异

4.5. 物理与几何应用

4.6. 编程实践

五、示例代码


在 C 语言标准库中,<math.h> 头文件提供了用于计算双曲函数的相关函数,常见的有 sinh()cosh() 和 tanh(),本文将详细介绍这几个函数。

一、头文件

这些双曲函数都定义在<math.h>头文件中。要使用它们,需要在C程序中包含这个头文件。

二、函数简介

2.1. 双曲正弦函数 sinh(double x)

双曲正弦函数是数学中的一种重要函数,通常记作 sinh(x),其定义式为:

其中,e 是自然对数的底数,约等于 2.71828。该函数属于双曲函数的一种,与三角函数相似,但具有不同的性质和用途。双曲正弦函数在数学、物理和工程计算中都有广泛的应用。

主要特点:

  • 定义域:双曲正弦函数的定义域为全体实数集,即 x∈R。
  • 值域:其值域也为全体实数集,即 sinh(x)∈R。
  • 奇偶性:双曲正弦函数是奇函数,即满足 sinh(−x)=−sinh(x)。
  • 单调性:在区间 (−∞,+∞) 上,双曲正弦函数是单调增加的。
  • 凹凸性:双曲正弦函数在 x>0 时是凸函数,在 x<0 时是凹函数。
  • 导数:双曲正弦函数的导数是双曲余弦函数,即 dxd​sinh(x)=cosh(x)。

2.2. 双曲余弦函数 cosh(double x)

双曲余弦函数是另一种重要的双曲函数,记作 cosh(x),其定义式为:

主要特点:

  • 定义域:与双曲正弦函数相同,双曲余弦函数的定义域也是全体实数集。
  • 值域:其值域为 [1,+∞),因为对于任何实数 x,ex 和 e−x 都是正的,所以它们的和除以 2 总是大于或等于 1。
  • 奇偶性:双曲余弦函数是偶函数,即满足 cosh(−x)=cosh(x)。
  • 单调性:在区间 [0,+∞) 上,双曲余弦函数是单调增加的(尽管在 (−∞,0) 上也是单调的,但由于偶函数性质,其增减性与 [0,+∞) 上相同)。
  • 凹凸性:双曲余弦函数在其整个定义域上都是凸函数。
  • 导数:双曲余弦函数的导数是双曲正弦函数,即 dxd​cosh(x)=sinh(x)。

2.3. 双曲正切函数 tanh(double x)

双曲正切函数是双曲正弦函数和双曲余弦函数的商,记作 tanh(x),其定义式为:

主要特点:

  • 定义域:与双曲正弦和余弦函数相同,双曲正切函数的定义域也是全体实数集。
  • 值域:其值域为 (−1,1),因为分子是两个指数函数的差,分母是两个指数函数的和,且分母总是大于分子(绝对值上),所以比值永远在 -1 和 1 之间。
  • 奇偶性:双曲正切函数是奇函数,即满足 tanh(−x)=−tanh(x)。
  • 单调性:在区间 (−∞,+∞) 上,双曲正切函数是单调增加的。
  • 凹凸性:双曲正切函数在其整个定义域上都是凹函数。
  • 导数:双曲正切函数的导数是 1−tanh2(x),这可以通过求导法则和链式法则得出。

三、函数实现(概念性)

在C语言中,虽然我们不能直接访问sinh()cosh(), 和 tanh()这些函数的源代码(因为它们是标准库的一部分,且实现依赖于具体的编译器和库),但我们可以基于它们的数学定义来实现概念性的、简单的近似版本。这里,我们将使用exp()函数来计算e的指数,然后根据双曲函数的定义来实现它们。

注意:这里的实现主要是为了教学目的,并不是最优或最精确的。在实际应用中,应该直接使用标准库中的函数,因为它们经过了优化以提供高精度和好的性能。

#include <stdio.h>  
#include <math.h>  // 概念性的sinh实现  
double my_sinh(double x) {  return (exp(x) - exp(-x)) / 2.0;  
}  // 概念性的cosh实现  
double my_cosh(double x) {  return (exp(x) + exp(-x)) / 2.0;  
}  // 概念性的tanh实现,依赖于sinh和cosh  
double my_tanh(double x) {  return my_sinh(x) / my_cosh(x);  
}  int main() {  double x = 1.0;  printf("sinh(%f) = %f\n", x, my_sinh(x));  printf("cosh(%f) = %f\n", x, my_cosh(x));  printf("tanh(%f) = %f\n", x, my_tanh(x));  return 0;  
}

展示了如何基于exp()函数(在<math.h>中定义)来实现sinh()cosh(), 和 tanh()函数的概念性版本。在实际中,由于exp()函数已经足够精确,这种实现方式对于大多数应用场景来说已经足够好了。

然而,值得注意的是,当x的值非常大时,exp(x)exp(-x)的计算可能会导致数值溢出或下溢。为了避免这种问题,库的实现可能会采用更复杂的算法,如泰勒级数、范围约简(range reduction)等技术。

此外,由于浮点数计算的固有性质,即使是使用最精确的方法,对于某些极端值或特殊情况,计算结果也可能会有微小的误差。因此,在实际应用中,应该始终考虑浮点数的精度和误差问题。

四、注意事项

4.1. 参数类型

  • 在大多数编程语言中,这些函数接受的参数应为数值类型(如整数、浮点数等)。如果传入非数值类型(如字符串、日期等),则可能会引发错误或返回异常值。
  • 在C标准库中,所有的三角函数(如sin()cos()tan())和反三角函数(如asin()acos()atan())都期望其参数是以弧度为单位的,而不是度数。如果有一个以度数为单位的角,需要先将其转换为弧度,然后再传递给这些函数。弧度和度数之间的转换关系很简单:
    • 弧度=度数×180π​
    • 度数=弧度×π180​

4.2. 计算精度

  • 由于浮点数计算的固有性质,对于非常大的x值,sinh和cosh函数可能会导致数值溢出。因此,在使用时需要注意x的取值范围,以避免不必要的精度损失或错误。
  • tanh函数由于其值域限制在(-1, 1)之间,因此在处理大数时相对更稳定,但仍然需要注意数值精度的问题。

4.3. 函数返回值

  • sinh和cosh函数的返回值可以是任意实数,因此需要考虑返回值的大小和精度。
  • tanh函数的返回值在(-1, 1)之间,这有助于在某些应用中避免数值的极端波动。

4.4. 环境差异

  • 在不同的编程语言或数学库中,这些函数的实现可能略有差异。因此,在使用时需要参考具体环境或库的文档说明。
  • 特别是在使用Oracle等数据库系统时,需要注意函数的具体语法和使用方式可能与标准数学库有所不同。

4.5. 物理与几何应用

  • 双曲函数在双曲几何、物理学(如高速运动或强引力场问题)等领域有重要应用。在使用时,需要根据具体的应用场景选择合适的函数和参数。

4.6. 编程实践

  • 在编程时,应确保正确引用和调用这些函数。例如,在Excel中使用SINH函数时,需要先输入等号“=”,然后输入函数名和参数;在Oracle数据库中,则需要注意COSH等函数的语法差异。

在C语言中,可以使用M_PI(定义在<math.h>中,但可能需要包含<math_definitions.h>或定义_USE_MATH_DEFINES宏来确保它可用)来表示π的值。

五、示例代码

#include <stdio.h>  
#include <math.h>  int main() {  double x = 1.0; // 示例输入值  // 计算并打印双曲正弦值  double sinh_x = sinh(x);  printf("sinh(%.2f) = %.2f\n", x, sinh_x);  // 计算并打印双曲余弦值  double cosh_x = cosh(x);  printf("cosh(%.2f) = %.2f\n", x, cosh_x);  // 计算并打印双曲正切值  double tanh_x = tanh(x);  printf("tanh(%.2f) = %.2f\n", x, tanh_x);  // 尝试一个较大的值,观察tanh的行为  x = 10.0;  tanh_x = tanh(x);  printf("tanh(%.2f) = %.2f (approaching 1 as x increases)\n", x, tanh_x);  // 尝试一个较大的负值,观察tanh的行为  x = -10.0;  tanh_x = tanh(x);  printf("tanh(%.2f) = %.2f (approaching -1 as x decreases)\n", x, tanh_x);  // 尝试0值,观察结果  x = 0.0;  sinh_x = sinh(x);  cosh_x = cosh(x);  tanh_x = tanh(x);  printf("sinh(%.2f) = %.2f\n", x, sinh_x);  printf("cosh(%.2f) = %.2f\n", x, cosh_x);  printf("tanh(%.2f) = %.2f\n", x, tanh_x);  return 0;  
}

 

运行这段代码,可以看到每个函数调用的结果,以及tanh()函数随着x值变化而趋近于其极限值的行为。

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

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

相关文章

(五)QT——QDialog 对话框

目录 前言 QDialog 主要功能 QDialog 使用方法 基本QDialog 应用程序级别的模态对话框 标准对话框 示例代码 功能展示 总结 1. 基本功能 2. 创建方式 3. 常用方法 前言 QDialog 是 Qt 框架中的对话框类&#xff0c;用于创建模态&#xff08;modal&#xff09;或非…

python 语音识别方案对比

目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…

TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化...

全文链接&#xff1a;https://tecdat.cn/?p39656 本文围绕基于TensorFlow实现的神经网络对抗训练域适应方法展开研究。详细介绍了梯度反转层的原理与实现&#xff0c;通过MNIST和Blobs等数据集进行实验&#xff0c;对比了不同训练方式&#xff08;仅源域训练、域对抗训练等&am…

OSPF基础(2):数据包详解

OSPF数据包(可抓包) OSPF报文直接封装在IP报文中&#xff0c;协议号89 头部数据包内容&#xff1a; 版本(Version):对于OSPFv2&#xff0c;该字段值恒为2(使用在IPV4中)&#xff1b;对于OSPFv3&#xff0c;该字段值恒为3(使用在IPV6中)。类型(Message Type):该OSPF报文的类型。…

在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。

题目&#xff1a;在CT107D单片机综合训练平台上&#xff0c;8个数码管分别单独依次显示0~9的值&#xff0c;然后所有数码管一起同时显示0~F的值&#xff0c;如此往复。 延时函数分析LED首先实现8个数码管单独依次显示0~9的数字所有数码管一起同时显示0~F的值&#xff0c;如此往…

使用VCS对Verilog/System Verilog进行单步调试的步骤

Verilog单步调试&#xff1a; System Verilog进行单步调试的步骤如下&#xff1a; 1. 编译设计 使用-debug_all或-debug_pp选项编译设计&#xff0c;生成调试信息。 我的4个文件&#xff1a; 1.led.v module led(input clk,input rst_n,output reg led );reg [7:0] cnt;alwa…

数据结构及排序算法

数据结构 线性结构 ◆线性结构:每个元素最多只有一个出度和一个入度,表现为一条线状。线性表按存储方式分为顺序表和链表。 存储结构: ◆顺序存储:用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素物理上也相邻。 ◆链式存储:存储各数据元素的结点…

python实现多路视频,多窗口播放功能

系列Python开发 文章目录 系列Python开发前言一、python实现多路视频播放功能二、代码实现1. http申请视频流地址并cv2播放功能 三、打包代码实现生成可执行文件 总结 前言 一、python实现多路视频播放功能 服务端开发后通常需要做功能测试、性能测试&#xff0c;通常postman、…

【R语言】数据操作

一、查看和编辑数据 1、查看数据 直接打印到控制台 x <- data.frame(a1:20, b21:30) x View()函数 此函数可以将数据以电子表格的形式进行展示。 用reshape2包中的tips进行举例&#xff1a; library("reshape2") View(tips) head()函数 查看前几行数据&…

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

STM32 软件SPI读写W25Q64

接线图 功能函数 //写SS函数 void My_W_SS(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue); }//写SCK函数 void My_W_SCK(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue); }//写MOSI函数 void My_W_MOSI(uint8_t Bit…

apachePoi中XSSFClientAnchor图片坐标简述;填充多张图片

概述 业务中经常会遇到在单元格内填充图片的需求&#xff0c;而且要求指定图片在单元格内的位置。 一般都是用的apache的poi&#xff0c;设置图片坐标。 HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2)dx1 dy1 起始单元…

Centos挂载镜像制作本地yum源,并补装图形界面

内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录&#xff0c;后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…

ssti学习笔记(服务器端模板注入)

目录 一&#xff0c;ssti是什么 二&#xff0c;原理 所谓模板引擎&#xff08;三列&#xff0c;可滑动查看&#xff09; 三&#xff0c;漏洞复现 1&#xff0c;如何判断其所属的模板引擎&#xff1f; 2&#xff0c;判断清楚后开始注入 &#xff08;1&#xff09;Jinja2&a…

【前端】Python 闭包与JavaScript闭包的实现差异

目录 Python 闭包JavaScript 闭包 推荐超级课程&#xff1a; Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 Python 闭包 如何定义&#xff1a; 在一个函数内部定义另一个函数&#xff0c;内部函数引用外部函数的变量。 def outer_function(text):…

【JVM详解二】常量池

一、常量池概述 JVM的常量池主要有以下几种&#xff1a; class文件常量池运行时常量池字符串常量池基本类型包装类常量池 它们相互之间关系大致如下图所示&#xff1a; 每个 class 的字节码文件中都有一个常量池&#xff0c;里面是编译后即知的该 class 会用到的字面量与符号引…

人工智能入门 数学基础 线性代数 笔记

必备的数学知识是理解人工智能不可或缺的要素&#xff0c;今天的种种人工智能技术归根到底都建立在数学模型之上&#xff0c;而这些数学模型又都离不开线性代数&#xff08;linear algebra&#xff09;的理论框架。 线性代数的核心意义&#xff1a;世间万事万物都可以被抽象成某…

C# Winform怎么设计串口,客户端和相机控件界面显示

首先我们必须把这个类创建好 INIAPI using System; using System.Text; using System.Runtime.InteropServices;namespace Ini {public class IniAPI{#region INI文件操作/** 针对INI文件的API操作方法&#xff0c;其中的节点&#xff08;Section)、键&#xff08;KEY&#x…

在 Windows 上使用 ZIP 包安装 MySQL 的详细步骤

以下是使用官方 ZIP 包在 Windows 上安装 MySQL 的详细步骤&#xff0c;确保能通过 mysql -uroot -p 成功连接。 步骤 1&#xff1a;下载 MySQL ZIP 包 访问 MySQL 官方下载页面&#xff1a; https://dev.mysql.com/downloads/mysql/选择 Windows (x86, 64-bit), ZIP Archive&…

el-table表格点击单元格实现编辑

使用 el-table 和 el-table-column 创建表格。在单元格的默认插槽中&#xff0c;使用 div 显示文本内容&#xff0c;单击时触发编辑功能。使用 el-input 组件在单元格中显示编辑框。data() 方法中定义了 tableData&#xff0c;tabClickIndex: null,tabClickLabel: ,用于判断是否…