【算法笔记(二)】见识数学的美

编程入门 行业动态 更新时间:2024-10-27 09:47:07

【<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法笔记(二)】见识数学的美"/>

【算法笔记(二)】见识数学的美

算法笔记(二)


见识数学的美

  • 算法笔记(二)
  • 前言
  • 一、笛卡尔的心
  • 二、蒙特卡洛法求pi
  • 三.最大公约数和最小公倍数
  • 四.闰年问题
  • 五.求三维空间三角形的面积
  • 总结


前言

接触了基础内容,知道了用程序能来实现许多数学计算,那么这一节让我们看看数学的魅力吧


一、笛卡尔的心

关于笛卡尔的心形曲线,有个童话版本是这样的:
52岁的笛卡尔,遇到了28岁的瑞典公主克里斯汀。笛卡尔对公主一见钟情,但因为阶级差距感到非常伤心。有一天,公主的马车路过某地,发现笛卡尔正在学习数学。公主非常好奇,就下了车询问了笛卡尔一些问题。后来笛卡尔收到一份通知,国王要他做公主的数学老师。而在接下来的日子里,公主和笛卡尔相爱了。国王发现了这件事,非常生气,要处死笛卡尔,公主苦苦哀求,最终将其流放回法国,回答法国后的笛卡尔天天给公主写信,但都被国王拦截。当寄出第十三封信后,笛卡尔就气绝身亡了,而第十三封心中只有一个公式y=a(1-sinθ),国王下令全城数学家来都解不开,国王不忍看着女儿整天郁郁寡欢,又想着笛卡尔应该不会时时刻刻都在说情话,就把信交给了女儿,公主拿到信后看到内容立马理解,拿出纸笔开始画,看到图案开心极了,因为图案赫然是一个心。
接下来就用代码小小实现一波

import matplotlib.pyplot as plt    # 导入matplotlib第三方绘图库
import numpy as np      # 导入第三方科学计算库x = np.linspace(0, 2 * np.pi, 500)   # 0 到 2Π 范围内均匀取500个值
a = 6
rho = a * (1 - np.sin(x))      # 心形公式
plt.subplot(polar=True)      # 设置为极坐标
plt.plot(x, rho, c='r')      # 绘制红色的心型图
plt.text(0, 0, 'Love You!',color='m')   # 标注 ”Love You!“
plt.show()                      # 显示绘制结果

运行结果:

二、蒙特卡洛法求pi

蒙特卡洛是北非摩纳哥一个著名的赌场城市。赌博具有很大的随机性,实践性,而蒙特卡洛法就采用了概率和统计思路,通过实验解决问题。
求Π的思路:
在一个单位正方形与其内切圆上随机投掷产生坐标点,在圆内产生点数c与正方形里产生的点数n之比约为Π/4

from random import randomn = 100000def xy_range(n):m = 0for i in range(1, n + 1):x = random() * 2 - 1    # x的随机取值范围在[-1,1)y = random() * 2 - 1    # y的随机取值范围在[-1,1)if x ** 2 + y ** 2 < 1:  # 单位圆公式判断点在圆内m += 1return mc1 = xy_range(n)
print("总试验次数为%d,计算的圆周率是%f" % (n, 4*c1/n))

运行结果如下:

三.最大公约数和最小公倍数

1.了解
最大公约数:最大公约数指某几个整数共有因子中最大的一个
最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数。

2.代码如下:

"""
---------------------最大公约数----------------------
"""def big_num(x, y):  # 自定义求两个整数的最大公约数方法reduce = 0if x > y:  # 确定最小的数reduce = xelif y > x:reduce = yelse:  # 相等时随便返回一个,此处返回xreduce = xwhile reduce >= 1:  # 从小的数开始作为除数,减1进行整除运算if x % reduce == 0 and y % reduce == 0:return reduce  # 返回最大公约数else:reduce -= 1try:x = int(input("请输入第一个数:"))y = int(input("请输入第二个数:"))if x <= 0 or y <= 0:print("应该输入大于零的数")else:print("%d和%d的最大公约数是%d" % (x, y, big_num(x, y)))
except:print("输入数出错!")"""
-------------------------最小公倍数------------------------
"""def small_num(x, y):reduce = 0if x > y:  # 确定最小的数reduce = xelif y > x:reduce = yelse:  # 相等时随便返回一个,此处返回xreduce = xwhile reduce:if reduce % x == 0 and reduce % y == 0:return reduceelse:reduce += 1try:n1 = int(input("请输入第一个数:"))n2 = int(input("请输入第二个数:"))if n1 <= 0 or n2 <= 0:print("请输入大于零的数")else:print("%d和%d最小公倍数为%d" % (n1, n2, small_num(n1, n2)))
except:print("输出数出错!")

这个案例就不演示结果了

四.闰年问题

1.了解闰年:
是4的倍数,但不为百年的是闰年
是400倍数的
2.代码实现

def runyear(y):if y % 4 == 0 and y % 100 != 0:return 1elif y % 400 == 0:return 1else:return 0try:y = int(input("请输入年份:"))if y >= 0:x = runyear(y)if x:print(f"{y}是闰年")else:print(f"{y}不是闰年")else:print("输入的年份不对")
except:print("输出有误")

五.求三维空间三角形的面积

1.需求
(1).已知三点坐标
(2).利用欧式距离公式,求得两点间的距离

(3).利用海伦公式求任意三角形的面积

代码如下:

import numpy as npA = np.array([1, 1, 1])
B = np.array([3, 1.5, 1.5])
C = np.array([4, 2, 2])
dab = np.sqrt(np.sum((A - B) ** 2))
dac = np.sqrt(np.sum((A - C) ** 2))
dbc = np.sqrt(np.sum((B - C) ** 2))
print('AB的长度为', dab)
print('AC的长度为', dac)
print('BC的长度为', dbc)
s = (dab + dac + dbc) / 2
area = np.sqrt(s * (s - dab) * (s - dac) * (s - dbc))
print("该任意三角形的面积为%.2f平方米" % (area))

结果如下:


总结

数学的美也只不过是另外一种吸引人的方法,本质还是希望有更多的人学好数学,喜欢博主的文章的记得三连哦~一起探讨的点这里

更多推荐

【算法笔记(二)】见识数学的美

本文发布于:2024-02-25 01:46:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1697379.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   见识   数学   笔记

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!