48、Java正则匹配器:透明边界、锚定边界及扫描器方法详解

Java正则匹配器:透明边界、锚定边界及扫描器方法详解

1. 透明边界与锚定边界

在正则表达式匹配中,透明边界和锚定边界是两个重要的概念,它们可以影响匹配的结果。

1.1 透明边界

透明边界标志(transparent-bounds flag)决定了正则引擎是否能“看到”区域边界之外的字符。默认情况下,该标志为 false ,这意味着区域边界对于前瞻、后瞻和单词边界等“查找”结构是不透明的,正则引擎无法看到区域边界之外的字符。

相关方法如下:
- Matcher useTransparentBounds(boolean b) :根据传入的参数将匹配器的透明边界标志设置为 true 或 false ,默认值为 false 。该方法返回匹配器对象本身,可用于方法链调用。
- boolean hasTransparentBounds() :如果透明边界生效,则返回 true ,否则返回 false 。

以下是一个示例,展示了默认透明边界标志为 false 时的情况:

String regex = "\\bcar\\b"; // "\b car\b"
String text = "Madagascar is best seen by car or bike.";
Matcher m = Pattern.compile(regex).matcher(text);
m.region(7, text.length());
m.find();
System.out.println("Matches starting at character " + m.start());

输出结果为:

Matches starting at character 7

这表明在区域的起始位置(“Madagascar” 的中间)匹配到了单词边界,尽管实际上这里并不是一个真正的单词边界。区域的非透明边缘“欺骗”了单词边界匹配。

如果在 find 调用之前添加 m.useTransparentBounds(true); ,则输出结果变为:

Matches starting at character 27

因为此时边界是透明的,引擎可以看到区域起始位置之前的字符 's' 是一个字母,从而禁止 \b 在该位置匹配。

1.2 锚定边界

锚定边界标志(anchoring-bounds flag)决定了行锚点(如 ^ 、 \A 、 $ 、 \z 、 \Z )是否在区域边界匹配。默认情况下,该标志为 true ,这意味着行锚点会在区域边界匹配,即使这些边界已经从目标字符串的起始和结束位置移动。

相关方法如下:
- Matcher useAnchoringBounds(boolean b) :根据传入的参数将匹配器的锚定边界标志设置为 true 或 false ,默认值为 true 。该方法返回匹配器对象本身,可用于方法链调用。
- boolean hasAnchoringBounds() :如果锚定边界生效,则返回 true ,否则返回 false 。

将该标志设置为 false 意味着行锚点仅在目标字符串的真正结束位置匹配(如果区域包含这些位置)。关闭锚定边界的原因与开启透明边界的原因类似,例如为了使区域的语义与用户的期望(“光标不在文本开头”)保持一致。

2. 方法链

方法链是一种将多个方法调用连接在一起的技术,它可以使代码更加简洁。例如,以下代码展示了如何使用方法链来准备匹配器并设置其选项:

Matcher m = Pattern.compile(regex).matcher(text).region(5,text.length())
    .useAnchoringBounds(false).useTransparentBounds(true);

这种方式虽然不会增加额外的功能,但可以提高代码的可读性和简洁性。

3. 构建扫描器的方法

在 Java 1.5 中,新增了 hitEnd 和 requireEnd 两个匹配器方法,主要用于构建扫描器。扫描器将字符流解析为令牌流,这两个方法可以帮助扫描器决定是否应该使用刚刚完成的匹配尝试的结果来确定当前输入的正确解释。

3.1 hitEnd 方法

boolean hitEnd() 方法用于指示正则引擎在之前的匹配尝试中是否尝试检查输入的尾随结束位置之外的内容(无论该尝试最终是否成功)。如果返回 true ,则表示更多的输入可能会改变匹配结果;如果返回 false ,则表示之前的匹配结果仅基于正则引擎可用的输入,追加额外的文本不会改变结果。

该方法在 Java 1.5 中存在一个 bug,在特定情况下(当在不区分大小写模式下尝试一个可选的单字符正则组件且尝试失败时)会导致不可靠的结果。在 Java 1.6 中,该 bug 已被修复。对于 Java 1.5,可以通过以下两种方法解决:
- 关闭不区分大小写模式(至少对于有问题的子表达式)。
- 将单字符替换为其他内容,如字符类。

