算法:数值算法

news2024/9/25 16:37:49

矩阵乘法

定义与性质

矩阵乘法是线性代数中的一个基本运算,它涉及到两个矩阵的点积运算。给定两个矩阵 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 = 987654321

print("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://www.coloradmin.cn/o/1949694.html

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

相关文章

从零开始:在linux系统安装MongoDB数据完整指南 新手常用命令

1 前言 MongoDB 是为快速开发互联网应用而设计的数据库系统。MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。MongoDB 的数据模型是面向文档的&#xff0c;所谓文档是一种类似于json的结构。 官网教程&#xff1a;https://www.mongodb.com/docs/manual/ 2 安装部…

Leaflet.VectorGrid加载点矢量瓦片鼠标点击报Cannot read properties of undefined的解决办法

在使用Leaflet.VectorGrid1.3.0进行点矢量瓦片数据的渲染时&#xff0c;再打开事件交互后&#xff0c;以mouseover为例&#xff0c;当事件添加后&#xff0c;鼠标悬停时&#xff0c;并没有展示相应的数据&#xff0c;反而在控制台下方报错。如下方所示&#xff1a; 本文将介绍在…

ZStack Cloud 5.1.8正式发布——GPU运维、物理机硬件监控、克隆云主机网络配置三大亮点简析

云轴科技ZStack Cloud云平台是遵循“简单、弹性、健壮、智能”的“4S”特性的私有云和无缝混合云产品。ZStack Cloud 5.1.8版本正式发布&#xff0c;从用户业务场景和实际需求出发&#xff0c;丰富和完善平台功能&#xff0c;推出一系列重要功能和多项改进&#xff0c;覆盖云主…

[vue3]引入模块出现红色波浪,但是可以正常运行,去除红色波浪号

问题1 解决问题1&#xff1a; 在vite-env.d.ts添加以下语句 declare module "*.vue" {import { DefineComponent } from "vue"const component: DefineComponent<{}, {}, any>export default component }

.NET威胁情报 | 某水务系统堆叠注入可RCE

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

ROM修改进阶教程------修改rom 开机自动安装指定apk 自启脚本完整步骤解析

rom修改的初期认识 在解包修改系统分区过程中。很多客户需求刷完rom后自动安装指定apk。这种与内置apk有区别。而且一些极个别apk无法内置。今天对这种修改rom刷入机型后第一次启动后自动安装指定apk的需求做个步骤解析。 在前期博文中我有做过说明。官方系统固件解…

【Qt】Qt容器和STL容器的区别

1、简述 Qt容器和STL容器略有不同,作为一个Qter,应该知道它们之间的异同。 Qt容器官网介绍:https://doc.qt.io/qt-5/containers.html STL容器官网介绍:https://zh.cppreference.com/w/cpp/container 2、Qt容器和STL容器的对应关系 注意:QList 与 std::list 无关,QSet …

Infuse Pro for Mac全能视频播放器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

每天五分钟深度学习:向量化方式完成逻辑回归m个样本的前向传播

本文重点 我们已经知道了向量化可以明显的加速程序的运行速度,本节课程将使用向量化来完成逻辑回归的前向传播,不使用一个for循环。 逻辑回归的前向传播 我们先来回忆一下逻辑回归的前向传播,如果我们有m个训练样本,首先对第一个样本进行预测,我们需要计算z,然后计算预…

【QT】SARibbon编译安装开启frameless(QWindowkit)

1.cmake开启frameless 2.检查cmakecache 3.下载编译qwindowkit 拉取saribbon时请 git clone https://github.com/czyt1988/SARibbon.git --recursive使用--recursive可以拉取第三方库 手动下载&#xff1a;https://github.com/stdware/qwindowkit 4.cmake构建 和 visual stu…

qt自定义控件(QLabel)

先创建自定义控件类painter_label 1.自定义类必须给基类传入父窗口指针 2.重写控件中的方法 3.在UI中创建一个QLabel,右键“提升为”&#xff0c;输入类名

后台管理系统登录安全和权限要求

一、前言 几乎所有的系统都有后台管理系统&#xff0c;后台登录需要账号和密码&#xff0c;后台管理员权限需要有控制。所有管理员的操作都应该有操作日志。 二、存在的问题 现在很多系统只需要账号和密码就能登录&#xff0c;有的还是简单账号和简单密码&#xff0c;就是弱口…

在WPF中使用WebView2详解

Microsoft Edge WebView2 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎&#xff0c;以在本机应用中显示 web 内容。 使用 WebView2 可以在本机应用的不同部分嵌入 Web 代码&…

ScriptableObject使用

资料 Scripting/Create modular game architecture in Unity with ScriptableObjects 脚本文档 基础 SO是一个Unity对象&#xff0c;继承UnityEngine.Objec&#xff0c; SO最大的特点是实例文件可共享&#xff0c;有点类似静态数据&#xff0c;同一个实例文件可被多个对象引…

vue3前端开发-小兔鲜项目-form表单的统一校验

vue3前端开发-小兔鲜项目-form表单的统一校验&#xff01;实际上&#xff0c;为了安全起见&#xff0c;用户输入的表单信息&#xff0c;要满足我们的业务需求&#xff0c;参数类型等种种标准之后&#xff0c;才会允许用户向服务器发送登录请求。为此&#xff0c;有必要进行一次…

set_clock_groups -physically_exclusive 和-asynchronous是否有必要同时设置

引言 vc-spyglass sdc检查时遇到的问题 正如vc spyglass sdc check提示Error: 当两个时钟设置成物理互斥或逻辑互斥时&#xff0c;需要另外加上这两个时钟是异步设置的约束。 个人经历&#xff1a; 由于本人经验尚浅&#xff0c;之前遇到的项目&#xff0c;个人理解是设置了物…

W30-python03-pytest+selenium+allure访问百度网站实例

此篇文章为总结性&#xff0c;将pystest、selenium、allure结合起来 功能如下&#xff0c;web自动化&#xff0c;输入baidu网站&#xff0c;搜索“雷军”、打开网页中第一条内容 tools.webkeys 相关文件见附件。 pytestsel.py如下&#xff1a; import time import re impor…

全链路追踪 性能监控,GO 应用可观测全面升级

作者&#xff1a;古琦 01 介绍 随着 Kubernetes 和容器化技术的普及&#xff0c;Go 语言不仅在云原生基础组件领域广泛应用&#xff0c;也在各类业务场景中占据了重要地位。如今&#xff0c;越来越多的新兴业务选择 Golang 作为首选编程语言。得益于丰富的 RPC 框架&#xff…

在 Windows 搭建 flink 运行环境并模拟流数据处理

一、引入 在大数据场景中,开发者追求高效与灵活,Linux 系统以其稳定性成为众多组件的首选,但在资源有限的情况下,在本机搭建一个 Linux 虚拟机集群却显得过于笨重,启动、运行占资源,需要配置网络,无法和windows共享资源,尤其是对只有 8GB 内存的 Windows 系统用户来说…

C++内存管理(候捷)第五讲 笔记

GNU C对allocators的描述 new_allocator 和malloc_allocator&#xff0c;它们都没有特别的动作&#xff0c;无非底部调用operator new和malloc。它们没有用内存池 区别&#xff1a;::operator new是可重载的 智能型的allocator&#xff0c;使用内存池&#xff0c;分一大块然后…