当前位置: 首页 > news >正文

【状态空间方程】对于状态空间方程矩阵D≠0时的状态反馈与滑模控制

  又到新的一年啦,2025新年快乐~。前几个月都没更新,主要还是因为不能把项目上的私密工作写进去,所以暂时没啥可写的。最近在山里实习,突然想起年前遗留了个问题一直没解决,没想到这两天在deepseek的加持下很快解决了,只能说AI还是猛,能提供很好的建议。

0. 问题描述

  作为一个控制人,最常见的模型表达式莫过于状态空间方程和二阶的非线性方程了:
  对于绝大多数情况下,上述状态空间方程中的前馈矩阵D一般为0,即输入一般不直接影响输出,但是最近遇到个问题,其辨识出来的模型中矩阵D不为0,然后让你去控制它,这种情况我还真第一次遇到,当我尝试使用最简单的滑模控制来设计控制器时却遇到了问题,并且随后发现了更大的奥秘…
  问题总结:对于前馈矩阵D≠0的情况,如何设计状态反馈或滑模控制器?

1. 状态反馈控制


  状态反馈控制通过反馈状态变量来设计控制器,即使 D≠0,状态反馈控制律仍可以设计为 u = − K x u=-Kx u=Kx 的形式。matlab提供了place函数,可直接进行极点配置得到反馈增益矩阵K。
  若状态变量不可测时,可使用输出反馈控制,输出反馈控制律为 u = − K y u=-Ky u=Ky,其中 y = C x + D u y=Cx+Du y=Cx+Du
  place函数适用于多输入多输出系统,而acker函数仅用于单输入系统。

仿真验证

  以倒立摆系统为例,人为的让矩阵D不为0,验证状态反馈控制,以下为系统输出变量y的变化曲线,可以看出,即使对于D≠0的情况,状态反馈控制仍然具有良好的控制效果。

2. 滑模控制

  为了考虑D≠0的影响,最开始是想设计滑模面 s = S x + K y s=Sx+Ky s=Sx+Ky 的形式,并采用等效控制和切换控制的方式 u = u e q + u s w u=u_{eq}+u_{sw} u=ueq+usw 设计控制律,不过后续发现无论如何调整设计矩阵S和K的参数,均不能完成控制。期间学到了在对y求导时,控制输入u的导数du可以适当忽略,原因如下:

  • 控制输入的动态特性:在实际系统中,执行器的动态特性通常比系统的动态特性快得多,即执行器的响应时间远小于系统的时间常数。因此, u ˙ \dot{u} u˙ 的影响可以忽略不计。
  • 滑模控制的鲁棒性:滑模控制的核心思想是通过高频切换控制律(如符号函数 sign(s(x)))来驱动系统状态到达滑模面并保持在滑模面上。这种高频切换本身就具有很强的鲁棒性,能够克服系统中的不确定性和扰动。即使 u ˙ \dot{u} u˙ 存在,其影响也会被滑模控制的鲁棒性所抑制。
  • 简化设计过程:忽略 u ˙ \dot{u} u˙ 可以大大简化控制律的设计过程。如果考虑 u ˙ \dot{u} u˙,控制律的设计会变得非常复杂,尤其是在多输入多输出(MIMO)系统中。通过忽略 u ˙ \dot{u} u˙,可以将问题简化为一个静态反馈控制问题,从而更容易设计控制器。
  • 实际系统的验证:在实际系统中,忽略 u ˙ \dot{u} u˙ 的假设通常可以通过仿真和实验验证。如果仿真和实验结果表明系统的性能满足要求,那么这一假设就是合理的。

  特殊情况下的处理:如果 u ˙ \dot{u} u˙ 的影响确实不可忽略(例如,执行器的动态特性较慢),可以通过以下方法处理:① 引入动态扩张:将 u 视为一个新的状态变量,设计扩张状态空间方程。② 高阶滑模控制:设计高阶滑模控制器,直接考虑 u ˙ \dot{u} u˙ 的影响。

  解决方案:由于联合设计参数 S S S K K K 没有成功,因此这里将滑模面设计为仅与状态变量有关的形式 s = S x s=Sx s=Sx ,并采用极点配置法计算参数 S S S。对于单输入系统,采用Ackermann公式设计参数 S S S
