算法:数值算法

矩阵乘法

定义与性质

矩阵乘法是线性代数中的一个基本运算,它涉及到两个矩阵的点积运算。给定两个矩阵 A(m×n)和 B(n×p),它们的乘积 C(m×p)定义为:

其中, Cij 是结果矩阵 C 中第 i 行第 j 列的元素, Aik 和 Bkj 分别是矩阵 A 和 B 中对应的元素。

性质
  1. 结合律:(AB)C=A(BC)
  2. 分配律:A(B+C)=AB+AC
  3. 不满足交换律:一般情况下 AB≠BA
应用

矩阵乘法在计算机图形学、信号处理、物理学、经济学以及工程学等多个领域都有广泛的应用。例如,在图形学中,矩阵乘法被用来实现旋转、缩放和平移等几何变换。

生活场景案例

假设你要实现一个简单的图形学中的二维旋转变换。例如,旋转一个点 (x,y) 逆时针旋转 θ 角度后的新坐标 (x′,y′) 可以通过矩阵乘法计算:

代码示例
import numpy as np# 定义旋转矩阵
def rotation_matrix(theta):return np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])# 定义一个点 (x, y)
point = np.array([1, 0])# 定义旋转角度(弧度)
theta = np.pi / 4  # 45度# 计算旋转后的新坐标
rotated_point = rotation_matrix(theta).dot(point)print("旋转后的坐标:", rotated_point)

Karatsuba大数乘法

算法原理

Karatsuba算法是一种快速的大数乘法算法,由Anatolii Alexeevitch Karatsuba于1960年提出。该算法基于分治策略,通过减少乘法次数来提高效率。对于两个 n 位的数 x 和 y,Karatsuba算法可以将乘法次数从 n2 降低到大约 n1.585。

运行过程

设 x 和 y 分别为两个 n 位的数,可以将它们写作:

x × y可以表示为:

Karatsuba算法通过计算 ac、bd 以及 (a+b)(c+d),然后减去 ac 和 bd 得到 ad+bc,从而避免了直接计算 ad 和 bc。

生活场景案例

假设你需要计算两个非常大的数的乘积,例如在金融计算中需要处理非常大的数值。

代码示例
def karatsuba(x, y):# 基础情况if x < 10 or y < 10:return x * y# 计算两个数的长度n = max(len(str(x)), len(str(y)))m = n // 2# 分割数字high1, low1 = divmod(x, 10**m)high2, low2 = divmod(y, 10**m)# 递归计算z0 = karatsuba(low1, low2)z1 = karatsuba((low1 + high1), (low2 + high2))z2 = karatsuba(high1, high2)return (z2 * 10**(2 * m)) + ((z1 - z2 - z0) * 10**m) + z0# 示例
x = 123456789
y = 987654321print("Karatsuba乘积:", karatsuba(x, y))

快速傅立叶变换(FFT)

原理与应用

快速傅立叶变换(FFT)是一种高效计算离散傅立叶变换(DFT)及其逆变换的算法。DFT将一个信号从时域转换到频域,而FFT则是一种能够大幅度减少计算量的算法,使得DFT在实际应用中成为可能。

计算复杂度

直接计算DFT的时间复杂度为 O(n2),而FFT的时间复杂度为 O(n·㏒n),这使得FFT在处理大规模数据集时非常高效。

实现方法

FFT的一个常见实现是Cooley-Tukey算法,它同样采用分治策略,将DFT分解为较小的DFT,然后将这些结果组合起来。这种方法依赖于复数的旋转因子,即所谓的“旋转向量”。

生活场景案例

假设你需要对一段音频信号进行频谱分析,例如音乐播放器中的频谱显示。