例如,将表达式 >=? 改为 (?-i: >=? ) ,或者将 a;an;the 改为 [aA];an;the 。

3.2 requireEnd 方法

boolean requireEnd() 方法仅在成功匹配后才有意义,它用于指示正则引擎是否依赖输入的结束位置来实现该匹配。如果返回 true ,则表示额外的输入可能会导致匹配失败;如果返回 false ,则表示额外的输入可能会改变匹配的细节,但不会将成功变为失败。

3.3 示例

以下表格展示了 hitEnd 和 requireEnd 在 lookingAt 搜索后的示例:
| Regex | Text | Match | hitEnd() | requireEnd() |
| — | — | — | — | — |
| \d+\b ; [><]=? | ‘1234’ | ‘1234 1234’ | true | true |
| \d+\b ; [><]=? | ‘1234 > 567’ | ‘1234 1234 > 567’ | false | false |
| \d+\b ; [><]=? | ‘>’ | ‘>>’ | true | false |
| \d+\b ; [><]=? | ‘> 567’ | ‘>> 567’ | false | false |
| \d+\b ; [><]=? | ‘>=’ | ‘>= >=’ | false | false |
| \d+\b ; [><]=? | ‘>= 567’ | ‘>= >= 567’ | false | false |
| \d+\b ; [><]=? | ‘oops’ | no match | false | - |
| ( set ; setup )\b | ‘se’ | no match | true | - |
| ( set ; setup )\b | ‘set’ | ‘set set’ | true | true |
| ( set ; setup )\b | ‘setu’ | no match | true | - |
| ( set ; setup )\b | ‘setup’ | ‘setup setup’ | true | true |
| ( set ; setup )\b | ‘set x=3’ | ‘set set x=3’ | false | false |
| ( set ; setup )\b | ‘setup x’ | ‘setup setup x’ | false | false |
| ( set ; setup )\b | ‘self’ | no match | false | - |
| ( set ; setup )\b | ‘oops’ | no match | false | - |

4. 其他匹配器方法

除了上述方法外,匹配器类还提供了一些其他方法:
- Matcher reset() :重新初始化匹配器的大部分方面,丢弃之前成功匹配的信息,将输入位置重置为文本的起始位置,并将区域重置为“整个文本”的默认值。只有锚定边界和透明边界标志保持不变。 replaceAll 、 replaceFirst 和单参数形式的 find 方法会在内部调用 reset ,从而产生重置区域的副作用。该方法返回匹配器本身,可用于方法链调用。
- Matcher reset(CharSequence text) :与 reset() 方法类似,但还会将目标文本更改为新的 String 或实现 CharSequence 接口的对象。当需要将相同的正则表达式应用于多个文本块时,使用该方法重置文本比创建新的匹配器更高效。该方法返回匹配器本身,可用于方法链调用。
- Pattern pattern() :返回与匹配器关联的 Pattern 对象。要查看正则表达式本身,可使用 m.pattern().pattern() 。
- Matcher usePattern(Pattern p) :自 Java 1.5 起可用,该方法将匹配器关联的 Pattern 对象替换为提供的对象。该方法不会重置匹配器,允许你在匹配器文本的“当前位置”开始循环遍历不同的模式以查找匹配。该方法返回匹配器本身,可用于方法链调用。
- String toString() :自 Java 1.5 起添加,该方法返回一个包含匹配器基本信息的字符串,用于调试。字符串的内容和格式可能会发生变化。

5. 查询匹配器的目标文本

Matcher 类没有提供直接查询当前目标文本的方法,但可以通过以下方式实现:

// This pattern, used in the function below, is compiled and saved here for efficiency.
static final Pattern pNeverFail = Pattern.compile("^");
// Return the target text associated with a matcher object.
public static String text(Matcher m)
{
    // Remember these items so that we can restore them later.
    Integer regionStart = m.regionStart();
    Integer regionEnd = m.regionEnd();
    Pattern pattern = m.pattern();
    // Fetch the string the only way the class allows.
    String text = m.usePattern(pNeverFail).replaceFirst("");
    // Put back what we changed (or might have changed).
    m.usePattern(pattern).region(regionStart, regionEnd);
    // Return the text
    return text;
}