S = [ 0 , 0 , . . . , 1 ] ⏟ n 维 [ B , A B , A 2 B , . . . , A n − 1 B ] − 1 ( A − λ 1 ∗ e y e ( n ) ) ∗ ( A − λ 2 ∗ e y e ( n ) ) . . . ∗ ( A − λ n − 1 ∗ e y e ( n ) ) S=\underset{n\text{维}}{\underbrace{\left[ 0,0,...,1 \right] }}\left[ B,AB,A^2B,...,A^{n-1}B \right] ^{-1}\left( A-\lambda _1*eye\left( n \right) \right) *\left( A-\lambda _2*eye\left( n \right) \right) ...*\left( A-\lambda _{n-1}*eye\left( n \right) \right) S=n [0,0,...,1][B,AB,A2B,...,An1B]1(Aλ1eye(n))(Aλ2eye(n))...(Aλn1eye(n))其中 λ 1 , λ 2 , . . . λ n − 1 \lambda _1,\lambda _2,...\lambda _{n-1} λ1,λ2,...λn1是滑模面的期望极点,之所以最后下标是n-1而不是n,是因为滑模面 s(x) = 0 是一个超平面,其维度比原系统的状态空间维度低一维(即 n-1 维)。

仿真验证

  同样的,以倒立摆系统为例,验证滑模控制,观测系统的输出变量y,可以看出,即使对于D≠0的情况,滑模控制依然具有较好的控制效果,但明显不如状态反馈平滑,且伴随轻微抖振情况。

