【2024 Optimal Control 16-745】【Lecture 2】integrators.ipynb功能分析
代码功能分析
导入库和项目设置
import Pkg; Pkg.activate(@__DIR__); Pkg.instantiate()
-
功能:激活当前文件夹为 Julia 项目环境,并安装当前项目中缺失的依赖包。
-
import Pkg
:- 导入 Julia 的包管理模块
Pkg
,用于管理项目依赖。
- 导入 Julia 的包管理模块
-
Pkg.activate(@__DIR__)
:- 激活当前脚本所在目录作为 Julia 项目环境。
@__DIR__
是当前文件的目录路径。
- 激活当前脚本所在目录作为 Julia 项目环境。
-
Pkg.instantiate()
:- 根据项目的
Project.toml
和Manifest.toml
文件,安装所有依赖包。如果某些包未安装,这个命令会自动安装它们。
- 根据项目的
using LinearAlgebra
using PyPlot
using ForwardDiff
功能:加载必要的库:
-
using LinearAlgebra
:- 导入线性代数模块,提供矩阵运算、特征值分解等功能。属于 Julia 标准库的一部分。
-
using PyPlot
:- 导入
PyPlot
模块,用于绘制图形。PyPlot
是 Julia 对 Python Matplotlib 的接口,依赖于 Python 环境。
- 导入
-
using ForwardDiff
:- 导入
ForwardDiff
模块,提供自动微分功能,常用于数值优化和科学计算。
- 导入
定义摆动动力学函数
function pendulum_dynamics(x)l = 1.0g = 9.81θ = x[1] # 摆动角度 θθ̇ = x[2] # 摆动角速度 θ̇θ̈ = -(g / l) * sin(θ) # 根据摆动力学方程,计算角加速度 θ̈return [θ̇; θ̈] # 返回角速度和角加速度
end
- 功能:模拟单摆的动力学:
- 输入
x
是状态向量[θ, θ̇]
,即当前角度和角速度。 - 计算结果是新的状态向量
[θ̇, θ̈]
,即角速度和角加速度。
- 输入
没有控制项时,动力学方程中的质量项m会相互抵消
通过拉格朗日方程推导,质量 m m m在动能和势能中对称出现,最终通过偏导数和求导操作被完全抵消。这反映了单摆在无外力(无控制项)情况下的动力学是一个与质量 m m m无关的系统,运动仅由摆长 l l l、重力加速度 g g g 和角度 θ \theta θ 决定。
θ
和 θ̇
是 Julia 中的 Unicode 变量名,可以通过快捷输入实现。在代码中,这些符号只是普通变量名,它们的含义通过上下文和赋值来表达。
Forward Euler
定义前向欧拉法求解器
function pendulum_forward_euler(fun, x0, Tf, h)t = Array(range(0, Tf, step=h)) # 定义时间步长数组 tx_hist = zeros(length(x0), length(t)) # 创建状态记录数组,初始化为 0x_hist[:,1] .= x0 # 设置初始状态为 x0for k = 1:(length(t)-1)x_hist[:,k+1] .= x_hist[:,k] + h * fun(x_hist[:,k]) # 使用前向欧拉法计算下一步状态endreturn x_hist, t # 返回状态历史和时间步长
end
- 功能:
- 计算单摆运动的数值解,使用前向欧拉法。
fun
是状态导数的计算函数(这里是pendulum_dynamics
)。x0
是初始状态[θ₀, θ̇₀]
。Tf
是模拟总时间。h
是时间步长。- 返回:
x_hist
:时间序列中摆的角度和角速度。t
:时间序列。
.=
用于广播赋值,使得多个值可以逐元素地赋给目标数组或集合。
前向欧拉法-角度随时间的变化
x0 = [0.1; 0] # 初始角度为 0.1 弧度,初始角速度为 0
x_hist, t = pendulum_forward_euler(pendulum_dynamics, x0, 5, 0.1) # 运行模拟,总时间 5 秒,步长 0.1 秒plot(t, x_hist[1,:]) # 绘制角度随时间变化曲线
- 功能:
- 设置单摆的初始状态
- 使用
pendulum_forward_euler
求解 5 秒内的摆动状态,步长为 0.1 秒。 - 绘制角度(
x_hist[1,:]
)随时间变化的曲线。
可视化图像
生成的图像展示了单摆在模拟时间内的角度随时间的变化,是一个振荡曲线(近似简谐振荡)。
由于采用的是前向欧拉法,随着时间步长的增加,数值解可能会出现一定的误差,尤其是在较长时间的模拟中。
-
数值方法的稳定性:
- 前向欧拉法是一种显式的数值积分方法,虽然实现简单,但在处理刚性方程或需要高精度的情况下可能不够稳定。可以考虑使用更高阶的方法,如四阶龙格-库塔法(RK4)。
-
时间步长的选择:
- 时间步长
h
影响数值解的精度和稳定性。较小的步长通常提供更高的精度,但会增加计算量。需要根据具体问题权衡选择合适的步长。
- 时间步长
-
总模拟时间5s,时间步长0.1s
- -
总模拟时间5s,时间步长0.01s
-
总模拟时间5s,时间步长0.01s
-
总模拟时间20s,时间步长0.01s
-
总模拟时间20s,时间步长0.001s
-
总模拟时间100s,时间步长0.001s
计算摆动系统离散化后的线性化矩阵 pendulum_euler_Ad
function pendulum_euler_Ad(x0, h)g = 9.81Ad = [1 h; -g*h*cos(x0[1]) 1]
end
功能解释:
-
function pendulum_euler_Ad(x0, h)
- 定义了一个名为
pendulum_euler_Ad
的函数,输入参数为:x0
:当前状态向量(包括角度和角速度)。h
:时间步长。
- 这个函数计算摆动系统离散化后的线性化矩阵。
- 定义了一个名为
-
g = 9.81
- 定义重力加速度为 9.81 m/s²。
-
Ad = [1 h; -g*h*cos(x0[1]) 1]
- 定义欧拉法计算的状态转移矩阵:
- 第一行表示角度更新(线性项)。
- 第二行表示角速度更新,包含重力和角度余弦的线性化影响。
- 定义欧拉法计算的状态转移矩阵:
调用函数并计算特征值
eigvals(pendulum_euler_Ad(0, 0.1))
功能解释:
-
pendulum_euler_Ad(0, 0.1)
- 计算当初始角度 x 0 = 0 x_0 = 0 x0=0,时间步长 h = 0.1 h = 0.1 h=0.1 时的离散化矩阵。
-
eigvals()
- 计算该矩阵的特征值,返回的结果为:
1.0 - 0.31320919526731655im 1.0 + 0.31320919526731655im
- 表示系统状态转移矩阵的两个复数特征值。
- 计算该矩阵的特征值,返回的结果为:
等价于使用使用 ForwardDiff 自动求雅可比矩阵
using ForwardDiffh = 0.1 # 时间步长
Ad = I + h * ForwardDiff.jacobian(pendulum_dynamics, [0.0, 0.0]) # 计算A_d矩阵
eigvals(Ad) # 计算特征值
前向欧拉法-绘制特征值模与时间步长的关系图
eig_norm = zeros(100)
h = LinRange(0, 0.1, 100)
for k = 1:length(eig_norm)eig_norm[k] = max(norm.(eigvals(pendulum_euler_Ad([0;0], h[k]))))
end
plot(h, eig_norm)
功能解释:
-
eig_norm = zeros(100)
- 初始化一个大小为 100 的数组,用于存储不同时间步长下特征值模的最大值。
-
h = LinRange(0, 0.1, 100)
- 创建一个从 0 到 0.1 的线性空间,分为 100 等分,表示时间步长的变化范围。
-
for k = 1:length(eig_norm)
- 开始循环,对每个时间步长计算对应的最大特征值模。
-
pendulum_euler_Ad([0;0], h[k])
- 计算当前时间步长下的状态转移矩阵。
-
eigvals()
- 计算当前矩阵的特征值。
-
norm.(eigvals(...))
- 计算所有特征值的模。
-
max(...)
- 获取当前时间步长下特征值模的最大值。
-
plot(h, eig_norm)
- 绘制时间步长 h h h 和对应最大特征值模的关系图。
图像分析:
- 图像显示特征值模随时间步长 h h h 的变化:
- 当 h → 0 h \to 0 h→0 时,特征值模接近 1,系统趋于边际稳定。
- 随着 h h h 增大,特征值模逐渐超过 1,系统变得不稳定。
这段代码实现了摆动系统的离散化线性化分析,探索了时间步长对系统稳定性的影响,并通过绘制关系图验证了系统的边界稳定性条件。
四阶龙格-库塔方法(RK4)
实现四阶龙格-库塔方法(RK4)fd_pendulum_rk4
function fd_pendulum_rk4(xk, h)f1 = pendulum_dynamics(xk)f2 = pendulum_dynamics(xk + 0.5*h*f1)f3 = pendulum_dynamics(xk + 0.5*h*f2)f4 = pendulum_dynamics(xk + h*f3)return xk + (h/6.0)*(f1 + 2*f2 + 2*f3 + f4)
end
功能:
实现四阶龙格-库塔方法(RK4)的核心步骤:
f1
到f4
是四次不同点计算的斜率估计值。- 最终返回加权平均的更新状态,权重为 1 , 2 , 2 , 1 1, 2, 2, 1 1,2,2,1。
函数 pendulum_rk4
function pendulum_rk4(fun, x0, Tf, h)t = Array(range(0, Tf, step=h))x_hist = zeros(length(x0), length(t))x_hist[:,1] .= x0for k = 1:(length(t)-1)x_hist[:,k+1] .= fd_pendulum_rk4(x_hist[:,k], h)endreturn x_hist, t
end
功能:
用 RK4 模拟摆动系统。
x_hist
用于存储状态历史,t
是时间步数组。- 初始状态为
x0
,逐步调用fd_pendulum_rk4
更新状态。
RK4法模拟单摆系统角度随时间变化
x0 = [1.0; 0]
x_hist2, t_hist2 = pendulum_rk4(pendulum_dynamics, x0, 10, 0.1)
plot(t_hist2, x_hist2[1,:])
功能:
- 定义初始状态
x0 = [1.0; 0]
(初始角度为 1 弧度,初始角速度为 0)。 - 运行 RK4 模拟,总时长 10 秒,时间步长 0.1。
- 绘制角度随时间变化的曲线。
使用 ForwardDiff
计算雅可比矩阵
using ForwardDiff
Ad = ForwardDiff.jacobian(x -> fd_pendulum_rk4(x, 0.1), [0; 0])
norm.(eigvals(Ad))
功能:
-
using ForwardDiff
:- 引入
ForwardDiff
包,用于自动微分计算梯度、雅可比矩阵(Jacobian)和高阶导数。 - 在这里,它被用来计算一个函数的雅可比矩阵。
- 引入
-
ForwardDiff.jacobian(x -> fd_pendulum_rk4(x, 0.1), [0; 0])
:-
雅可比矩阵的计算:
x -> fd_pendulum_rk4(x, 0.1)
是一个匿名函数,它将输入 x x x 映射到通过四阶龙格-库塔方法(fd_pendulum_rk4
)计算的状态更新结果。fd_pendulum_rk4
是一个积分器函数,用于模拟系统的动力学行为。它的输入参数:- x x x 是当前状态向量(如 [角度; 角速度])。
0.1
是时间步长 h h h。
- 雅可比矩阵是关于状态变量 x x x 的偏导数矩阵,其元素定义为:
J i j = ∂ f i ∂ x j J_{ij} = \frac{\partial f_i}{\partial x_j} Jij=∂xj∂fi
在这里, f i f_i fi 表示第 i i i 个方程的结果, x j x_j xj 表示第 j j j 个输入变量。
-
状态点
[0; 0]
:- 指定初始状态为 x = [ 0 ; 0 ] x = [0; 0] x=[0;0],即摆的角度和角速度都为零。
-
输出
Ad
:- 计算得到的雅可比矩阵 A d A_d Ad,表示在 x = [ 0 ; 0 ] x = [0; 0] x=[0;0] 处的局部线性化模型。
-
-
eigvals(Ad)
:- 计算矩阵 A d A_d Ad 的特征值:
- 特征值描述了状态变化的动态特性,决定系统的稳定性。
- 如果特征值的模(绝对值)小于 1,则系统是稳定的。
- 计算矩阵 A d A_d Ad 的特征值:
-
norm.(eigvals(Ad))
:- 计算矩阵特征值的模(欧几里得范数)。
norm.
是广播操作符(dot syntax),对特征值数组逐个计算模。- 输出是一个数组,其中每个值表示对应特征值的模。
总结
- 该代码通过自动微分计算四阶龙格-库塔方法在特定状态( x = [ 0 ; 0 ] x = [0; 0] x=[0;0])下的雅可比矩阵。
- 通过特征值的模,分析离散时间系统在该状态附近的稳定性。
- 如果所有特征值的模小于 1,系统在该状态下是局部稳定的。
RK4法特征值模随时间步长的变化
eig_norm = zeros(100)
h = LinRange(0, 1, 100)
for k = 1:length(eig_norm)eig_norm[k] = max(norm.(eigvals(ForwardDiff.jacobian(x -> fd_pendulum_rk4(x, h[k]), [0; 0]))))
end
plot(h, eig_norm)
功能:
- 初始化特征值模数组
eig_norm
和时间步长范围h
。 - 循环计算不同时间步长下特征值模的最大值。
- 绘制时间步长和特征值模的关系图,分析稳定性。
Backward Euler
反向欧拉法 pendulum_backward_euler
function pendulum_backward_euler(fun, x0, Tf, dt)t = Array(range(0, Tf, step=dt))x_hist = zeros(length(x0), length(t))x_hist[:,1] .= x0for k = 1:(length(t)-1)e = 1x_hist[:,k+1] .= x_hist[:,k]while e > 1e-8xn = x_hist[:,k] + dt.*fun(x_hist[:,k+1])e = norm(xn - x_hist[:,k+1])x_hist[:,k+1] .= xnendendreturn x_hist, t
end
该函数 pendulum_backward_euler
使用反向欧拉法Backward Euler Method模拟摆动系统的动力学行为。
工作原理总结
-
反向欧拉法:
- 隐式方法,在每个时间步需要迭代求解状态更新。
- 更加稳定,适合处理刚性系统。
-
迭代过程:
- 初始猜测下一步状态值。
- 利用当前猜测值计算下一步状态的动力学函数。
- 反复更新,直到误差小于设定的阈值。
函数头
function pendulum_backward_euler(fun, x0, Tf, dt)
fun
: 表示系统的动力学函数,输入当前状态返回状态导数。例如,对于摆动系统,这个函数返回角速度和角加速度。x0
: 初始状态向量,通常表示 [角度; 角速度]。Tf
: 总模拟时间。dt
: 时间步长。
时间数组与状态历史初始化
t = Array(range(0, Tf, step=dt))
x_hist = zeros(length(x0), length(t))
x_hist[:,1] .= x0
-
t
:- 创建时间数组,从 0 到
Tf
,以步长dt
增加。 - 每个时间点对应系统的状态更新。
- 创建时间数组,从 0 到
-
x_hist
:- 初始化一个矩阵,用于存储状态历史。行数为状态变量的数量(如角度和角速度),列数为时间点数量。
-
x_hist[:,1] .= x0
:- 将第一列(即初始时间点)的状态设置为初始状态
x0
。
- 将第一列(即初始时间点)的状态设置为初始状态
时间步循环
for k = 1:(length(t)-1)e = 1x_hist[:,k+1] .= x_hist[:,k]
- 遍历所有时间步,
k
是当前时间步索引。 - 初始化误差
e = 1
(用于收敛判断)。 - 用当前状态
x_hist[:,k]
作为下一状态x_hist[:,k+1]
的初始猜测值。
反向欧拉迭代
while e > 1e-8xn = x_hist[:,k] + dt.*fun(x_hist[:,k+1])e = norm(xn - x_hist[:,k+1])x_hist[:,k+1] .= xn
end
-
迭代公式:
- 反向欧拉法的核心方程:
x k + 1 = x k + h ⋅ f ( x k + 1 ) x_{k+1} = x_k + h \cdot f(x_{k+1}) xk+1=xk+h⋅f(xk+1) - 方程是隐式的,因为 x k + 1 x_{k+1} xk+1 既在左侧,也在右侧的动力学函数中。
- 反向欧拉法的核心方程:
-
计算新估计值
xn
:- 使用当前估计值
x_hist[:,k+1]
计算右侧的动力学值 f ( x k + 1 ) f(x_{k+1}) f(xk+1)。 - 更新 x k + 1 x_{k+1} xk+1 的新估计
xn
。
- 使用当前估计值
-
误差计算
e
:- 计算当前估计值
xn
与之前的值x_hist[:,k+1]
的欧几里得范数(即误差)。 - 如果误差小于 1 × 1 0 − 8 1 \times 10^{-8} 1×10−8,迭代停止,认为 x k + 1 x_{k+1} xk+1 已经收敛。
- 计算当前估计值
-
更新
x_hist[:,k+1]
:- 将新的估计值
xn
赋值给下一步状态x_hist[:,k+1]
。
- 将新的估计值
返回结果
return x_hist, t
- 返回:
x_hist
: 包含整个模拟过程中每个时间点的状态历史。t
: 对应的时间点数组。
反向欧拉法-模拟角度随时间变化
x0 = [1.0; 0]
x_hist3, t_hist3 = pendulum_backward_euler(pendulum_dynamics, x0, 10, 0.001)
plot(t_hist3, x_hist3[1,:])
功能:
- 定义初始状态
x0 = [1.0; 0]
。 - 用反向欧拉法模拟总时长 10 秒,时间步长为 0.001。
- 绘制角度随时间变化的曲线,展示系统动力学行为。
相关文章:
【2024 Optimal Control 16-745】【Lecture 2】integrators.ipynb功能分析
代码功能分析 导入库和项目设置 import Pkg; Pkg.activate(__DIR__); Pkg.instantiate()功能:激活当前文件夹为 Julia 项目环境,并安装当前项目中缺失的依赖包。 import Pkg: 导入 Julia 的包管理模块 Pkg,用于管理项目依赖。 …...
【linux】ubuntu下常用快捷键【笔记】
环境 硬件:通用PC 系统:Ubuntu 20.04 软件 : 打开终端窗口:Ctrl Alt T 关闭当前窗口:Alt F4 改变窗口大小:Alt F8 移动窗口: Alt F7 配合 “←”、“→”、“↑”、“↓”来移动窗口 …...
【Linux】常用命令练习
一、常用命令 1、在/hadoop目录下创建src和WebRoot两个文件夹 分别创建:mkdir -p /hadoop/src mkdir -p /hadoop/WebRoot 同时创建:mkdir -p /hadoop/{src,WebRoot}2、进入到/hadoop目录,在该目录下创建.classpath和README文件 分别创建&am…...
力扣-Hot100-数组【算法学习day.37】
前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...
表格不同类型的数据如何向量化?
在进行机器学习项目时,首先需要获取数据,这些数据可以来自数据库、API、网络抓取,或从CSV、Excel等文件中读取。数据可能包含数值、文本和类别等多种特征,但原始数据通常无法直接用于训练模型。 数据预处理包括清洗、填补缺失值和…...
成都栩熙酷,电商服务新选择
在当今数字经济蓬勃发展的时代,电商平台已成为推动商业创新、促进消费升级的重要力量。抖音小店,作为短视频与电商深度融合的产物,凭借其独特的社交属性和内容营销优势,迅速吸引了大量用户和商家的关注。在这场变革中,…...
【java基础】微服务篇
参考黑马八股视频。 目录 Spring Cloud 5大组件 注册中心 负载均衡 限流 CAP和BASE 分布式事务解决方案 分布式服务的接口幂等性 分布式任务调度 Spring Cloud 5大组件 注册中心 Eureka的作用 健康监控 负载均衡 限流 漏桶固定速率,令牌桶不限速 CAP和BA…...
【LLM训练系列02】如何找到一个大模型Lora的target_modules
方法1:观察attention中的线性层 import numpy as np import pandas as pd from peft import PeftModel import torch import torch.nn.functional as F from torch import Tensor from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig from typ…...
uni-app快速入门(八)--常用内置组件(上)
uni-app提供了一套基础组件,类似HTML里的标签元素,不推荐在uni-app中使用使用div等HTML标签。在uni-app中,对应<div>的标签是view,对应<span>的是text,对应<a>的是navigator,常用uni-app…...
基于Amazon Bedrock:一站式多模态数据处理新体验
目录 引言 关于Amazon Bedrock 基础模型体验 1、进入环境 2、发现模型及快速体验 3、打开 Amazon Bedrock 控制台 4、通过 Playgrounds 体验模型 (1)文本生成 (2)图片生成 关于资源清理 结束语 引言 在云计算和人工智能…...
FAX动作文件优化脚本(MAX清理多余关键帧插件)
大较好,为大家介绍一个节省FBX容量的插件!只保留有用的动画轴向,其他不参与动画运动的清除! 一.插件目的:: 1.我们使用的U3D引擎产生的游戏资源包容量太大,故全方位优化动画资源; 2.在max曲线编辑器内,点取轴向太过麻烦,费事,直观清除帧大大提高效率。 如: 二:…...
Chapter 2 - 16. Understanding Congestion in Fibre Channel Fabrics
Transforming an I/O Operation to FC frames A read or write I/O operation (Figure 2-28) between an initiator and a target undergoes a series of transformations before being transmitted on a Fibre Channel link. 启动程序和目标程序之间的读取或写入 I/O 操作(图…...
mysql数据库(六)pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池
pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池 文章目录 pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池一、pymysql二、视图三、触发器四、存储过程五、函数六、流程控制七、数据库连接池 一、pymysql 可以使用pip install pymysql安装py…...
RFdiffusion EuclideanDiffuser类解读
EuclideanDiffuser 是 RFdiffusion 中的一个关键类,专门设计用于对**三维空间中的点(如蛋白质的原子坐标)**进行扩散处理。它通过逐步向这些点添加噪音来实现扩散过程,从而为扩散模型提供输入数据,并通过逆扩散还原这些数据。 get_beta_schedule函数源代码 def get_beta…...
Flutter实现气泡提示框学习
前置知识点学习 GlobalKey GlobalKey 是 Flutter 中一个非常重要的概念,它用于唯一标识 widget 树中的特定 widget,并提供对该 widget 的访问。这在需要跨越 widget 树边界进行交互或在 widget 树重建时保持状态时尤其有用。 GlobalKey 的作用 唯一标…...
vue3 路由守卫
在Vue 3中,路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理,比如权限验证、数据预取等,从而增强应用的安全性和效率。路由守卫分为几种不同的类型,每种类型的守卫都有其特定的应用场景。 其实路…...
【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
操作环境: MATLAB 2022a 1、算法描述 北方苍鹰优化算法(Northern Goshawk Optimization,简称NGO)是一种新兴的智能优化算法,灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽,广泛分布于北…...
如何控制自己玩手机的时间?两台苹果手机帮助自律
对一些人来说,被智能手机“绑架”是一件心甘情愿的事,和它相处的一天中,不必面对现实的压力,它就像个“舒适区”。这是因为在使用手机的过程中,应用程序(尤其是游戏和社交媒体应用)会不断刺激大…...
【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
系列文章目录 前言 上一篇文章讲解了Neo4j的基本使用,本篇文章对Java操作Neo4j进行入门级别的阐述,方便读者快速上手对Neo4j的开发。 一、开发环境与代码 1.docker 部署Neo4j #这里使用docker部署Neo4j,需要镜像加速的需要自行配置 docker run --name…...
Python的3D可视化库 - vedo (1)简介和模块功能概览
文章目录 1. vedo和它支持的功能简介1.1 安装vedo1.2 命令行接口1.3 导出3D文件1.4 文件格式转换 2. vedo模块功能概览2.1 绘制和渲染visual 管理可视化、对象及其属性的显示的基类plotter 3D渲染colors 定义和显示颜色dolfin FEniCS/Dolfin库的支持 2.2 图形数据管理mesh 多边…...
全面解析:HTML页面的加载全过程(一)--输入URL地址,与服务器建立连接
用户输入URL地址,与服务器建立连接 用户在浏览器地址栏输入一个URL 浏览器开始执行以下三步操作操作:url解析、DNS查询、TCP连接 第一步:URL解析 什么是URL? URL(Uniform Resource Locator,统一资源定位符)是互联网…...
elasticsearch的倒排索引是什么?
大家好,我是锋哥。今天分享关于【elasticsearch的倒排索引是什么?】面试题。希望对大家有帮助; elasticsearch的倒排索引是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 倒排索引(Inverted Index&a…...
Ubuntu VNC Session启动chromium和firefox报错
问题描述 VNC客户端连接到Ubuntu Server后,启动chromium和firefox时报错: $ chromium [348564:348564:1117/102143.085649:ERROR:ozone_platform_x11.cc(244)] Missing X server or $DISPLAY [348564:348564:1117/102143.085732:ERROR:env.cc(258)] Th…...
【Tealscale + Headscale + 自建服务器】异地组网笔记
文章目录 效果为什么要用 Headscale云服务器安装 Headscale配置 config.yaml创建反向代理搭建管理 UI授权管理 UI添加互联设备参考 效果 首先是连接情况,双端都连接上自建的 Headscale, 手机使用移动流量,测试一下 ping 值 再试试进入游戏 可…...
C++ 编程基础(8)模版 | 8.2、函数模版
文章目录 一、函数模版1、声明与定义2、模版参数3、模板的实例化3.1、隐式实例化3.2、显示实例化 4、模版的特化5、注意事项6、总结 前言: C 函数模板是一种强大的特性,它允许程序员编写与类型无关的代码。通过使用模板,函数或类可以处理不同…...
Android Studio音频视频播放器课程设计
这个项目适合刚刚学习Android studio的初学者,实现音视频的基本播放功能,各项功能的页面都做的比较简单,特别适用于初学者,其特点在于本项目抛开了各种花里胡哨的制作,以最接近初学者的样式画面呈现,完全不…...
速盾:CDN是否支持屏蔽IP?
CDN(内容分发网络)是一种用于提高网站性能和可靠性的技术,通过将内容分发到距离终端用户更近的节点,减少了数据传输的延迟并提高了用户体验。在CDN中,屏蔽IP是一项重要的功能,可以帮助网站屏蔽无效或恶意请…...
机器学习—学习曲线
学习曲线是帮助理解学习算法如何工作的一种方法,作为它所拥有的经验的函数。 绘制一个符合二阶模型的学习曲线,多项式或二次函数,画出交叉验证错误Jcv,以及Jtrain训练错误,所以在这个曲线中,横轴将是Mtrai…...
在 macOS 和 Linux 中,波浪号 `~`的区别
文章目录 1、在 macOS 和 Linux 中,波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中,波浪号 ~ 在 macO…...
【Java】实战:多数元素
一、题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出&#x…...
怎么打造自己的网站/长沙网站制作费用
httprunner3.x版本的接入了pytest框架,所以可以使用pytest所有的插件;对比httprunner2.x的报告展示各有优缺点,个人觉得2.x的报告还是挺不错的,看起来也很舒服的。 测试报告生成: 首先就是html报告:这个插…...
天津公司网站制作公司/百度竞价推广有哪些优势
原因: CBCentralManager 实例是局部变量,初始化完成之后没有被当前创建它的类所持有 参考博客: [CoreBluetooth] XPC connection invalid...
商城网站 前置审批/深圳网站快速排名优化
题目描述 R国和 S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。历尽艰险后,潜伏于 S国的 R 国间谍小 C终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过加密后在网络上…...
网站上社保做增员怎么做/廊坊百度推广电话
今天截至目前,没有过多的玩手机,自律性良好。 我想要将我们公司每个楼层的销售业绩按照每一天或者每个月绘制一个柱状图,并且动态的显示出来,看看其中的变化。 于是在网上搜索matplotlib动态图的绘制,大部分文章都指向…...
有没有专门教做扯面的网站/如何设计一个网页
作者:一一哥 一. Spring之起源 1.你知道J2EE吗? 要说到Spring的历史起源,首先咱们要说说J2EE这个玩意儿。 J2EE在1999年和2000年的时候开始得到广泛实现,在J2EE中提出了”事务管理“等核心中间层标准化的概念,但是在…...
各种类型网站建设口碑好/搜客
阻塞(等待)模式: <?php $fp fopen("lock.txt", "r"); if(flock($fp,LOCK_EX)) { //..处理订单 flock($fp,LOCK_UN); } fclose($fp); ?> 非阻塞模式: <?php $fp fopen("lock.txt", "r"); if(flock…...