该方法使用一个虚拟模式和替换字符串调用 replaceFirst 来获取目标文本的未修改副本。在这个过程中,它会重置匹配器,但会恢复区域设置。虽然这不是一个特别优雅的解决方案(效率不高,并且总是返回一个 String 对象,即使匹配器的目标文本可能是不同的类),但在有更好的方法之前,它可以暂时满足需求。

6. 其他模式方法

除了主要的编译工厂方法外, Pattern 类还包含一些辅助方法:
- split :该方法有两种形式,详细内容可参考相关文档。
- String pattern() :返回用于创建模式的正则表达式字符串参数。
- String toString() :自 Java 1.5 起,该方法是 pattern 方法的同义词。
- int flags() :返回创建模式时传递给编译工厂的标志(作为整数)。

综上所述,Java 中的正则匹配器提供了丰富的功能和方法,通过合理使用透明边界、锚定边界、方法链以及构建扫描器的方法,可以更灵活地进行正则表达式匹配。同时,对于一些特殊情况(如 hitEnd 方法的 bug),也有相应的解决办法。在实际应用中,根据具体需求选择合适的方法和标志,能够提高匹配的准确性和效率。

Java正则匹配器:透明边界、锚定边界及扫描器方法详解

7. 方法使用流程总结

为了更清晰地展示各个方法的使用流程,下面通过 mermaid 格式的流程图来说明。

graph LR
    A[开始] --> B[编译正则表达式]
    B --> C[创建匹配器]
    C --> D{是否需要设置区域}
    D -- 是 --> E[设置区域]
    D -- 否 --> F{是否需要设置锚定边界}
    E --> F
    F -- 是 --> G[设置锚定边界]
    F -- 否 --> H{是否需要设置透明边界}
    G --> H
    H -- 是 --> I[设置透明边界]
    H -- 否 --> J{是否需要进行匹配操作}
    I --> J
    J -- 是 --> K[进行匹配操作]
    J -- 否 --> L[结束]
    K --> M{是否需要使用 hitEnd 或 requireEnd}
    M -- 是 --> N[使用 hitEnd 或 requireEnd 判断]
    M -- 否 --> O{是否需要替换操作}
    N --> O
    O -- 是 --> P[进行替换操作]
    O -- 否 --> Q{是否需要查询目标文本}
    P --> Q
    Q -- 是 --> R[查询目标文本]
    Q -- 否 --> S[结束]
    R --> S

这个流程图展示了从编译正则表达式开始,到最终结束的整个过程。在这个过程中,可以根据具体需求选择是否设置区域、锚定边界、透明边界,进行匹配操作、替换操作以及查询目标文本等。

8. 实际应用场景分析

下面通过几个实际应用场景来进一步说明这些方法的使用。

8.1 文本编辑中的搜索替换

在文本编辑应用中,用户可能会在光标位置之后进行搜索和替换操作。例如,用户在编辑一段文本时,光标位于 “Madagascar is much too large to see on foot, so you’ll need a car.” 中的某个位置,想要将 “\bcar\b” 替换为 “automobile”。可以使用以下代码实现:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TextEditSearchReplace {
    public static void main(String[] args) {
        String regex = "\\bcar\\b";
        String text = "Madagascar is much too large to see on foot, so you’ll need a car.";
        Matcher m = Pattern.compile(regex).matcher(text);
        // 假设光标位置为 7
        m.region(7, text.length());
        m.useTransparentBounds(true);
        String newText = m.replaceAll("automobile");
        System.out.println(newText);
    }
}

在这个例子中,通过设置区域和透明边界,确保只在光标位置之后进行搜索和替换,并且避免了在区域起始位置错误匹配单词边界的问题。

8.2 扫描器的实现

