捋一捋Python中的数学运算math库之三角函数

简介: 正式的Python专栏第20篇,同学站住,别错过这个从0开始的文章!

很多学习编程的都多多少少学习了一些数学知识。


前篇我们讲讲那些常用的数学处理函数, 我们接着过一过三角函数!


数学三角函数

除了前篇说的数的取值,指数对数等,还有我们初中数学的一些函数。如下:


正弦,余弦,正切

反正弦,反余弦,反正切

等等的,下面会使用math.sin/ math.cos/ math.tan 等等来进行三角函数运算。


他们都有一个共同点,参数都是弧度制(而非角度制)。


而asin/acos/atan 这类接收数字,输出的结果也并非角度,也是弧度值。


举个例子之计算 30度正弦值

如下,我们都知道3 0 ∘ 30^\circ30

正弦值等于0.5,但是上面提到的函数都只接受弧度的


sin ⁡ \sinsin(3 0 ∘ 30^\circ30

) = 1/2


也就是说:我们需要使用 30度 对应的弧度值,传给sin函数,才能算出sin(30度)


至此,我们需要引入两个重要的函数:


math.degrees(传入参数为弧度值)# 比如math.degrees(math.PI) 结果为180(度)
math.radians(传入参数为角度值)# 比如math.radians(180) 结果为PI
#角度转弧度
rad =  math.radians(角度值) #或者把知道角度的弧度值给进来:比如30度
#计算sin 给进弧度值对应的某个角度
math.sin(rad)  # 结果为1/2

代码展示

鉴于很多函数都需要接收一个产生或者是多个参数,学委把函数调用进行包装。

编写了exec函数,动态的打印执行了哪个函数,参数是啥。

如果你是小白,请简单理解exec函数是一个帮你运行数学函数的工具即可,它的用法是:

exec(参数,被调用的数学函数)
或者
exec(参数列表,被调用的数学函数)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/26 10:02 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : number_demo.py
# @Project : hello
# @Blog: https://blog.csdn.net/geeklevin/article/details/121024945
import math
#这个函数为了方便输出展示,前篇文章有更多解释,需要请查看前篇。
def exec(obj, func, label=""):
    if type(obj) == list:
        print("%s : apply func %s on obj %s = %s" % (label,func, obj, func(*obj)))
    elif type(obj) == tuple:
        print("%s : apply func %s on obj %s = %s" % (label,func, obj, func(*obj)))
    else:
        #print("type of obj is %s " % type(obj))
        print("%s : apply func %s on obj %s = %s" % (label,func, obj, func(obj)))
exec(math.pi, math.degrees,"把角度转换为弧度") # pi 弧度 为 180度
exec(180, math.radians,"把弧度换转为角度") # 180度 为 1 pi 弧度
exec(math.pi/6, math.sin, "求sin(30度)") # sin(30度)= 1/2
exec(0.5, math.asin, "求asin(30度)") # asin(1/2) = 30度
print(math.degrees(math.asin(0.5))) # 30度
exec(math.pi/3, math.cos, "求cos(60度)") # cos(60度)= 1/2
exec(0.5, math.acos, "求acos(60度)") # acos(1/2) = 60度
print(math.degrees(math.acos(0.5))) # 60度
exec(0, math.tan, "求tan(0度)")
exec(0, math.atan, "求atan(0度)")
exec(math.pi/2, math.tan, "求tan(90度)") #tan (90度)没有任何意义,但是在计算机中math.pi/2 弧度没有办法严格表示为90读
print(math.tan(math.radians(45)))#tan(45度)= 1
print(math.tan(math.radians(90)))#tan (90度) 没有任何意义
#print(math.radians(90))# 因为角度转弧度并非精准表示的,计算机只能算一个无限逼近的数字弧度值来表示90,所以上面的90可以计算的
exec(1, math.atan, "求atan(0度)")
print(math.degrees(math.atan(1))) # 45度


下面是运行效果:

image.png

可以看到每个输出都跟我们实际数学学习到的公式结果一直(有些值只是稍微接近)。


注意! 但是tan(9 0 ∘ 90^\circ90

)居然被算出来了!

数学课本都说tan(9 0 ∘ 90^\circ90

)毫无意义!


这里我们也看到上面的三角函数都接受弧度值,这类值在计算机中只能表现为一个不断逼近的数字,所以尽管我们通过radians函数把90翻译为弧度了,但这个值不是绝对的90度。不会出现无意义的结果!


题外话:关于exec函数,请查看前篇文章说明。


目录
相关文章
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
2094 103
|
8月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
392 0
|
9月前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
2102 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
9月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
839 0
|
11月前
|
存储 Web App开发 前端开发
Python + Requests库爬取动态Ajax分页数据
Python + Requests库爬取动态Ajax分页数据
|
8月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
797 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
8月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
593 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
10月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
654 18
|
11月前
|
JSON 网络安全 数据格式
Python网络请求库requests使用详述
总结来说,`requests`库非常适用于需要快速、简易、可靠进行HTTP请求的应用场景,它的简洁性让开发者避免繁琐的网络代码而专注于交互逻辑本身。通过上述方式,你可以利用 `requests`处理大部分常见的HTTP请求需求。
777 51
|
10月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
949 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程

推荐镜像

更多