3. C≠单位阵时的线性变换

  上述解决了矩阵D≠0的情况,此外当D=0时还存在一种情况,即C不等于单位矩阵,此时需要采用线性变换进行处理,即 { A ′ = T − 1 A T B ′ = T − 1 B C ′ = C T \begin{cases} A^{\prime}=T^{-1}AT\\ B^{\prime}=T^{-1}B\\ C^{\prime}=CT\\ \end{cases} A=T1ATB=T1BC=CT其中, C ′ C^{\prime} C 为变换后的单位阵,并可解出满足条件的任一变换矩阵 T T T,随后得到变换后的 A 、 B A、B AB 矩阵。

4. 总结

  基于以上结论,总结如下:

  • 虽然可通过状态变换消去D,但是会引入新的状态变量,所以视情况处理D的影响。
  • 对于D≠0时的状态反馈控制以及滑模控制,大多数情况下可以不考虑D的影响,仍然采用状态变量反馈控制即可,少数情况下需要考虑输出D的影响;
  • 对于控制输入u的导数影响可以适当忽略,实在不能忽略的话可设计高阶滑模控制器或扩张状态空间方程来考虑u;
  • 善用AI工具,用批判的眼光看待它给出的答案(deepseek还是好用)。

相关文章:

【状态空间方程】对于状态空间方程矩阵D≠0时的状态反馈与滑模控制

又到新的一年啦,2025新年快乐~。前几个月都没更新,主要还是因为不能把项目上的私密工作写进去,所以暂时没啥可写的。最近在山里实习,突然想起年前遗留了个问题一直没解决,没想到这两天在deepseek的加持下很快解决了&am…...

优雅的git log输出内容更加醒目

执行命令 git config --global alias.lg "log --graph --prettyformat:%C(red)%h%C(reset) - %C(yellow)%d%C(reset) %C(magenta)<%an>%C(reset) %C(cyan)(%ad)%C(reset) %C(green)%s%C(reset) (%cr) --abbrev-commit --dateformat:%Y-%m-%d %H:%M:%S"...

PySide(PyQT)使用场景(QGraphicsScene)进行动态标注的一个demo

用以标注图像的一个基本框架demo import sys from PySide6.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QMainWindow, QLabel, QGraphicsPixmapItem from PySide6.QtGui import QPixmap, QPainter, QTransform from PySide6.QtCore import Qt, QPointF, S…...

LeetCode每日精进:876.链表的中间结点

题目链接&#xff1a;876.链表的中间结点 题目描述&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5…...

ollama实践笔记

目录 一、linux安装文件命令&#xff1a; 二、启动ollama 三、linux 如何把ollama serve做为服务方式启动 四、安装deepseek-r1 五、如何在网页中使用ollama&#xff1f; ‌5.1 安装Open WebUI【不推荐】 5.2 安装ollama-webui-lite 六、Ubuntu安装docker、只需要一句话…...

联想电脑如何进入BIOS?

打开设置 下滑找到更新与安全 点击恢复和立即重新启动 选择疑难解答 选择UEFI固件设置 然后如果有重启点击重启 重启开机时一直点击FNF10进入BIOS界面...

CentOS本机配置为时间源

CentOS本机配置为时间源 安装chrony&#xff0c;默认已安装修改配置文件 /etc/chrony.conf客户端配置 安装chrony&#xff0c;默认已安装 yum -y install chrony修改配置文件 /etc/chrony.conf # cat /etc/chrony.conf | grep -Ev "^$|#" server ceph00 iburst dri…...

使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序

作者&#xff1a;来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪&#xff0c;而无需任何代码更改。 介绍 去年&#xff0c;我们宣布了 OpenTelemetry…...

微信小程序网络请求封装

微信小程序的网络请求为什么要封装&#xff1f;封装使用有什么好处&#xff1f; 封装的目的是为了偷懒&#xff0c;试想一下每次都要wx.request&#xff0c;巴拉巴拉传一堆参数&#xff0c;是不是很麻烦&#xff0c;有些公共的参数例如header&#xff0c;baseUrl是不是可以封装…...

【自学笔记】人工智能基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 人工智能重点知识点总览一、基础概念与原理1.1 人工智能定义与发展1.2 算法与数据结构1.3 数学基础 二、机器学习2.1 监督学习2.2 无监督学习2.3 强化学习 三、深度…...

Docker 常用命令基础详解(二)

四、容器操作命令 4.1 运行容器 使用docker run命令可以创建并运行一个容器&#xff0c;它就像是一个神奇的 “启动器”&#xff0c;让镜像中的应用程序在容器中运行起来。其基本语法为&#xff1a; docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 其中&#xff0c;OPTIONS…...

初学java 数据库相关学习

创建数据库&#xff1a; 主键: unsigned primary key auto_increment 外键: foreign key(xx) references table_name(xx) 字段: 类型: int ; tinyint ;char(20);varchar(255); date; datetime; text; float(5,2); double(10,2); long; decimal(15,10) 约束:primary key; foreig…...

ARM64 Trust Firmware [一]

ARMv8 启动流程&#xff1a; 在《RK3568上电启动流程 [十五]》中&#xff0c;简单介绍了 RK3568 的上电启动过程&#xff0c;本篇再详细分解其启动流程。 在 ARMv8 架构中&#xff0c;启动流程包含多个阶段&#xff0c;这些阶段被称为 BL &#xff08;bootloader&#xff09; …...

K8S容器启动提示:0/2 nodes are available: 2 Insufficient cpu.

问题&#xff1a;K8S的容器启动报错0/2 nodes are available: 2 Insufficient cpu. 原因&#xff1a;Pod的资源请求&#xff08;requests&#xff09;设置不当&#xff1a;在Kubernetes中&#xff0c;调度器根据Pod的requests字段来决定哪个节点可以运行该Pod。如果一个Pod声明…...

数据结构:图论入门

图论起源于欧拉对哥尼斯堡七桥问题的解决. 他构建的图模型将陆地用点来表示, 桥梁则用线表示, 如此一来, 该问题便转化为在图中能否不重复地遍历每条边的问题. 图论的应用 地图着色 在地图着色问题中, 我们用顶点代表国家, 将相邻国家之间用边相连. 这样, 问题就转化为用最少…...

DataBase【MySQL基础夯实使用说明(下)】

MySQL数据库 &#x1f3c6;当领导表示关心时&#xff0c;您怎么回复&#xff1f; ⚠️不要傻傻的说应该的&#xff0c;这样不仅会抹杀掉你的辛苦&#xff0c;也让领导没办法接话&#xff01; &#x1f514;文章末尾彩蛋&#xff01; 文章目录 MySQL数据库前言一、约束1.1.外键…...

Golang的多团队协作编程模式与实践经验

Golang的多团队协作编程模式与实践经验 一、多团队协作编程模式概述 在软件开发领域&#xff0c;多团队协作编程是一种常见的工作模式。特别是对于大型项目来说&#xff0c;不同团队间需要协同合作&#xff0c;共同完成复杂的任务。Golang作为一种高效、并发性强的编程语言&…...

详解spotbugs -textui常用命令(包括生成html测试报告)

用命令运行spotbugs 本文默认大家了解spotbugs的基础使用&#xff0c;如果不了解可以参考文章 使用神器Spotbugs&#xff0c;轻松入门静态代码分析-CSDN博客 我们在使用spotbugs 对Java代码进行静态分析&#xff0c;查找相关的漏洞时通常在使用Maven和Gradle进行构建的过程中…...

C++:Map和Set

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 A.set的模板参数列表 B.set的构造 C.set的迭代器 D.set的容量 E.set的修改操作 F.set的使用举例 A.map的模板参数列表 B.map的构造 C.map的迭代器 D.map的容量 E.map中元素的修改 operator[ ] insert()…...

【Unity Shader编程】之顶点着色器

来一张AI提供的资料 在shader编程中&#xff0c;定义的结构体&#xff0c;有些是会被自动赋值&#xff0c;有些是必须要手动赋值的&#xff0c;这就涉及到了语义&#xff0c; 例如 struct appdata{float4 vertex : POSITION;float vertex2;float2 uv : TEXCOORD0;};结构体里面定…...

Hive之[Hive]详细安装步骤

hive 是依赖hadoop中的hdfs作为存储&#xff0c;依赖mysql管理元数据 master节点 集群环境 master 192.168.204.130 slave1 192.168.204.131 slave2 192.168.204.132组件下载地址 https://archive.apache.org/dist/hive/hive-1.2.2/ 或 链接: https://pan.baidu.com/s/1…...

3.【线性代数】——矩阵乘法和逆矩阵

三 矩阵乘法和逆矩阵 1. 矩阵乘法1.1 常规方法1.2 列向量组合1.3 行向量组合1.4 单行和单列的乘积和1.5 块乘法 2. 逆矩阵2.1 逆矩阵的定义2.2 奇异矩阵2.3 Gauss-Jordan 求逆矩阵2.3.1 求逆矩阵 ⟺ \Longleftrightarrow ⟺解方程组2.3.2 Gauss-Jordan求逆矩阵 1. 矩阵乘法 1.…...

手动配置IP

手动配置IP&#xff0c;需要考虑四个配置项&#xff1a; 四个配置项 IP地址、子网掩码、默认网关、DNS服务器 IP地址&#xff1a;格式表现为点分十进制&#xff0c;如192.168.254.1 子网掩码&#xff1a;用于区分网络位和主机位 【子网掩码的二进制表达式一定是连续的&#…...

unity is running as administrator 管理员权限问题

每次打开工程弹出unity is running as administrator的窗口 unity版本2022.3.34f1&#xff0c;电脑系统是win 11系统解决方法一&#xff1a;解决方法二&#xff1a; unity版本2022.3.34f1&#xff0c;电脑系统是win 11系统 每次打开工程都会出现unity is running as administr…...

AI在电竞比分网中的主要应用场景

AI在电竞体育比分网的数据应用非常广泛&#xff0c;能够显著提升数据分析、预测、用户体验和商业价值。以下是AI在电竞比分网中的主要应用场景&#xff1a; 1. 实时数据采集与分析 比赛数据实时更新&#xff1a;AI通过自动化系统实时采集比赛数据&#xff08;如击杀数、经济差、…...

消息中间件:RabbitMQ镜像集群部署配置全流程

目录 1、特点 2、RabbitMQ的消息传递模式 2.1、简单模式&#xff08;Simple Mode&#xff09; 2.2、工作队列模式&#xff08;Work Queue Mode&#xff09; 2.3、发布/订阅模式&#xff08;Publish/Subscribe Mode&#xff09; 2.4、路由模式&#xff08;Routing Mode&am…...

TCP的拥塞控制

什么是TCP的拥塞控制&#xff1f;它的工作原理是什么&#xff1f;为什么需要拥塞控制&#xff1f; TCP拥塞控制简介 想象一下&#xff0c;你和一群朋友在一条狭窄的小路上跑步。如果每个人都拼命跑&#xff0c;小路很快就会变得拥挤不堪&#xff0c;大家互相碰撞&#xff0c;…...

Jenkins 配置 Git Repository 五

Jenkins 配置 Git Repository 五 这里包含了 Freestyle project 任务类型 和 Pipeline 任务类型 关于 Git 仓库的配置&#xff0c;如下 不同的任务类型&#xff0c;只是在不同的模块找到 配置 Git 仓库 找到 Git 仓库配置位置之后&#xff0c;所有的任务类型配置都是一样的 …...

父组件中循环子组件调用

父组件中循环子组件调用 父组件 //father.vue <template><view><view v-for"(item,index) in list"><son ref"son"></son></view><buton click"submit">123</buton></view> </templ…...

【网络安全.渗透测试】Cobalt strike(CS)工具使用说明

目录 前言 一、工具显著优势 二、安装 Java 运行环境 三、实验环境搭建要点 四、核心操作流程详解 (一)环境准备与连接步骤 (二)主机上线与深度渗透流程 五、其他实用功能应用指南 (一)office 宏 payload 应用 (二)Https Payload 应用 (三)信息收集策略 …...

C++ 设计模式-建造者模式

以下是一个完整的C建造者模式示例&#xff0c;包含产品类、建造者接口、具体建造者、指挥者以及测试代码&#xff1a; #include <iostream> #include <string> #include <memory>// 产品类&#xff1a;汽车 class Car { public:void setBody(const std::str…...

【Unity3D】Unable to detect SDK in the selected directory

某天突然发现SDK选中自己的目录 或 打安卓包时 提示SDK Tools相关的报错 打开Android Studio的SDK Manager更新Android SDK Tools...

QML使用ChartView绘制饼状图

一、工程配置 首先修改CMakeLists.txt&#xff0c;按下图修改&#xff1a; find_package(Qt6 6.4 REQUIRED COMPONENTS Quick Widgets) PRIVATEtarget_link_libraries(appuntitledPRIVATE Qt6::QuickPRIVATE Qt6::Widgets )其次修改main.cpp&#xff0c;按下图修改&#xff…...

ollama本地部署 deepseek离线模型安装 一套从安装到UI运行

一、安装本地ollama 1、下载ollama (1)百度网盘windows版本 通过网盘分享的文件&#xff1a;OllamaSetup.exe 链接: https://pan.baidu.com/s/15ca6WAzrc4wWph5H9BEOzw 提取码: 283u (2)进入官网&#xff1a;Ollama 2、选择你的系统 等待下载完成就可以了。 注&#xff1a;这…...

【linux】ubunbu切换到root

在 Ubuntu 中切换到 root 用户有几种方法&#xff0c;具体取决于你的需求和权限配置。以下是常见的几种方式&#xff1a; 1. 使用 sudo 临时切换到 root 如果你当前用户有 sudo 权限&#xff0c;可以使用以下命令临时切换到 root 用户&#xff1a; bash sudo -i 或者&#xff1…...

推理框架对比:ReAct、思维链(COT)和思维树(TOT)谁更胜一筹

推理框架作为 AI 解决复杂问题的核心机制&#xff0c;正逐渐成为研究和应用的焦点。ReAct、思维链&#xff08;Chain-of-Thought&#xff0c;CoT&#xff09;&#xff08;Chain-of-Thought (CoT)&#xff1a;引导大型语言模型解决问题的有效策略&#xff09;和思维树&#xff0…...

electron.vite 项目创建以及better-sqlite3数据库使用

1.安装electron.vite npm create quick-start/electronlatest中文官网&#xff1a;https://cn.electron-vite.org/ 2. 安装项目依赖 npm i3.修改 electron-builder 配置文件 appId: com.electron.app productName: text33 directories:buildResources: build files:- !**/.v…...

Dockerfiles 的 Top 10 常见 DevOps/SRE 面试问题及答案

1. RUN 和 CMD 之间有什么区别&#xff1f; RUN : 在镜像构建过程中执行命令&#xff0c;创建一个新的层。通常用于安装软件包。 示例: RUN apt-get update && apt-get install -y curlCMD : 指定容器启动时默认运行的命令。它在运行时执行&#xff0c;而不是在构建过程…...

Sentinel——Spring Boot 应用接入 Sentinel 后内存开销增长计算方式

接入 Sentinel 对 Spring Boot 应用的内存消耗影响主要取决于 规则数量、资源数量、监控粒度、并发量 等因素。 1. 核心内存消耗来源 (1) Sentinel 核心库 默认依赖&#xff1a;Sentinel Core 本身占用较小&#xff0c;通常在 10~50MB&#xff08;取决于资源数量和规则复杂度…...

domain 网络安全 网络安全域

文章目录 1、域的概述 1.1、工作组与域1.2、域的特点1.3、域的组成1.4、域的部署概述1.5、活动目录1.6、组策略GPO 2、域的部署实验 2.1、建立局域网&#xff0c;配置IP2.2、安装活动目录2.3、添加用户到指定域2.4、将PC加入域2.5、实验常见问题 3、OU&#xff08;组织单位…...

OpenCV机器学习(2)提升算法类cv::ml::Boost

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::Boost 是 OpenCV 机器学习模块中的一部分&#xff0c;用于实现提升算法&#xff08;Boosting Algorithms&#xff09;。Boosting 是一种…...

【Java 面试 八股文】框架篇

框架篇 1. Spring框架中的单例bean是线程安全的吗&#xff1f;2. 什么是AOP&#xff1f;3. 你们项目中有没有使用到AOP&#xff1f;4. Spring中的事务是如何实现的&#xff1f;5. Spring中事务失效的场景有哪些&#xff1f;6. Spring的bean的生命周期&#xff1f;7. Spring中的…...

基于HAL库的按钮实验

实验目的 掌握STM32 HAL库的GPIO输入配置方法。 实现通过按钮控制LED亮灭&#xff08;支持轮询和中断两种模式&#xff09;。 熟悉STM32CubeMX的外部中断&#xff08;EXTI&#xff09;配置流程。 实验硬件 开发板&#xff1a;STM32系列开发板&#xff08;如STM32F103C8T6、N…...

TCP 端口号为何位于首部前四个字节?协议设计的智慧与启示

知乎的一个问题很有意思&#xff1a;“为什么在TCP首部中要把TCP的端口号放入最开始的四个字节&#xff1f;” 这种问题很适合我这种搞历史的人&#xff0c;大年初一我给出了一个简短的解释&#xff0c;但仔细探究这个问题&#xff0c;我们将会获得 TCP/IP 被定义的过程。 文…...

前端实现在PDF上添加标注(1)

前段时间接到一个需求&#xff0c;用户希望网页上预览PDF&#xff0c;同时能在PDF上添加文字&#xff0c;划线&#xff0c;箭头和用矩形框选的标注&#xff0c;另外还需要对已有的标注进行修改&#xff0c;删除。 期初在互联网上一通搜索&#xff0c;对这个需求来讲发现了两个问…...

Springboot 中如何使用Sentinel

在 Spring Boot 中使用 Sentinel 非常方便&#xff0c;Spring Cloud Alibaba 提供了 spring-cloud-starter-alibaba-sentinel 组件&#xff0c;可以快速将 Sentinel 集成到你的 Spring Boot 应用中&#xff0c;并利用其强大的流量控制和容错能力。 下面是一个详细的步骤指南 …...

如何优化React应用的性能?

文章目录 1. 引言2. 渲染优化2.1 使用 React.memo 避免不必要的重新渲染2.2 使用 shouldComponentUpdate 或 PureComponent2.3 使用 useMemo 和 useCallback 3. 异步渲染与懒加载3.1 使用 React.lazy 和 Suspense 实现懒加载3.2 分割代码&#xff08;Code-Splitting&#xff09…...

ES的java操作

ES的java操作 一、添加依赖 在pom文件中添加依赖包 <dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><!-- elastic…...

八大排序——简单选择排序

目录 1.1基本操作&#xff1a; 1.2动态图&#xff1a; 1.3代码&#xff1a; 代码解释 1. main 方法 2. selectSort 方法 示例运行过程 初始数组 每轮排序后的数组 最终排序结果 代码总结 1.1基本操作&#xff1a; 选择排序&#xff08;select sorting&#xff09;也…...

算法学习笔记之贪心算法

导引&#xff08;硕鼠的交易&#xff09; 硕鼠准备了M磅猫粮与看守仓库的猫交易奶酪。 仓库有N个房间&#xff0c;第i个房间有 J[i] 磅奶酪并需要 F[i] 磅猫粮交换&#xff0c;硕鼠可以按比例来交换&#xff0c;不必交换所有的奶酪 计算硕鼠最多能得到多少磅奶酪。 输入M和…...