在编译器等应用中,需要将字符流解析为令牌流。可以使用 hitEnd 和 requireEnd 方法来实现一个简单的扫描器。以下是一个示例代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SimpleScanner {
    public static void main(String[] args) {
        String regex = "\\d+\\b ; [><]=?";
        String text = "1234 > 567";
        Matcher m = Pattern.compile(regex).matcher(text);
        if (m.lookingAt()) {
            if (m.hitEnd()) {
                System.out.println("需要更多输入才能确定结果");
            } else if (m.requireEnd()) {
                System.out.println("额外输入可能导致匹配失败");
            } else {
                System.out.println("匹配成功,结果确定");
            }
        } else {
            System.out.println("匹配失败");
        }
    }
}

在这个例子中,通过 lookingAt 方法进行匹配,然后使用 hitEnd 和 requireEnd 方法来判断是否需要更多输入或额外输入是否会影响匹配结果。

9. 注意事项和技巧

在使用这些方法时,还需要注意以下几点:
- 标志的默认值 :锚定边界标志默认值为 true ,透明边界标志默认值为 false 。在使用时,要根据具体需求进行设置。
- hitEnd 方法的 bug :在 Java 1.5 中, hitEnd 方法存在 bug,需要使用前面提到的解决方法。
- 方法链的使用 :方法链可以使代码更简洁,但在调试和阅读时可能会增加难度。可以根据实际情况选择是否使用方法链。
- 重置方法的影响 : reset 方法会重置大部分匹配器的信息,但不会重置锚定边界和透明边界标志。在使用时要注意这一点。

10. 总结

通过以上内容的介绍,我们对 Java 中的正则匹配器有了更深入的了解。以下是对各个关键知识点的总结表格:
| 知识点 | 描述 |
| — | — |
| 透明边界 | 决定正则引擎是否能看到区域边界之外的字符,默认值为 false ,可通过 useTransparentBounds 方法设置 |
| 锚定边界 | 决定行锚点是否在区域边界匹配,默认值为 true ,可通过 useAnchoringBounds 方法设置 |
| 方法链 | 将多个方法调用连接在一起,使代码更简洁 |
| hitEnd 方法 | 指示正则引擎在之前的匹配尝试中是否尝试检查输入的尾随结束位置之外的内容,Java 1.5 存在 bug |
| requireEnd 方法 | 仅在成功匹配后有意义,指示正则引擎是否依赖输入的结束位置来实现匹配 |
| 其他匹配器方法 | 如 reset 、 reset(CharSequence text) 、 pattern() 、 usePattern(Pattern p) 、 toString() 等 |
| 查询目标文本 | 可通过特定方法实现,虽然不是特别优雅,但能暂时满足需求 |
| 其他模式方法 | 如 split 、 pattern() 、 toString() 、 flags() 等 |

在实际应用中,我们可以根据具体需求选择合适的方法和标志,灵活运用这些功能来实现高效、准确的正则表达式匹配。同时,要注意一些特殊情况和注意事项,以避免出现问题。通过合理使用这些方法,能够提高代码的可读性和可维护性,提升开发效率。

相关推荐

Win7时间修复(时间错误修复文件)

运行方法:解压后运行reg文件即可。 支持的Win7版本: 1. Windows 7 Starter(入门版 / 初级版) 2. Windows 7 Home Basic(家庭普通版) 3. Windows 7 Home Premium(家庭高级版) 4. Windows 7 Professional(专业版) 5. Windows 7 Enterprise(企业版) 6. Windows 7 Ultimate(旗舰版) 7. Windows 7 Professional for Embedded Systems(嵌入式专业版) 8. Windows 7 Ultimate for Embedded Systems(嵌入式旗舰版)

YOLO26算法行人行走检测+训练好的模型+102张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[行走的人(person walking)] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 67 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.8000** mAP50-95 | 0.5620 Precision | 0.5795 Recall | 0.8235 train/box_loss | 0.9538 train/cls_loss | 1.9897 val/box_loss | 0.9034 val/cls_loss | 2.7344 【训练过程分析】 进入训练阶段后,模型一开始的 mAP50 和 mAP50-95 均为 0.8000 和 0.5620,表明在开始阶段模型的收敛情况良好。从第 30 轮起,训练集的 mAP50 值稳定在了 0.8000,这说明模型在这之前能够迅速捕捉到主要目标,但精度提升的余地已然不大。同时,mAP50-95 在训练集上表现略差,从第 50 轮开始慢慢往上走至 0.5620。这反映出模型在检测更小、更远的目标上还存在一定差距,精度成为瓶颈。 随着训练深入,模型在验证集上的表现开始分化。从第 60 轮开始,验证集的 mAP50 和 mAP50-95 值分别为 0.7500 和 0.4500,相比训练集下降明显,表明模型存在一定程度的过拟合现象。训练集上的 box loss 和 cls loss 值分别为 ... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

