DNN(深度神经网络)近似 Lyapunov 函数
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
# from torchviz import make_dot
import torchviz# 1. Lyapunov 函数近似器(MLP 结构)
class LyapunovNet(nn.Module):def __init__(self, input_dim, hidden_dim=32):super(LyapunovNet, self).__init__()self.model = nn.Sequential(nn.Linear(input_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, 1) # 输出一个标量,表示Lyapunov函数值)def forward(self, x):return self.model(x)# 2. 梯度伴随网络(计算 Lyapunov 函数的梯度)
def compute_gradient(model, x):x.requires_grad_(True)V = model(x)grad_V = torch.autograd.grad(V.sum(), x, create_graph=True)[0]return V, grad_V# 3. 训练数据(随机生成一些状态数据)
def generate_data(num_samples=1000, state_dim=2):return torch.randn(num_samples, state_dim) * 5 # 扩大范围# 4. 网络权重初始化
def init_weights(m):if isinstance(m, nn.Linear):torch.nn.init.xavier_uniform_(m.weight)if m.bias is not None:torch.nn.init.zeros_(m.bias)# 5. 训练 Lyapunov 网络并绘制损失曲线
def train_lyapunov_net(state_dim=2, epochs=500, lr=0.001):model = LyapunovNet(input_dim=state_dim)model.apply(init_weights) # 重新初始化网络optimizer = optim.Adam(model.parameters(), lr=lr)loss_history = []for epoch in range(epochs):x = generate_data()V, grad_V = compute_gradient(model, x)# 修正损失函数loss = torch.mean(torch.relu(-grad_V.sum(dim=1))) + torch.mean(torch.relu(-V))optimizer.zero_grad()loss.backward()optimizer.step()loss_history.append(loss.item())if epoch % 50 == 0:print(f"Epoch {epoch}, Loss: {loss.item():.6f}")# 绘制损失曲线plt.plot(loss_history)plt.xlabel("Epoch")plt.ylabel("Loss")plt.title("Training Loss Curve")plt.grid()plt.show()return model# 6. 可视化神经网络计算图
def visualize_lyapunov_network(model, state_dim=2):x = torch.randn(1, state_dim, requires_grad=True) # 生成一个测试输入V = model(x)dot = make_dot(V, params=dict(model.named_parameters()))dot.format = 'png'dot.render('lyapunov_network') # 生成 PNG 图片dot.view() # 打开图像if __name__ == "__main__":trained_model = train_lyapunov_net()visualize_lyapunov_network(trained_model)


这段代码的核心目标是使用神经网络近似 Lyapunov 函数,并通过梯度信息优化其参数,以确保 Lyapunov 函数在物理系统的状态空间中满足稳定性条件。以下是详细的解析:
1. 代码整体架构
该代码主要包含 6 个部分:
- 定义 Lyapunov 函数近似器(MLP 神经网络)。
- 计算 Lyapunov 函数的梯度(用于优化)。
- 生成训练数据(模拟状态空间点)。
- 初始化网络权重(Xavier 初始化)。
- 训练 Lyapunov 网络(基于梯度信息优化 Lyapunov 函数)。
- 可视化网络结构(绘制计算图)。
2. 详细解析每个部分
(1) Lyapunov 函数近似器
class LyapunovNet(nn.Module):def __init__(self, input_dim, hidden_dim=32):super(LyapunovNet, self).__init__()self.model = nn.Sequential(nn.Linear(input_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, 1) # 输出一个标量,表示Lyapunov函数值)def forward(self, x):return self.model(x)
📌 作用:
-
这是一个
多层感知机(MLP)
结构:
- 输入
x代表系统状态变量(维度input_dim)。 - 两个隐藏层,每层
hidden_dim=32,激活函数为ReLU。 - 输出是一个标量,表示 Lyapunov 函数值
V(x)。
- 输入
📌 数学意义:
- 训练后,神经网络会学习到一个 Lyapunov 函数近似
V(x),用于判定系统稳定性。
(2) 计算 Lyapunov 函数的梯度
def compute_gradient(model, x):x.requires_grad_(True) # 使 x 可微分V = model(x) # 计算 Lyapunov 函数值grad_V = torch.autograd.grad(V.sum(), x, create_graph=True)[0] # 计算梯度return V, grad_V
📌 作用:
- 计算
V(x)对x的梯度∇V(x)。 torch.autograd.grad()自动计算梯度,用于 Lyapunov 函数优化。
📌 数学意义:
V ( x ) V(x) V(x)的梯度 ∇ V ( x ) ∇V(x) ∇V(x)
需要满足:
d V d t = ∇ V ( x ) ⋅ f ( x ) ≤ 0 \frac{dV}{dt} = \nabla V(x) \cdot f(x) \leq0 dtdV=∇V(x)⋅f(x)≤0
- 这个条件保证 Lyapunov 函数单调递减,从而保证系统稳定性。
(3) 生成训练数据
def generate_data(num_samples=1000, state_dim=2):return torch.randn(num_samples, state_dim) * 5 # 生成随机状态点
📌 作用:
- 生成服从标准正态分布的随机状态数据,用于训练 Lyapunov 神经网络。
📌 数学意义:
- 这些数据点可以看作是随机抽取的系统状态,用于训练神经网络使其学会合适的 Lyapunov 函数。
(4) 网络权重初始化
辑def init_weights(m):if isinstance(m, nn.Linear):torch.nn.init.xavier_uniform_(m.weight)if m.bias is not None:torch.nn.init.zeros_(m.bias)
📌 作用:
- 采用 Xavier(Glorot)初始化 线性层权重,保证网络初始梯度不会过大或过小。
bias初始化为0。
📌 数学意义:
-
Xavier 初始化
W ∼ U ( − 6 n i n + n o u t , 6 n i n + n o u t ) W \sim U\left(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right) W∼U(−nin+nout6,nin+nout6)
- 其中 n i n n_{in} nin和 n o u t n_{out} nout分别是输入和输出的神经元数目。
(5) 训练 Lyapunov 网络
def train_lyapunov_net(state_dim=2, epochs=500, lr=0.001):model = LyapunovNet(input_dim=state_dim)model.apply(init_weights) # 重新初始化网络optimizer = optim.Adam(model.parameters(), lr=lr)loss_history = []for epoch in range(epochs):x = generate_data()V, grad_V = compute_gradient(model, x)# 修正损失函数loss = torch.mean(torch.relu(-grad_V.sum(dim=1))) + torch.mean(torch.relu(-V))optimizer.zero_grad()loss.backward()optimizer.step()loss_history.append(loss.item())if epoch % 50 == 0:print(f"Epoch {epoch}, Loss: {loss.item():.6f}")# 绘制损失曲线plt.plot(loss_history)plt.xlabel("Epoch")plt.ylabel("Loss")plt.title("Training Loss Curve")plt.grid()plt.show()return model
📌 作用:
-
优化 Lyapunov 函数
V(x),使其满足 Lyapunov 稳定性条件:
V(x) > 0(Lyapunov 函数应该是正的)。∇V(x) ≤ 0(Lyapunov 函数应该单调递减)。
📌 数学意义:
-
损失函数
L = E [ m a x ( 0 , − ∇ V ( x ) ) ] + E [ m a x ( 0 , − V ( x ) ) ] L=E[max(0,−∇V(x))]+E[max(0,−V(x))] L=E[max(0,−∇V(x))]+E[max(0,−V(x))]
- 其中:
torch.relu(-grad_V.sum(dim=1)):强制∇V(x) ≤ 0,确保 Lyapunov 单调递减。torch.relu(-V):确保V(x) ≥ 0。
- 其中:
(6) 可视化 Lyapunov 神经网络
def visualize_lyapunov_network(model, state_dim=2):x = torch.randn(1, state_dim, requires_grad=True) # 生成一个测试输入V = model(x)dot = make_dot(V, params=dict(model.named_parameters()))dot.format = 'png'dot.render('lyapunov_network') # 生成 PNG 图片dot.view() # 打开图像
📌 作用:
- 使用
torchviz绘制计算图,直观展示神经网络结构。
3. main-run
if __name__ == "__main__":trained_model = train_lyapunov_net()visualize_lyapunov_network(trained_model)
📌 作用:
- 训练 Lyapunov 网络。
- 可视化网络结构。
4. 总结
| 模块 | 作用 |
|---|---|
LyapunovNet | 使用 MLP 近似 V(x) |
compute_gradient | 计算 ∇V(x) |
generate_data | 生成随机状态数据 |
init_weights | Xavier 权重初始化 |
train_lyapunov_net | 训练神经网络,使其满足 Lyapunov 条件 |
visualize_lyapunov_network | 可视化计算图 |
这个代码的核心思想是通过深度学习构建 Lyapunov 函数,确保 V(x) 单调递减,从而评估系统的瞬态稳定性。🔥
5.延伸
将以上的损失函数改为平方-以下为改后的损失函数公式展示
给定状态 x x x的动态系统:
d x d t = f ( x ) \frac{dx}{dt} = f(x) dtdx=f(x)
定义 Lyapunov 近似函数 V ( x ) V(x) V(x) 及其梯度:
∇ V = ∂ V ∂ x \nabla V = \frac{\partial V}{\partial x} ∇V=∂x∂V
损失函数由两个部分组成:
-
Lyapunov 下降约束(确保 d V d t ≤ 0 \frac{dV}{dt} \leq 0 dtdV≤0 ):
L decay = E x [ max ( 0 , − ∇ V ⋅ f ( x ) ) ] \mathcal{L}_{\text{decay}} = \mathbb{E}_x \left[ \max\left( 0, -\nabla V \cdot f(x) \right) \right] Ldecay=Ex[max(0,−∇V⋅f(x))]
其中 ∇ V ⋅ f ( x ) = ∑ i ∂ V ∂ x i f i ( x ) \nabla V \cdot f(x) = \sum_{i} \frac{\partial V}{\partial x_i} f_i(x) ∇V⋅f(x)=∑i∂xi∂Vfi(x)是 Lyapunov 函数关于时间的导数。
-
Lyapunov 函数非负性约束(确保 V ( x ) ≥ 0 V(x)≥0 V(x)≥0 ):
L positivity = E x [ V ( x ) 2 ] ] \mathcal{L}_{\text{positivity}} = \mathbb{E}_x \left[ V(x)^2 \right]] Lpositivity=Ex[V(x)2]]
这里我们使用平方损失 V ( x ) 2 V(x)^2 V(x)2 代替 ReLU 约束 m a x ( 0 , − V ( x ) ) max(0,−V(x)) max(0,−V(x)) 以增强稳定性。
总损失函数:
L = L decay + L positivity L = \mathcal{L}_{\text{decay}} + \mathcal{L}_{\text{positivity}} L=Ldecay+Lpositivity
该损失函数的优化目标是找到一个满足 Lyapunov 条件的近似函数 V ( x ) V(x) V(x),使得:
- Lyapunov 下降条件: d V d t ≤ 0 \frac{dV}{dt} \leq 0 dtdV≤0 适用于所有 x x x。
- Lyapunov 函数非负性: V ( x ) ≥ 0 V(x)≥0 V(x)≥0 确保稳定性分析的正确性。
这样,我们训练出的神经网络可以逼近一个合适的 Lyapunov 函数,从而用于评估瞬态稳定性
代码
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
from torchviz import make_dot# 1. Lyapunov 函数近似器(MLP 结构)
class LyapunovNet(nn.Module):def __init__(self, input_dim, hidden_dim=32):super(LyapunovNet, self).__init__()self.model = nn.Sequential(nn.Linear(input_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, 1) # 输出一个标量,表示Lyapunov函数值)def forward(self, x):return self.model(x)# 2. 定义系统动力学方程(如果已知)
def system_dynamics(x):return -x # 示例:简单的线性动力学 dx/dt = -x# 3. 计算 Lyapunov 函数的梯度
def compute_gradient(model, x):x.requires_grad_(True)V = model(x)grad_V = torch.autograd.grad(V.sum(), x, create_graph=True)[0]return V, grad_V# 4. 训练数据(随机生成一些状态数据)
def generate_data(num_samples=1000, state_dim=2):return torch.randn(num_samples, state_dim) * 5 # 扩大范围# 5. 网络权重初始化
def init_weights(m):if isinstance(m, nn.Linear):torch.nn.init.xavier_uniform_(m.weight)if m.bias is not None:torch.nn.init.zeros_(m.bias)# 6. 训练 Lyapunov 网络并绘制损失曲线
def train_lyapunov_net(state_dim=2, epochs=500, lr=0.001):model = LyapunovNet(input_dim=state_dim)model.apply(init_weights) # 重新初始化网络optimizer = optim.Adam(model.parameters(), lr=lr)loss_history = []for epoch in range(epochs):x = generate_data()V, grad_V = compute_gradient(model, x)dx_dt = system_dynamics(x) # 获取系统的动态方程# 1. 约束 Lyapunov 下降条件: dV/dt = ∇V · f(x) ≤ 0lyapunov_decay = torch.mean(torch.relu(-(grad_V * dx_dt).sum(dim=1)))# 2. 确保 Lyapunov 函数 V(x) 是非负的lyapunov_positivity = torch.mean(V**2) # 使 V(x) 逼近 0 而不是仅仅大于 0loss = lyapunov_decay + lyapunov_positivityoptimizer.zero_grad()loss.backward()optimizer.step()loss_history.append(loss.item())if epoch % 50 == 0:print(f"Epoch {epoch}, Loss: {loss.item():.6f}")# 绘制损失曲线plt.plot(loss_history)plt.xlabel("Epoch")plt.ylabel("Loss")plt.title("Training Loss Curve")plt.grid()plt.show()return model# 7. 可视化神经网络计算图
def visualize_lyapunov_network(model, state_dim=2):x = torch.randn(1, state_dim, requires_grad=True) # 生成一个测试输入V = model(x)dot = make_dot(V, params=dict(model.named_parameters()))dot.format = 'png'dot.render('lyapunov_network') # 生成 PNG 图片dot.view() # 打开图像if __name__ == "__main__":trained_model = train_lyapunov_net()visualize_lyapunov_network(trained_model)

相关文章:
DNN(深度神经网络)近似 Lyapunov 函数
import torch import torch.nn as nn import torch.optim as optim import matplotlib.pyplot as plt # from torchviz import make_dot import torchviz# 1. Lyapunov 函数近似器(MLP 结构) class LyapunovNet(nn.Module):def __init__(self, input_dim…...
128陷阱
首先我们了解一下关于包装器类型 java是面向对象的语言,但基本类型并不是面向对象的,从而出现了包装器类型,并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型,它相当于将…...
PromptSource和LangChain哪个更好
目录 1. 设计目标与定位 PromptSource LangChain 2. 功能对比 3. 优缺点分析 PromptSource LangChain 4. 如何选择? 5. 总结 PromptSource 和 LangChain 是两个在自然语言处理(NLP)领域非常有用的工具,但它们的设计目标和…...
构成正方形的数量:算法深度剖析与实践
目录 引言算法核心概念 定义正方形的构成条件数据结构与输入形式算法数学原理 几何关系的数学表达坐标运算与判定逻辑Python 实现 代码展示代码解析Python 实现的优势与局限C 语言实现 代码展示代码解析C 语言实现的性能特点性能分析与优化 性能分析 时间复杂度空间复杂度优化思…...
Redis持久化-秒杀系统设计
在构建高性能、高可用的系统时,Redis 作为缓存和消息队列的角色越来越重要。在一些场景下,我们还需要将 Redis 的数据进行持久化,以确保数据的安全性和恢复能力。除此之外,秒杀系统也越来越成为电商、抢购等平台的核心功能之一。本…...
音视频入门基础:RTP专题(8)——使用Wireshark分析RTP
一、引言 通过Wireshark可以抓取RTP数据包,该软件可以从Wireshark Go Deep 下载。 二、通过Wireshark抓取RTP数据包 首先通过FFmpeg将一个媒体文件转推RTP,生成RTP流: ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec copy -an -f rtp …...
OpenAI 实战进阶教程 - 第六节: OpenAI 与爬虫集成实现任务自动化
爬虫与 OpenAI 模型结合,不仅能高效地抓取并分析海量数据,还能通过 NLP 技术生成洞察、摘要,极大提高业务效率。以下是一些实际工作中具有较高价值的应用案例: 1. 电商价格监控与智能分析 应用场景: 电商企业需要监控…...
SpringUI Web高端动态交互元件库
Axure Web高端动态交互元件库是一个专为Web设计与开发领域设计的高质量资源集合,旨在加速原型设计和开发流程。以下是关于这个元件库的详细介绍: 一、概述 Axure Web高端动态交互元件库是一个集成了多种预制、高质量交互组件的工具集合。这些组件经过精…...
解密企业安全密码:密钥管理服务如何重塑数据保护?
在数字化时代,数据是企业最宝贵的资产之一。然而,随着网络威胁的不断升级和数据泄露事件的频繁发生,如何保护企业数据的安全已成为每个组织面临的紧迫问题。传统的安全措施往往无法应对复杂的威胁环境,密钥管理服务作为企业信息安…...
基于keepalived+GTID半同步主从复制的高可用MySQL集群
文章目录 项目架构图项目名称项目环境项目描述ip地址规划项目步骤一.安装好8台全新的centos7.9的系统,关闭firewalld和selinux,配置每台主机的静态ip地址,设置每台主机对应的主机名。1、关闭firewalld2.关闭seLinux3.配置每台主机静态ip地址4…...
图片PDF区域信息批量提取至Excel,基于QT和阿里云api的实现方案
办公文档处理:在企业日常办公中,经常会遇到大量的扫描文档(如发票、合同、报表等)以图片或 PDF 格式存储。需要将这些文档中的特定区域信息(如发票金额、合同条款、报表数据等)提取出来,整理到 …...
Java 大视界 -- Java 大数据在智能教育中的应用与个性化学习(75)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 一、…...
从零手写Spring IoC容器(二):bean的定义与注册
从零手写Spring IoC容器(二):bean的定义与注册 一. 回顾简单容器的不足之处 在第一章中,我们实现了一个最简单的 IoC 容器,但该版本存在诸多不足,例如: Bean 的管理方式过于简单,…...
《大模型面试宝典》(2025版) 发布了
基于去年我们写的《大模型面试宝典》(2024版)的基础上,我根据自己实践经验和星球小伙伴的面经分享总结推出《大模型面试宝典》(2025版),共计52w字。 与去年相比,内容增加了星球成员面试真题分享、大模型最新考试要点总结、DeepSeek 项目实战…...
AWS门店人流量数据分析项目的设计与实现
这是一个AWS的数据分析项目,关于快消公司门店手机各个门店进店人流量和各个产品柜台前逗留时间(利用IoT设备采集)和销售数据之间的统计分析,必须用到但不限于Amazon Kensis Data Stream,Spark Streaming,Sp…...
出租车特殊计费表算法解析与实现
目录 引言算法核心概念 特殊计费规则解析数据类型与输入输出算法数学原理 数字位判断与处理逻辑数值转换与累加计算算法框架图Python 实现 代码展示代码解析Python 实现的优势与局限C 语言实现 代码展示代码解析C 语言实现的性能特点性能分析与优化 性能分析 时间复杂度空间复杂…...
文档解析技术:如何高效提取PDF扫描件中的文字与表格信息?
想要高效提取PDF扫描件中的文字与表格信息,通常需要借助专业的工具或在线服务,以下是一些可行的方法: 预处理扫描件:在提取文字之前,尽量确保扫描件的图像质量清晰。如果扫描件模糊或有污渍,可以使用图像处…...
【2】高并发导出场景下,服务器性能瓶颈优化方案-异步导出
Java 异步导出是一种在处理大量数据或复杂任务时优化性能和用户体验的重要技术。 1. 异步导出的优势 异步导出是指将导出操作从主线程中分离出来,通过后台线程或异步任务完成数据处理和文件生成。这种方式可以显著减少用户等待时间,避免系统阻塞&#x…...
【DeepSeek论文精读】6. DeepSeek R1:通过强化学习激发大语言模型的推理能力
欢迎关注[【youcans的AGI学习笔记】](https://blog.csdn.net/youcans/category_12244543.html)原创作品 【DeepSeek论文精读】1. 从 DeepSeek LLM 到 DeepSeek R1 【DeepSeek论文精读】6. DeepSeek R1:通过强化学习激发大语言模型的推理能力 【DeepSeek论…...
frida 通过 loadLibrary0 跟踪 System.loadLibrary
static {System.loadLibrary("libxxx.so"); }在 ndk 开发中,常见的实践是在 static 代码块里调用 loadLibrary 加载动态库。由于 apk 从 java 层开始启动,过早地 hook 原生代码会找不到函数。所以一种常见做法是在 loadLibrary 的 hook 回调里…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
