《机器学习数学基础》补充资料:韩信点兵与拉格朗日插值法
本文作者:卓永鸿
19世纪的伟大数学家高斯,他对自己做的数学有非常高的要求,未臻完美不轻易发表。于是经常有这样的情况:其他也很厉害的数学家提出自己的工作,高斯便拿出自己的文章说他一二十年前就做出来了,而且做得更好。导致经常有杰出数学家吐血三升,甚至对高斯怀恨在心。
高斯在 1801年发表《算术研究》(Disquisitiones Arithmeticae),当中提出一个关于同余的定理。后来 1874年,德国科学史家马蒂生,指出早在南北朝时《孙子算经》里面就提出了等价的算法,比高斯早了一千多年。此后,这个定理就被称为中国剩余定理(Chinese remainder theorem)。这下,高斯若天上有知,总算自己也尝了一次这种滋味。
《孙子算经》中所提出的,是“物不知数”问题,俗称“韩信点兵”,这是中国古代数学研究成果中极少数为世界所知晓的。这问题大概是说:有一正数除以三余二、除以五余三、除以七余二,则此正数最小为多少?
这个问题在《孙子算经•卷下》第二十六题,原文抄附如下:“今有物,不知其数。三、三数之,剩二;五、五数之,剩三;七、七数之,剩二。问物几何?答曰:二十三。术曰:‘三、三数之,剩二’,置一百四十;‘五、五数之,剩三’,置六十三;‘七、七数之,剩二’,置三十。并之,得二百三十三。以二百一十减之,即得。凡三、三数之,剩一,则置七十;五,五数之,剩一,则置二十一;七、七数之,剩一,则置十五。一百零五以上,以一百零五减之,即得。”其中“一百零五”乃是一百零五,并非今日口语所指的一百五十。
这类问题在高中数学课程中经常出现,许多老师所授解题方式千奇百怪,常令学生无所适从。然而观察《孙子算经》的算法,它其实是带有比较朴素的一般性思想,先考虑几个简单的特殊情况,将这些特殊情况线性组造出特解,再写出通解。以今日的数学符号表述如下:
首先解齐次方程
{ x h = 3 q 1 + 0 x h = 5 q 2 + 0 x h = 7 q 3 + 0 \begin{cases} x_h = 3q_1 + 0 \\ x_h = 5q_2 + 0 \\ x_h = 7q_3 + 0 \end{cases} ⎩ ⎨ ⎧xh=3q1+0xh=5q2+0xh=7q3+0
得到齐次方程的通解公式
x h = 3 × 5 × 7 × n = 105 n , n ∈ Z (1) x_h = 3 \times 5 \times 7 \times n = 105n, n \in \mathbb{Z}\tag{1} xh=3×5×7×n=105n,n∈Z(1)
接着分别找
{ x 1 = 3 q 11 + 1 x 1 = 5 q 12 + 0 x 1 = 7 q 13 + 0 { x 2 = 3 q 21 + 0 x 2 = 5 q 22 + 1 x 2 = 7 q 23 + 0 { x 3 = 3 q 31 + 0 x 3 = 5 q 32 + 0 x 3 = 7 q 33 + 1 \begin{cases} x_1 = 3q_{11} + 1 \\ x_1 = 5q_{12} + 0 \\ x_1 = 7q_{13} + 0 \end{cases} \qquad \begin{cases} x_2 = 3q_{21} + 0 \\ x_2 = 5q_{22} + 1 \\ x_2 = 7q_{23} + 0 \end{cases} \qquad \begin{cases} x_3 = 3q_{31} + 0 \\ x_3 = 5q_{32} + 0 \\ x_3 = 7q_{33} + 1 \end{cases} ⎩ ⎨ ⎧x1=3q11+1x1=5q12+0x1=7q13+0⎩ ⎨ ⎧x2=3q21+0x2=5q22+1x2=7q23+0⎩ ⎨ ⎧x3=3q31+0x3=5q32+0x3=7q33+1
之特解,得到
x 1 = 70 , x 2 = 21 , x 3 = 15 x_1 = 70, x_2 = 21, x_3 = 15 x1=70,x2=21,x3=15
然后线性组合
x p = 70 × 2 + 21 × 3 + 15 × 2 = 233 (2) x_p = 70 \times 2 + 21 \times 3 + 15 \times 2 = 233\tag{2} xp=70×2+21×3+15×2=233(2)
此便为原问题的一个特解。结合(1)与(2),便得到通解
x = x p + x h = 233 + 105 n , n ∈ Z (3) x = x_p + x_h = 233 + 105n, n \in \mathbb{Z}\tag{3} x=xp+xh=233+105n,n∈Z(3)
其中当 n = − 2 n= -2 n=−2 有最小正整数解 x = 23 x = 23 x=23。写到此处,笔者想起孔子说的:“吾道一以贯之。”
拉格朗日插值法,亦是韩信点兵思想之发扬。以下举一实例,用同样的想法写出拉格朗日插值多项式。
给定 A ( 3 , 2 ) , B ( 2 , − 1 ) , C ( − 1 , 3 ) A(3,2), B(2,-1), C(-1,3) A(3,2),B(2,−1),C(−1,3) 三点,求过此三点的最低次多项式函数 f ( x ) f(x) f(x)。我们先求出三个较特别的二次函数:
f 1 ( x ) :过 ( 3 , 1 ) , ( 2 , 0 ) , ( − 1 , 0 ) f 2 ( x ) :过 ( 3 , 0 ) , ( 2 , 1 ) , ( − 1 , 0 ) f 3 ( x ) :过 ( 3 , 0 ) , ( 2 , 0 ) , ( − 1 , 1 ) \begin{split} f1(x):过(3,1),(2,0),(-1,0) \\ f2(x):过(3,0),(2,1),(-1,0) \\ f3(x):过(3,0),(2,0),(-1,1) \end{split} f1(x):过(3,1),(2,0),(−1,0)f2(x):过(3,0),(2,1),(−1,0)f3(x):过(3,0),(2,0),(−1,1)
然后设定
f ( x ) = 2 ⋅ f 1 ( x ) + ( − 1 ) ⋅ f 2 ( x ) + 3 ⋅ f 3 ( x ) f(x)= 2 \cdot f_1(x)+(-1) \cdot f_2(x)+3 \cdot f_3(x) f(x)=2⋅f1(x)+(−1)⋅f2(x)+3⋅f3(x)
这样便有
{ f ( 3 ) = 2 ⋅ 1 + 0 + 0 = 2 f ( 2 ) = 0 + ( − 1 ) ⋅ 1 + 0 = − 1 f ( − 1 ) = 0 + 0 + 3 ⋅ 1 = 3 \begin{cases} f(3)= 2 \cdot 1+ 0+ 0= 2 \\ f(2)= 0+(-1) \cdot 1+ 0=-1 \\ f(-1)= 0+ 0+ 3 \cdot 1= 3 \end{cases} ⎩ ⎨ ⎧f(3)=2⋅1+0+0=2f(2)=0+(−1)⋅1+0=−1f(−1)=0+0+3⋅1=3
即为所欲求之二次多项式函数。而每个 f i ( x ) f_i(x) fi(x) 皆容易,因 f 1 ( x ) f_1(x) f1(x) 过 ( 2 , 0 ) , ( − 1 , 0 ) (2,0),(-1,0) (2,0),(−1,0),设
f 1 ( x ) = a ( x − 2 ) ( x + 1 ) (4) f_1(x)= a(x - 2)(x+ 1)\tag{4} f1(x)=a(x−2)(x+1)(4)
代 ( 3 , 1 ) (3,1) (3,1) 得
1 = a ⋅ ( 3 − 2 ) ( 3 + 1 ) ⇒ a = 1 ( 3 − 2 ) ( 3 + 1 ) 1 = a \cdot (3- 2)(3+ 1) \Rightarrow a = \frac{1}{(3- 2)(3+ 1)} 1=a⋅(3−2)(3+1)⇒a=(3−2)(3+1)1
再把这个 a a a 代回式子 (4) 得
f 1 ( x ) = ( x − 2 ) ( x + 1 ) ( 3 − 2 ) ( 3 + 1 ) f_1(x)=\frac{(x - 2)(x+ 1)}{(3- 2)(3+ 1)} f1(x)=(3−2)(3+1)(x−2)(x+1)
同样的流程,可解出
f 2 ( x ) = ( x − 3 ) ( x + 1 ) ( 2 − 3 ) ( 2 + 1 ) f 3 ( x ) = ( x − 2 ) ( x − 3 ) ( − 1 − 2 ) ( − 1 − 3 ) \begin{split} f_2(x)&=\frac{(x - 3)(x+ 1)}{(2- 3)(2+ 1)}\\ f_3(x)&=\frac{(x - 2)(x - 3)}{(-1- 2)(-1- 3)} \end{split} f2(x)f3(x)=(2−3)(2+1)(x−3)(x+1)=(−1−2)(−1−3)(x−2)(x−3)
便得到
f ( x ) = 2 ⋅ ( x − 2 ) ( x + 1 ) ( 3 − 2 ) ( 3 + 1 ) + ( − 1 ) ⋅ ( x − 3 ) ( x + 1 ) ( 2 − 3 ) ( 2 + 1 ) + 3 ⋅ ( x − 2 ) ( x − 3 ) ( − 1 − 2 ) ( − 1 − 3 ) f(x)= 2 \cdot \frac{(x - 2)(x+ 1)}{(3- 2)(3+ 1)} + (-1) \cdot \frac{(x - 3)(x+ 1)}{(2- 3)(2+ 1)} + 3 \cdot \frac{(x - 2)(x - 3)}{(-1- 2)(-1- 3)} f(x)=2⋅(3−2)(3+1)(x−2)(x+1)+(−1)⋅(2−3)(2+1)(x−3)(x+1)+3⋅(−1−2)(−1−3)(x−2)(x−3)
这就是拉格朗日插值法。

相关文章:

《机器学习数学基础》补充资料:韩信点兵与拉格朗日插值法
本文作者:卓永鸿 19世纪的伟大数学家高斯,他对自己做的数学有非常高的要求,未臻完美不轻易发表。于是经常有这样的情况:其他也很厉害的数学家提出自己的工作,高斯便拿出自己的文章说他一二十年前就做出来了࿰…...

Spring Boot中保存前端上传的图片
在Spring Boot中保存前端上传的图片可以通过以下步骤实现: 1. 添加依赖 确保在pom.xml中已包含Spring Web依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifact…...
【HTML-15.2】HTML表单按钮全面指南:从基础到高级实践
表单按钮是网页交互的核心元素,作为用户提交数据、触发操作的主要途径,其重要性不言而喻。本文将系统性地介绍HTML表单按钮的各种类型、使用场景、最佳实践以及高级技巧,帮助开发者构建更高效、更易用的表单交互体验。 1. 基础按钮类型 1.1…...

2025最新 MacBook Pro苹果电脑M系列芯片安装zsh教程方法大全
2025最新 MacBook Pro苹果电脑M系列芯片安装zsh教程方法大全 本文面向对 macOS 环境和终端操作尚不熟悉的“小白”用户。我们将从最基础的概念讲起,结合实际操作步骤,帮助你在 2025 年最新 MacBook Pro(搭载苹果 M 系列芯片)的环境…...
43. 远程分布式测试实现
43. 远程分布式测试实现详解 一、远程测试环境配置 1.1 远程WebDriver服务定义 # Chrome浏览器远程服务地址 chrome_url rhttp://localhost:5143# Edge浏览器远程服务地址 edge_url rhttp://localhost:9438关键概念:每个URL对应一个独立的WebDriver服务典型配置…...
探索大语言模型(LLM):RSE流程详解——从文档中精准识别高相关片段
前言 在信息爆炸的时代,如何从海量的文本数据中快速准确地提取出有价值的信息,成为了众多领域面临的共同挑战。RSE(检索增强摘要生成)流程应运而生,它通过一系列精细化的步骤,能够有效地从原始文档中识别出…...
【C++】类的构造函数
类的构造函数 1. 作用:2.语法规则:示例代码:构造函数语法 2.1 特点:示例代码:自定义了构造函数,系统不会再生成默认构造函数示例代码:构造函数重载 3.构造函数常见的写法3.1 无参构造函数3.2 带…...

【ISP算法精粹】动手实战:用 Python 实现 Bayer 图像的黑电平校正
在数字成像领域,图像信号处理器(ISP)如同幕后英雄,默默将传感器捕获的原始数据转化为精美的图像。而黑电平校正,作为ISP预处理流程中的关键一环,直接影响着最终图像的质量。今天,我们就通过Pyth…...
分布式存储技术全景解析:从架构演进到场景实践
目录 技术演进与市场新格局核心架构设计深度剖析前沿技术创新与性能突破行业应用场景实践挑战与未来发展趋势1. 技术演进与市场新格局 1.1 从集中式到分布式的范式转移 传统集中式存储(如NAS/SAN)在扩展性和容错性方面面临根本性瓶颈,而分布式存储通过水平扩展架构和多节点…...
JVM——从JIT到AOT:JVM编译器的云原生演进之路
引入 在Java的世界里,一段代码从开发者手中的文本到计算机执行的机器指令,需要跨越"字节码"这座桥梁。而JVM编译器正是架起这座桥梁的工程师,它的每一次技术演进都推动着Java性能的跃迁。从早期逐行翻译的解释器,到智能…...

Linux中的mysql逻辑备份与恢复
一、安装mysql社区服务 二、数据库的介绍 三、备份类型和备份工具 一、安装mysql社区服务 这是小编自己写的,没有安装的去看看 Linux换源以及yum安装nginx和mysql-CSDN博客 二、数据库的介绍 2.1 数据库的组成 数据库是一堆物理文件的集合,主要包括…...

[HTML5]快速掌握canvas
背景 canvas 是 html5 标准中提供的一个标签, 顾名思义是定义在浏览器上的画布 通过其强大的绘图接口,我们可以实现各种各样的图形,炫酷的动画,甚至可以利用他开发小游戏,包括市面上很流行的数据可视化框架底层都用到了Canvas。…...

Gartner《Emerging Patterns for Building LLM-Based AIAgents》学习心得
一、AI代理概述 2024年,AI代理成为市场热点,它们能自主规划和行动以实现用户目标,与仅能感知、决策、行动和达成目标的AI助手及聊天机器人有本质区别。Gartner定义的AI代理是使用AI技术在数字或物理环境中自主或半自主运行的软件实体。 二、LLM基础AI代理的特性和挑战 优势…...
Hive SQL优化实践:提升大数据处理效率的关键策略
在大数据生态中,Hive作为基于Hadoop的数据仓库工具,广泛应用于海量数据的离线分析场景。然而,随着数据量的指数级增长和业务复杂度的提升,低效的Hive SQL可能导致资源浪费和查询性能瓶颈。本文将从存储优化、计算优化、资源配置三…...
vue中父子参数传递双向的方式不同
在面试中被问到。平时也有用到,但是缺少总结 父传子。父页面会给子页面中定义的props属性传参,子页面接收子传父。父页面需要监听事件来接收子页面通过$emit发送的消息其实说的以上两种都是组件之间传递。还可以通过路由传参, 状态管理器的方式传递 下面…...
LLM 使用 MCP 协议及其原理详解
LLM 使用 MCP 协议及其原理详解 🧠 一、MCP 协议概述 1. MCP 是什么? MCP(Modular Communication Protocol)是一种面向语言模型设计的通用通信协议,其设计目标是: 模块化(Modular࿰…...
DAY 36神经网络加速器easy
仔细回顾一下神经网络到目前的内容,没跟上进度的同学补一下进度。 ●作业:对之前的信贷项目,利用神经网络训练下,尝试用到目前的知识点让代码更加规范和美观。 ●探索性作业(随意完成):尝试进入…...

STM32 单片机启动过程全解析:从上电到主函数的旅程
一、为什么要理解启动过程? STM32 的启动过程就像一台精密仪器的开机自检,它确保所有系统部件按既定方式初始化,才能顺利运行我们的应用代码。对初学者而言,理解启动过程能帮助解决常见“程序跑飞”“不进 main”“下载后无反应”…...

4.RV1126-OPENCV 图像轮廓识别
一.图像识别API 1.图像识别作用 它常用于视觉任务、目标检测、图像分割等等。在 OPENCV 中通常使用 Canny 函数、findContours 函数、drawContours 函数结合在一起去做轮廓的形检测。 2.常用的API findContours 函数:用于寻找图片的轮廓,并把所有的数…...

WEB3——开发者怎么查看自己的合约日志记录
在区块链中查看合约的日志信息(也叫事件 logs),主要有以下几种方式,具体方法依赖于你使用的区块链平台(如 Ethereum、BSC、Polygon 等)和工具(如 Etherscan、web3.js、ethers.js、Hardhat 等&am…...

TDengine 集群容错与灾备
简介 为了防止数据丢失、误删操作,TDengine 提供全面的数据备份、恢复、容错、异地数据实时同步等功能,以保证数据存储的安全。本节简要说明 TDengine 中的容错与灾备。 容错 TDengine 支持 WAL 机制,实现数据的容错能力,保证数…...

MG影视登录解锁永久VIP会员 v8.0 支持手机电视TV版影视直播软件
MG影视登录解锁永久VIP会员 v8.0 支持手机电视TV版影视直播软件 MG影视App电视版是一款资源丰富、免费便捷、且专为大屏优化的影视聚合应用,聚合海量资源,畅享电视直播,是您电视盒子和…...
如何成为一名优秀的产品经理(自动驾驶)
一、 夯实核心基础 深入理解智能驾驶技术栈: 感知: 摄像头、雷达(毫米波、激光雷达)、超声波传感器的工作原理、优缺点、融合策略。了解目标检测、跟踪、SLAM等基础算法概念。 定位: GNSS、IMU、高精地图、轮速计等定…...
BAT脚本编写详细教程
目录 第一部分:BAT脚本简介第二部分:创建和运行BAT脚本第三部分:基本命令和语法第四部分:变量使用第五部分:流程控制第六部分:函数和子程序第七部分:高级技巧第八部分:实用示例第一部分:BAT脚本简介 BAT脚本(批处理脚本)是Windows操作系统中的一种脚本文件,扩展名…...
快速了解 GO之接口解耦
更多个人笔记见: (注意点击“继续”,而不是“发现新项目”) github个人笔记仓库 https://github.com/ZHLOVEYY/IT_note gitee 个人笔记仓库 https://gitee.com/harryhack/it_note 个人学习,学习过程中还会不断补充&…...

【多线程初阶】内存可见性问题 volatile
文章目录 再谈线程安全问题内存可见性问题可见性问题案例编译器优化 volatileJava内存模型(JMM) 再谈线程安全问题 如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该有的结果,则说这个程序是线程安全的,反之,多线程环境中,并发执行后,产生bug就是线程不安全…...

C++ 类模板三参数深度解析:从链表迭代器看类型推导与实例化(为什么迭代器类模版使用三参数?实例化又会是怎样?)
本篇主要续上一篇的list模拟实现遇到的问题详细讲解:<传送门> 一、引言:模板参数的 "三角锁钥" 在 C 双向链表实现中,__list_iterator类模板的三个参数(T、Ref、Ptr)如同精密仪器的调节旋钮&#x…...

MySQL强化关键_018_MySQL 优化手段及性能分析工具
目 录 一、优化手段 二、SQL 性能分析工具 1.查看数据库整体情况 (1)语法格式 (2)说明 2.慢查询日志 (1)说明 (2)开启慢查询日志功能 (3)实例 3.s…...

ASP.NET MVC添加模型示例
ASP.NET MVC高效构建Web应用ASP.NET MVC 我们总在谈“模型”,那到底什么是模型?简单说来,模型就是当我们使用软件去解决真实世界中各种实际问题的时候,对那些我们关心的实际事物的抽象和简化。比如,我们在软件系统中设…...

【Part 3 Unity VR眼镜端播放器开发与优化】第二节|VR眼镜端的开发适配与交互设计
文章目录 《VR 360全景视频开发》专栏Part 3|Unity VR眼镜端播放器开发与优化第一节|基于Unity的360全景视频播放实现方案第二节|VR眼镜端的开发适配与交互设计一、Unity XR开发环境与设备适配1.1 启用XR Plugin Management1.2 配置OpenXR与平…...