政府科技管理者在推动科技成果转化时,如何解决政策对接不精准导致的项目落地难?.docx

政府科技管理者在推动科技成果转化时,如何解决政策对接不精准导致的项目落地难?

精密制造基于双下位机架构的光栅刻划机上位机系统设计:运动控制与环境监控协同

内容概要:本文详细阐述了GRM光栅刻划机上位机的总体架构设计,涵盖功能规划、内部架构、与双下位机(运动控制板卡和环控PLC)的通信接口及安全边界。系统以上位机为核心,实现工艺配方到轨迹的编译下发、执行监控与数据追溯,强调离线规划与在线监视的设计理念。架构采用MVVM分层模式,通过自定义TCP协议与板卡通信,下发轨迹并接收状态快照,同时通过OPC UA协议与PLC交互环境参数。系统遵循SEMI标准进行状态、报警与事件建模,确保数据一致性与未来产线集成能力,并明确了“上位机不参与实时控制”的安全边界,所有关键动作均由下位机闭环处理。; 适合人群:自动化设备软件工程师、工业控制系统架构师、上位机开发人员,以及从事精密制造(如光栅刻划)领域需要对接双下位机系统的研发与调试人员。; 使用场景及目标:①构建高精度、可追溯的光栅刻划机控制系统,实现从配方到轨迹的自动化生成与执行;②规范上位机与运动控制板卡、环控PLC之间的通信协议与职责划分,确保系统稳定性与安全性;③满足SEMI标准要求,支持未来MES/EAP系统集成与无人值守运行。; 阅读建议:本文兼具架构指导与开发依据双重作用,建议开发人员重点阅读第3至6章以掌握功能模块与通信协议,下位机团队关注第2.3节与第10章待确认项,工艺与设备负责人应熟悉第1、2、7章的安全与状态模型。需结合附录对照原型与工程实现,并在开发中持续与相关部门对齐待确认事项。

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)内容概要:本文主要介绍了基于Plecs的全桥LLC谐振变换器仿真模型,涵盖变频控制下的多相交错LLC谐振变换器闭环仿真、V2G电动汽车ACDC整流与双向CLLC谐振变换器充放电仿真、LLC谐振变换器的开环与闭环软启动设计,以及储能系统中双向Buck-Boost变换器结合模型预测电流控制和电压下垂控制的仿真研究。同时,文档列举了多种电力电子系统与控制策略的Simulink/Plecs仿真案例,涉及三相交错并联Buck变换器、三电平Buck直流变换器、单相Boost PFC电路等,展示了丰富的电力变换器建模与控制技术。此外,还包括参数设计报告、计算书及相关参考文献,适用于从事电力电子、新能源发电、电动汽车充放电系统等领域的研究人员和技术开发人员。; 适合人群:具备电力电子、自动控制理论基础,从事新能源、电动汽车、电力系统等相关领域研究的研发人员、高校研究生及高年级本科生。; 使用场景及目标:① 学习和掌握LLC谐振变换器及其他典型电力电子变换器的工作原理与建模方法;② 实现闭环控制策略如变频控制、软启动、模型预测控制、下垂控制等的仿真验证;③ 支持科研项目、毕业设计或工程开发中的系统仿真与优化设计。; 阅读建议:建议结合文中提供的仿真模型、设计报告与参考文献,逐步搭建并调试相应系统,重点关注控制策略的实现细节与参数整定过程,以深入理解系统动态响应特性与控制性能。

独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)