代码示例
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams# 设置默认字体
rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 生成示例信号
Fs = 500  # 采样频率
T = 1 / Fs  # 采样间隔
t = np.arange(0, 1, T)  # 时间向量# 生成包含多个频率的信号
f1 = 50   # 频率1
f2 = 120  # 频率2
signal = 3 * np.sin(2 * np.pi * f1 * t) + 1.5 * np.sin(2 * np.pi * f2 * t)# 计算FFT
n = len(signal)
k = np.arange(n)
T = n / Fs
frq = k / T  # 两侧频率向量
frq = frq[range(n // 2)]  # 只取一侧Y = np.fft.fft(signal) / n  # FFT计算并归一化
Y = Y[range(n // 2)]# 绘制信号及其频谱
plt.figure(figsize=(12, 6))plt.subplot(2, 1, 1)
plt.plot(t, signal)
plt.title('信号')
plt.xlabel('时间')
plt.ylabel('幅度')plt.subplot(2, 1, 2)
plt.plot(frq, abs(Y))
plt.title('频谱')
plt.xlabel('频率')
plt.ylabel('幅度')plt.tight_layout()
plt.show()

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

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

相关文章

大连智点文化传媒有限公司介绍

在辽宁省大连市的文化传媒领域,大连智点文化传媒有限公司(以下简称“智点文化”)以其独特的魅力和专业的服务,逐渐崭露头角。作为一家集广告、文化、营销策划等多功能于一体的综合性文化传媒公司,智点文化不仅拥有深厚的行业底蕴,还不断探索与创新,以适应快速变化的市场需求。 …

在英特尔 Gaudi 2 上加速蛋白质语言模型 ProtST

引言 蛋白质语言模型 (Protein Language Models, PLM) 已成为蛋白质结构与功能预测及设计的有力工具。在 2023 年国际机器学习会议 (ICML) 上&#xff0c;MILA 和英特尔实验室联合发布了ProtST模型&#xff0c;该模型是个可基于文本提示设计蛋白质的多模态模型。此后&#xff0…

AI发展下的伦理挑战:构建未来科技的道德框架

一、引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;我们正处在一个前所未有的科技变革时代。AI不仅在医疗、教育、金融、交通等领域展现出巨大的应用潜力&#xff0c;也在日常生活中扮演着越来越重要的角色。然而&#xff0c;这一技术的迅猛进步也带来…

面试前端实习常问的关于【ES6新特性】的问题

ES6新特性 日常前端代码开发中&#xff0c;有哪些值得用 ES6 去改进的编程优化或者规范? 常用箭头函数来取代有this指向的函数常用 let 取代 var 命令常用数组/对象的结构赋值来命名变量&#xff08;结构更清晰&#xff0c;语义更明确&#xff0c;可读性更好&#xff09;在长字…

《Java初阶数据结构》----6.<优先级队列之PriorityQueue底层:堆>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

ElasticSearch学习篇15_《检索技术核心20讲》进阶篇之TopK检索

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 相关问题&#xff1a; ES全文检索是如何进行相关性打分的&#xff1f;ES中计算相关性得分的时机?如何加速TopK检索&#xff1f;三种思路 精准To…

60个常见的 Linux 指令

1.ssh 登录到计算机主机 ssh -p port usernamehostnameusername&#xff1a; 远程计算机上的用户账户名。 hostname&#xff1a; 远程计算机的 IP 地址或主机名。 -p 选项指定端口号。 2.ls 列出目录内容 ls ls -l # 显示详细列表 ls -a # 显示包括隐藏文件在内的所有内…

Linux系统上安装Redis

百度网盘&#xff1a; 通过网盘分享的文件&#xff1a;redis_linux 链接: https://pan.baidu.com/s/1ZcECygWA15pQWCuiVdjCtg?pwd8888 提取码: 8888 1.把安装包拖拽到/ruanjian/redis/文件夹中&#xff08;自己选择&#xff09; 2.进入压缩包所在文件夹&#xff0c;解压压缩…

tarojs项目启动篇

TaroJS 是一个开放式跨端开发解决方案&#xff0c;使用 React 语法规范来开发多端应用&#xff08;包括小程序、H5、React Native 等&#xff09;。它可以帮助开发者高效地构建出在不同端上运行一致的应用。以下是启动 TaroJS 项目&#xff08;本来就有的旧项目&#xff09;的步…

前后端分离的开发模式+YAPI接口文档

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 早期的开发模式&#xff1a;前后端混合开发 在这种模式下开发下&#xff0c;…

WAF+API安全代表厂商|瑞数信息入选IDC报告《生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势》

近日&#xff0c;全球领先的权威资讯机构IDC正式发布《IDC Market Presentation&#xff1a;生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势&#xff0c;2024》报告。报告中IDC 评估了众多厂商的安全硬件产品能力&#xff0c;并给出了产品对应的推荐厂商供最终用户参…

浏览器渲染机制和node事件循环

浏览器渲染机制 Document Object Model (DOM) 当浏览器读取 HTML 代码时&#xff0c;只要遇到 body、div 等 HTML 元素&#xff0c;就会创建一个名为 Node 的 JavaScript 对象。 浏览器从 HTML 文档中创建了 Node 之后&#xff0c;就要把这些节点对象创建成树状结构。 CSS Obje…

如何从2D到3D动画(计算机图形学基础)

引言 计算机图形学是一门将数学、计算机科学和艺术结合起来的学科&#xff0c;它在现代技术中扮演着越来越重要的角色。从游戏设计到虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和元宇宙&#xff0c;计算机图形学的应用无处不在。它不仅为人们提…

godot新建项目及设置外部编辑器为vscode

一、新建项目 初次打开界面如下所示&#xff0c;点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径&#xff0c;点击箭头所指浏览按钮&#xff0c;会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…

基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】

有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 在本研究中&#xff0c;我们采用Python编程语言&#xff0c;利用爬虫技术实时获取豆瓣电影最新数据。通过分析豆瓣网站的结构&#xff0c;我们设计了一套有效的策略来爬取电影相关的JSON格式数据。…

JavaScript——变量与运算符、输入输出、判断、循环

文章目录 前言概述使用 js从文件引入 js 代码importjs 的作用变量计算输入格式化输出保留小数向上取整&#xff0c;向下取整条件判断循环总结 前言 为了监督自己的进度&#xff0c;把学习任务一点点都写出来&#xff0c;写多少就算多少&#xff0c;不求完美&#xff0c;只求完…

# JVM 参数大全

JVM 参数大全 文章目录 JVM 参数大全内存参数垃圾收集器配置GC日志配置dump 日志参数配置发生Full GC时生成dump文件在IDEA中配置JVM参数 内存参数 -Xmx3550m&#xff1a;设置JVM最大堆内存为3550M -Xms3550m&#xff1a;设置JVM初始堆内存 为3550M。此值可以设置与-Xmx相同&am…

【Python实战因果推断】57_因果推理概论7

目录 The Bias Equation A Visual Guide to Bias The Bias Equation 既然你现在理解了为何样本平均值可能与它试图估计的平均潜在结果存在差异&#xff0c;我们不妨更详细地探究为什么平均差值通常无法恢复出ATE&#xff08;平均处理效应&#xff09;。 在销售的例子中&…

linux ftp操作记录

一.ftp 创建用户 passwd: user ftpuser does not exist 如果你遇到 passwd: user ftpuser does not exist 的错误&#xff0c;这意味着系统中不存在名为 ftpuser 的用户。你需要首先确认FTP用户是否是系统用户&#xff0c;还是FTP服务器软件&#xff08;如Pure-FTPd&#xff…

DATEDIFF()- Date Functions-SQL函数

DATEDIFF&#xff08;&#xff09;- Date Functions DATEDIFF() 函数是一种用于计算日期差异的常见日期函数。 通常用于比较两个日期之间的时间跨度&#xff0c;以便进行日期计算和分析。 语法 大多数数据库中&#xff0c;DATEDIFF() 函数的语法&#xff1a; DATEDIFF(unit,…