内容概要:本文标题为“Plecs全桥LLC谐振变换器仿真模型”,但实际内容严重偏离主题,文档中混杂了大量来自优快云博客平台的无关信息,涵盖多个不同领域的Matlab/Simulink仿真项目,如电力系统优化、无人机路径规划、机器学习预测、微电网调度、卡尔曼滤波、无线能量传输等,导致核心内容缺失。文档未能提供关于Plecs平台下全桥LLC谐振变换器的建模方法、电路结构、参数设计、控制策略或仿真结果等关键技术细节,实质信息与标题完全不符,不具备作为该主题参考资料的有效性。; 适合人群:从事电力电子变换器研究、电源系统设计及相关领域的工程师、高校研究生与科研人员,尤其是希望掌握LLC谐振变换器建模与仿真的专业技术人员。; 使用场景及目标:① 学习并掌握全桥LLC谐振变换器的工作原理与Plecs仿真建模技术;② 开展高效电源转换器的研发与性能优化;③ 作为教学或科研项目中电力电子电路仿真的参考资料。; 阅读建议:鉴于文档内容与标题严重不符,建议读者谨慎甄别,优先选择专业书籍、学术论文或官方仿真软件教程等权威资源进行学习,避免被无效信息误导。

基于多元宇宙优化算法的微电网日前经济调度模型研究(Matlab代码实现)

内容概要:文档《Plecs全桥LLC谐振变换器仿真模型.txt》虽以“Plecs全桥LLC谐振变换器仿真模型”为名,实则是一份涵盖电力电子、电力系统、电机控制、新能源并网、微电网优化调度、储能系统、电动汽车调度、无人机路径规划、信号处理、雷达与状态估计等多个技术方向的综合性仿真资源汇编。内容依托Matlab/Simulink、PLECS、PSCAD等主流仿真平台,聚焦于现代优化算法(如粒子群、遗传算法、多目标差分进化、多元宇宙算法等)在能源系统建模、参数优化与控制策略设计中的应用。文档不仅提供了丰富的仿真案例和研究主题,还附带大量可下载的仿真代码、模型及参考文献,构成一个服务于科研与教学的资源集合。; 适合人群:具备电力电子、电力系统、自动化、控制工程或相关专业背景的研究生、科研人员及工程技术人员,尤其适合熟悉Matlab/Simulink、PLECS或PSCAD等仿真工具并从事相关领域研究的人员。; 使用场景及目标:①为电力系统动态分析、微电网能量管理、电机驱动控制、无人机路径规划等课题提供仿真建模思路与实例参考;②学习和复现先进智能优化算法在复杂工程问题(如经济调度、参数辨识、故障诊断)中的实现方法;③获取可用于学术论文撰写、毕业设计或科研项目申报的完整仿真资源与技术支持。; 阅读建议:此文档为典型的资源聚合型文本,建议读者根据自身研究方向有针对性地选择相关章节进行深入研读,优先关注与自己课题契合度高的仿真模型和算法实现,并结合所提供的代码与模型进行实践验证与二次开发,注意区分不同研究主题的边界,避免信息混淆。

隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】

内容概要:本文档系统性地介绍了隔离型全桥LLC谐振变换器的建模、参数设计与控制策略研究,配套提供Simulink闭环仿真模型、详细设计报告及Mathcad计算书等全套技术资料。内容涵盖变频与移相混合控制、谐振参数优化、软启动过程分析、恒压恒流双闭环控制等核心技术,并延伸至2.5kW双向全桥LLC、多相交错LLC等多种典型应用场景。此外,资料还整合了PFC、DAB、CLLC、三电平变换器等相关电力电子拓扑的仿真与控制设计资源,辅以PPT说明、参考文献与程序代码,构建了一个面向科研与工程实践的完整技术解决方案。; 适合人群:具备电力电子与电力系统基础知识,从事新能源变换器、高频开关电源、车载充电机、储能系统等方向研究的研究生、工程师及科研人员。; 使用场景及目标:① 掌握LLC谐振变换器的小信号建模方法与谐振腔参数匹配设计流程;② 学习高频软开关电路的闭环控制策略与稳定性分析方法;③ 借助仿真模型快速验证不同工况下的系统动态性能,支撑科研项目开发、论文撰写与产品原型设计。; 阅读建议:建议结合Mathcad计算书与Simulink仿真模型同步调试,重点剖析谐振元件选型依据、控制环路动态响应特性及闭环系统稳定性判据,强化理论与实践的深度融合,全面提升高频隔离变换器的工程设计能力。

三电平Buck直流变换器双闭环、单闭环、开环仿真【附参考文献】(Simulink仿真实现)

内容概要:本文提供了一套关于三电平Buck直流变换器的Simulink仿真资源,系统地实现了开环、单闭环与双闭环三种控制模式的建模与仿真,并附有参考文献支持。资源重点展示了不同控制策略下变换器在动态响应、稳定性和抗干扰能力方面的性能差异,尤其突出了双闭环控制在提升系统响应速度、抑制负载扰动和增强电压调节精度方面的显著优势。通过对比分析三种控制结构的仿真结果,帮助使用者深入理解反馈控制机制对电力电子系统性能的影响,适用于高精度电源管理和新能源系统等对电能质量要求较高的应用场景。; 适合人群:电力电子、自动化、电气工程等相关专业的本科生、研究生及科研人员,以及从事开关电源设计、新能源变换器开发、工业电源系统优化等方向的工程技术人员。; 使用场景及目标:①学习三电平Buck变换器的工作原理及其建模方法;②掌握电压模式控制与电流模式控制的基本设计思路;③对比分析开环、单闭环与双闭环控制系统的动态与稳态性能;④开展电力电子变换器控制器的设计、优化与验证,支撑课程实验、毕业设计或科研项目中的控制系统研究。; 阅读建议:建议结合提供的Simulink仿真模型与参考文献进行同步学习,动手搭建并调试不同控制结构,观察输出电压、电感电流等关键波形的变化,深入理解PI参数调节、反馈环路设计对系统性能的影响,从而全面提升对现代电力电子控制系统的设计与分析能力。

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文档系统性地介绍了基于Simulink平台的两相交错并联Boost电路仿真模型,属于电力电子变换器建模与仿真研究的重要组成部分。该模型采用交错并联结构,有效提升了系统效率、降低了输出电流纹波,并具备优良的动态响应与系统稳定性。文档不仅聚焦于该特定拓扑的开环与闭环控制实现,还整合了丰富的配套资源,涵盖多种主流DC-DC变换器(如Buck、Boost、LLC、CLLC)、功率因数校正(PFC)电路、PWM整流器、双向充放电系统以及新能源应用场景(如V2G、微电网)等领域的仿真模型。资源体系强调软开关技术、多相交错控制、系统级建模与参数优化设计,所有内容均提供可运行的Simulink仿真文件,部分包含详细的设计报告、计算书及参考文献,具有较强的工程实践与科研复现价值。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的硕士博士研究生、高校科研人员,以及从事新能源发电、电动汽车、电源系统设计等领域的工程技术人员。; 使用场景及目标:①支撑高校电力电子与电力系统方向的科研项目,用于新型拓扑结构的建模与先进控制算法的验证;②服务于本科生与研究生的毕业设计、课程设计及高水平学术论文的仿真复现;③为企业在电源产品研发、新能源系统集成等环节提供成熟的仿真方案参考,缩短研发周期,降低试错成本。; 阅读建议:建议使用者首先访问文档末尾提供的完整资源目录链接,按需下载对应仿真模型;在实践过程中,应重点关注模型的参数配置、控制策略实现细节与仿真工况设置,结合配套的说明文档深入理解其工作原理与设计思路,推荐在MATLAB/Simulink环境中动手调试与二次开发,以充分掌握电力电子系统的核心技术。

打印机驱动大师(打印机万能驱动)

打印机驱动大师(打印机万能驱动)

高校技术转移办公室人员在推动成果转化时,如何高效筛选出可转化的科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何借助AI技术降低服务门槛并提升客户粘性.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Arduino for ESP32-----ESP-NOW介绍及使用

ESP-NOWESP-NOW介绍ESP-NOW支持以下特性ESP-NOW技术也存在以下局限性获取ESP32的MAC地址ESP-NOW单向通信(One-way communication)ESP32单板间的双向通信一对多通信(一发多收)一对多通信(多发一收) ESP-NOW介绍 ESP-NOW是一种由Espressif开发的协议,可以让多个设备在不使用Wi-Fi的情况下相互通信。该协议类似于低功耗的2.4GHz无线连接。设备之间的配对需要在通信之前完成。配对完成后,连接是安全的、点对点的,不需要握手。这意味着

Better_man1的博客 2万+

FPGA之串口收发字符串之(四)——串口屏USART_HMI介绍

之前对串口各模块的设计都做了相关介绍。这里介绍串口屏的相关知识。 本次项目使用的串口屏型号是陶晶驰串口屏TJC3224T024_011,这个型号的串口屏的资料在官网可以找到。本文抛转引玉,简单介绍以便在本工程中更好的应用。 下图是该串口屏的实物图: 一般地,使用单片机或者嵌入式MCU控制串口屏,都会用到串口,同样地,在FPGA中实现也是类似,不过稍微复杂,具体代码设计过程中有以下问题需要...

隔壁old余的博客 7495

MoveIt控制睿尔曼RM65机械臂:从仿真到实机的3种控制模式对比

本文详细解析了使用MoveIt框架控制睿尔曼RM65机械臂的三种核心模式:拖动规划、目标姿态规划和Python API控制,从Gazebo仿真到实机部署的完整实现路径。通过ROS环境配置、控制参数优化及实机过渡技术,为工业自动化和机器人研究提供实用指南。

727

基于 Node.js + MongoDB 技术栈的小众开源短链接程序 —— Lynx

开源的短链接程序有很多,像 YOURLS、Shlink 等大多采用 PHP + MySQL 技术栈。但我之前的服务器配置一般,再加上自己写的小玩具使用的是 Node.js + MongoDB,这些环境已经装在服务器上了,因此更倾向于寻找一款同样基于这套技术栈的短链接程序。搜索了很久才找到这么一款基于的短链接程序——Lynx。这个开源项目非常小众,Star 数只有两百多。

zc_mk的博客 827

SAP SD销售订单抬头自定义字段增强:BADI_SLS_HEAD_SCR_CUS实战指南

SAP ERP系统中的销售订单管理是企业核心业务流程,经常需要扩展标准功能来满足个性化业务需求。在SAP SD模块中,销售订单抬头屏幕的增强是常见需求。通过BADI(Business Add-In)技术,可以在不修改标准代码的前提下,实现自定义字段的添加与数据处理。本文详细介绍了如何使用BADI_SLS_HEAD_SCR_CUS实现销售订单抬头自定义字段,包括函数组子屏幕设计、数据存储表构建以及BADI方法的具体实现。这种增强方式适用于VA01/VA02/VA03等事务,保证了系统升级的兼容性和维护的便捷性

weixin_29758911的博客 349

QGroundControl或者华科尔地面站安装完打不开问题解决

QGroundControl 华科尔 打不开

wv112406的博客 4915

YOLOv11改进 | 注意力篇 | YOLOv11引入CA注意力机制

摘要:最近关于移动网络设计的研究已经证明了通道注意力(例如,挤压和激励注意力)对于提升模型性能的显着有效性,但它们通常忽略了位置信息,而位置信息对于生成空间选择性注意力图很重要。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~3.2 在Extramodule里创建CA。在CA.py文件里添加给出的CA代码。

tsg6698的博客 2981

MIKE21 MIKE软件 教程 0.1 软件介绍与教学目录

MIKE 21是一个专业的工程软件包,用于模拟河流、湖泊、河口、海湾、海岸及海洋的水流、波浪、泥沙及环境问题。在MIKE Zero集成平台中,主要有MIKE11,MIKE21,MIKE3三类软件,分别对应一维,二维,三维的水动力模型模拟。同时还包括MIKE HYDRO,MIKE FLOOD等其他功能,各软件的具体介绍请参考DHI公司的官方文档,在此不作赘述。学习过程中,对于任何操作界面的疑问,建议大家仔细阅读帮助文档(在有疑问的界面按F1调出),同时官方也提供了对应的线上和线下教学服务(免费+收费)。

Hello Word 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 63、Python高级类主题与常见陷阱
下一篇: 2、常见漏洞扫描工具的使用与分析
bean
博客等级 码龄27年 1454粉丝 1637原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值