线性代数之矩阵特征值与特征向量的数值求解方法
文章目录
- 前言
- 1. 幂迭代法(Power Iteration)
- 幂法与反幂法求解矩阵特征值
- 幂法求最大特征值
- 编程实现
- 补充说明
- 2. 逆幂迭代法(Inverse Iteration)
- 移位反幂法
- 3. QR 算法(QR Algorithm)——稠密矩阵
- 理论推导
- 编程实现
- 4. 雅可比方法(Jacobi Method)——对称矩阵
- 编程实现
- 5. Lanczos 算法(稀疏矩阵)
- 6. 分治法
- 7. 方法选择指南
- 8. 关键公式与说明
- 参考文献
前言
定n×n维矩阵A,满足下式的数λ称作矩阵A的一个特征值:
A u = λ u Au = \lambda u Au=λu
推广形式
特征值问题可推广到更一般的形式。假设 u = f ( x ) u = f(x) u=f(x) 是一个连续函数, A = d d x A = \frac{d}{dx} A=dxd 表示微分运算,则二阶微分方程:
d 2 u d x 2 = k 2 u \frac{d^2u}{dx^2} = k^2u dx2d2u=k2u
可表示为:
A 2 u = k 2 u A^2u = k^2u A2u=k2u
这是特征值问题在微分算子中的表现形式。
特征方程与求解方法
根据定义 ( A − λ I ) u = 0 (A - \lambda I)\mathbf{u} = 0 (A−λI)u=0
若 A − λ I A - \lambda I A−λI 非奇异,则方程只有零解。因此,特征值需满足:
det ( A − λ I ) = 0 \det(A - \lambda I) = 0 det(A−λI)=0
此方程称为特征方程,其根即为矩阵 A A A 的特征值。
示例
给定矩阵:
A = [ 1 2 3 2 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 2 \end{bmatrix} A=[1322]
其特征方程为:
det [ 1 − λ 2 3 2 − λ ] = ( 1 − λ ) ( 2 − λ ) − 6 = 0 \det\begin{bmatrix} 1 - \lambda & 2 \\ 3 & 2 - \lambda \end{bmatrix} = (1 - \lambda)(2 - \lambda) - 6 = 0 det[1−λ322−λ]=(1−λ)(2−λ)−6=0
展开并化简:
λ 2 − 3 λ − 4 = 0 ⟹ λ 1 = 4 , λ 2 = − 1 \lambda^2 - 3\lambda - 4 = 0 \implies \lambda_1 = 4,\ \lambda_2 = -1 λ2−3λ−4=0⟹λ1=4, λ2=−1
然而,对于高阶矩阵,特征值的解析解通常难以直接计算,需借助数值方法(如QR算法、幂迭代法等)进行求解。
1. 幂迭代法(Power Iteration)
目标:求解矩阵的模最大特征值及其对应特征向量。
幂法与反幂法求解矩阵特征值
本节介绍如何使用幂法和反幂法分别求解矩阵的模最大和模最小特征值。给定矩阵 A A A,假设其有 n n n 个实特征值:
∣ λ 1 ∣ > ∣ λ 2 ∣ > ⋯ > ∣ λ n ∣ |λ_1| > |λ_2| > \cdots > |λ_n| ∣λ1∣>∣λ2∣>⋯>∣λn∣
对应的特征向量为 u 1 , u 2 , … , u n u_1, u_2, \ldots, u_n u1,u2,…,un。
幂法求最大特征值
步骤说明:
-
初始向量选取:
随机选取初始向量 x 1 x_1 x1,可表示为特征向量的线性组合:
x 1 = c 1 u 1 + c 2 u 2 + ⋯ + c n u n x_1 = c_1u_1 + c_2u_2 + \cdots + c_nu_n x1=c1u1+c2u2+⋯+cnun -
迭代计算:
-
第一次迭代:
A x 1 = c 1 A u 1 + c 2 A u 2 + ⋯ + c n A u n = λ 1 c 1 x 2 Ax_1 = c_1Au_1 + c_2Au_2 + \cdots + c_nAu_n = λ_1c_1x_2 Ax1=c1Au1+c2Au2+⋯+cnAun=λ1c1x2
规范化后得到:
x 2 = u 1 + c 2 c 1 λ 2 λ 1 u 2 + ⋯ + c n c 1 λ n λ 1 u n x_2 = u_1 + \frac{c_2}{c_1} \frac{λ_2}{λ_1}u_2 + \cdots + \frac{c_n}{c_1} \frac{λ_n}{λ_1}u_n x2=u1+c1c2λ1λ2u2+⋯+c1cnλ1λnun -
第二次迭代:
A x 2 = λ 1 u 1 + c 2 c 1 λ 2 2 λ 1 u 2 + ⋯ + c n c 1 λ n 2 λ 1 u n = λ 1 x 3 Ax_2 = λ_1u_1 + \frac{c_2}{c_1} \frac{λ_2^2}{λ_1}u_2 + \cdots + \frac{c_n}{c_1} \frac{λ_n^2}{λ_1}u_n = λ_1x_3 Ax2=λ1u1+c1c2λ1λ22u2+⋯+c1cnλ1λn2un=λ1x3
规范化后得到:
x 3 = u 1 + c 2 c 1 λ 2 2 λ 1 2 u 2 + ⋯ + c n c 1 λ n 2 λ 1 2 u n x_3 = u_1 + \frac{c_2}{c_1} \frac{λ_2^2}{λ_1^2}u_2 + \cdots + \frac{c_n}{c_1} \frac{λ_n^2}{λ_1^2}u_n x3=u1+c1c2λ12λ22u2+⋯+c1cnλ12λn2un
-
-
通用迭代公式:
第 k k k 次迭代的通式为:
x k + 1 = u 1 + c 2 c 1 λ 2 k λ 1 k u 2 + ⋯ + c n c 1 λ n k λ 1 k u n x_{k+1} = u_1 + \frac{c_2}{c_1} \frac{λ_2^k}{λ_1^k}u_2 + \cdots + \frac{c_n}{c_1} \frac{λ_n^k}{λ_1^k}u_n xk+1=u1+c1c2λ1kλ2ku2+⋯+c1cnλ1kλnkun -
收敛性分析:
由于 ∣ λ 1 ∣ > ∣ λ i ∣ ( i ≥ 2 ) |λ_1| > |λ_i| \, (i \geq 2) ∣λ1∣>∣λi∣(i≥2),当 k k k 充分大时,高阶小项趋于零,可得:
A x k + 1 ≈ λ 1 u 1 , x k + 1 ≈ u 1 Ax_{k+1} \approx λ_1u_1, \quad x_{k+1} \approx u_1 Axk+1≈λ1u1,xk+1≈u1
具体实现步骤:
- 随机初始化非零向量 v 0 \boldsymbol{v}_0 v0。
- 迭代计算:
v k + 1 = A v k ∥ A v k ∥ \boldsymbol{v}_{k+1} = \frac{A\boldsymbol{v}_k}{\|A\boldsymbol{v}_k\|} vk+1=∥Avk∥Avk - 估计特征值:
λ ≈ v k ⊤ A v k \lambda \approx \boldsymbol{v}_k^\top A \boldsymbol{v}_k λ≈vk⊤Avk
编程实现
具体实现时,并没有λ1和u1的值,因此,迭代计算 x k + 1 = A x k x_{k+1}=Ax_k xk+1=Axk后,规范化 x k + 1 x_{k+1} xk+1即可。注意:最大特征值是指模最大的那个特征值
% 幂法求最大特征值
clc;
clear;
close all;
% 第一种写法
A=[4 2 -2; -2 8 1 ; 2 4 -4];
x = ones(size(A));
for i=1:40x=A*x;[mx,id] = max(abs(x));x=x/x(id);
end
e = A*x./x;
[mx,id] = max(abs(e));
e = e(id)eig(A)% 第二种写法
v0 = [1;1;1];
u0 = [1;1;1];
% A = [2,-1,0;-1,2,-1;0,-1,2];
v = A * u0;
u = v / norm(v, inf);
i = 0;
while norm(u - u0, inf) >= 1e-6u0 = u;v = A * u0;u = v / norm(v, inf);i = i+1;
end
norm(v, inf)
i
u
补充说明
- 最大特征值: 幂法求得的是模最大的特征值 λ 1 λ_1 λ1。
2. 逆幂迭代法(Inverse Iteration)
目标:求解靠近 μ \mu μ 的最小模特征值。
给定矩阵 ( A ),假设其有 ( n ) 个实特征值:
∣ λ 1 ∣ > ∣ λ 2 ∣ > ⋯ > ∣ λ n ∣ |\lambda_1| > |\lambda_2| > \cdots > |\lambda_n| ∣λ1∣>∣λ2∣>⋯>∣λn∣
其对应的特征向量为( u 1 , u 2 u_1, u_2 u1,u2, … , u n \ldots, u_n …,un)。( λ n \lambda_n λn ) 是最小特征值。首先注意到如果 ( A u = λ u Au= \lambda u Au=λu ),则:
A − 1 A u = A − 1 λ u ⟹ u = A − 1 λ u A^{-1}Au = A^{-1}\lambda u \implies u = A^{-1}\lambda u A−1Au=A−1λu⟹u=A−1λu
因此有:
A − 1 u = 1 λ u A^{-1}u = \frac{1}{\lambda}u A−1u=λ1u
可以看到,当 λ n \lambda_n λn为矩阵 A 的最小特征值时,( 1 λ n \frac{1}{\lambda_n} λn1 ) 将是 A − 1 A^{-1} A−1的最大特征值。此时运用幂法求解 A − 1 A^{-1} A−1 的最大特征值,取倒数,即为 A 的最小特征值。反幂算法中需要注意的是,当最小特征值为 0 时,其倒数是没有定义的,此时反幂法求解的是第二小的特征值,且需要采用移位反幂法。
function e = MinEig(A)invA = inv(A);x = ones(size(A));for i=1:40x=invA*x; [mx,id] = max(abs(x));x=x/x(id);ende = invA*x./x; [mx,id] = max(abs(e));e = 1/e(id);
end
移位反幂法
步骤:
- 对 ( A − μ I ) (A - \mu I) (A−μI) 进行 LU 分解。
- 随机初始化向量 v 0 \boldsymbol{v}_0 v0。
- 迭代求解:
( A − μ I ) v k + 1 = v k ⇒ v k + 1 = v k + 1 ∥ v k + 1 ∥ (A - \mu I)\boldsymbol{v}_{k+1} = \boldsymbol{v}_k \quad \Rightarrow \quad \boldsymbol{v}_{k+1} = \frac{\boldsymbol{v}_{k+1}}{\|\boldsymbol{v}_{k+1}\|} (A−μI)vk+1=vk⇒vk+1=∥vk+1∥vk+1
A = [3,0,-10;-1,3,4;0,1,-2];
I = eye(3,3);
p = 4.3;
u0 = [1;1;1];
v = inv(A - p * I) * u0;
u = v / norm(v, inf);
i = 0;
while norm(u - u0, inf) > 1e-5u0 = u;v = inv(A - p * I) * u0;u = v / norm(v, inf);i ++;
end;
i
u
x = p + 1 / norm(v, inf)
综述所述,可以总结反幂法求解特征向量的特点如下:
位移技术: 对每个已求得的特征值 λ i \lambda_i λi,构造矩阵 A 0 − λ i I A_0-\lambda_iI A0−λiI,使其接近奇异;
加速收敛: 反幂法迭代公式为 x k + 1 = ( A − σ I ) − 1 x k x_{k+1}=(A-\sigma I)^{-1}x_k xk+1=(A−σI)−1xk,其中 σ \sigma σ接近特征值。此时 ( A − σ I ) − 1 (A-\sigma I)^{-1} (A−σI)−1的模最大特征值对应的特征向量即为A的 σ \sigma σ附近特征值的特征向量。
高精度优势: 当 λ i \lambda_i λi精度较高时,反幂法可以在少量迭代内快速收敛到对应特征向量。
3. QR 算法(QR Algorithm)——稠密矩阵
目标:求解所有特征值(稠密矩阵)。
步骤:
- 将 A A A 转化为上 Hessenberg 矩阵。
- 迭代 QR 分解:
A k = Q k R k , A k + 1 = R k Q k A_k = Q_k R_k, \quad A_{k+1} = R_k Q_k Ak=QkRk,Ak+1=RkQk - 当 A k A_k Ak 收敛为上三角矩阵时,对角线元素即为特征值。
理论推导
幂法与反幂法用于求解矩阵的最大特征值与最小特征值。若想求解矩阵的所有特征值,可以使用QR分解法。假设矩阵 A 是 n × n n \times n n×n 的方阵,且其 n 个特征值均为互不相同的实数。QR分解法的理论保证如下:
若对矩阵 A 进行相似变换 B = C − 1 A C B = C^{-1}AC B=C−1AC ,则变换后的矩阵 B 的特征值与 A 一致。这是因为:
若 A u = λ u Au = \lambda u Au=λu ,令 v = C − 1 u v = C^{-1}u v=C−1u,则有
A C v = A u = λ C v ACv = Au = \lambda Cv ACv=Au=λCv
进一步可得
C − 1 A C v = λ v C^{-1}ACv = \lambda v C−1ACv=λv
因此, λ \lambda λ 也是 C − 1 A C C^{-1}AC C−1AC 的特征值。
据此,可以通过以下步骤实现特征值和特征向量的求解:
-
初始化
- 令 ( A_1 = A ),并对 ( A_1 ) 进行QR分解:
A 1 = Q 1 R 1 A_1 = Q_1R_1 A1=Q1R1
其中,( Q_1 ) 是正交矩阵(满足 ( Q_1Q_1^T = I )),( R_1 ) 是上三角矩阵。
- 令 ( A_1 = A ),并对 ( A_1 ) 进行QR分解:
-
迭代生成新矩阵
- 计算 ( A_2 = R_1Q_1 ),即:
A 2 = Q 1 − 1 A 1 Q 1 A_2 = Q_1^{-1}A_1Q_1 A2=Q1−1A1Q1
此时 ( A_2 ) 的特征值与 ( A ) 一致。继续对 ( A_2 ) 进行QR分解:
A 2 = Q 2 R 2 A_2 = Q_2R_2 A2=Q2R2
- 计算 ( A_2 = R_1Q_1 ),即:
-
重复迭代
- 计算 ( A_3 = R_2Q_2 ),即:
A 3 = Q 2 − 1 A 2 Q 2 = Q 2 − 1 Q 1 − 1 A 1 Q 1 Q 2 A_3 = Q_2^{-1}A_2Q_2 = Q_2^{-1}Q_1^{-1}A_1Q_1Q_2 A3=Q2−1A2Q2=Q2−1Q1−1A1Q1Q2
- 计算 ( A_3 = R_2Q_2 ),即:
-
终止条件
- 重复上述步骤,直至 ( A_n ) 收敛为一个上三角矩阵。此时,矩阵对角线上的元素即为 ( A ) 的所有特征值。
注:QR分解通过不断迭代将原矩阵相似变换为上三角矩阵,从而直接读取对角线元素作为特征值。此方法适用于实对称矩阵或具有实特征值的方阵。
编程实现
A=[ 6 -7 2 ; 4 -5 2; 1 -1 1]
A0=A;
for i=1:40[Q R]=qr(A);A=R*Q;
end
A
ev=diag(A)
eig(A0)
特点:
- 复杂度 O ( n 3 ) O(n^3) O(n3),LAPACK 的核心算法。
- 结合位移(如 Wilkinson 位移)优化收敛。
特征值修正
QR方法得到的特征值可能存在微小误差,反幂法可进一步修正
A=[ 6 -7 2 ; 4 -5 2; 1 -1 1]
A0=A;
for i=1:40[Q R]=qr(A);A=R*Q;
end
A
ev=diag(A)
Q
eig(A0)% 使用反幂法求特征向量,并对特征值进行修正
a = ev;
n = size(a,1);
x = zeros(n);
for i = 1:nx0 = ones(n,1);[b,x0] = MinEig(A0-a(i,1)*eye(n));x(:,i) = x0;a(i,:) = a(i,:) + b;
enda
x
4. 雅可比方法(Jacobi Method)——对称矩阵
目标:求解对称矩阵的所有特征值和特征向量。
Jacobi方法的基本思想是通过一次正交变换,将A中的一对非零的非对角元素化成零并且使得非对角元素的平方和减小。反复进行上述过程,使变换后的矩阵的非对角元素的平方和趋于零,从而使该矩阵近似为对角矩阵,得到全部特征值和特征向量。
步骤:
- 通过 Givens 旋转矩阵 G k G_k Gk 逐步对角化:
A k + 1 = G k ⊤ A k G k A_{k+1} = G_k^\top A_k G_k Ak+1=Gk⊤AkGk - 重复直到非对角元素接近零。
特点:
- 稳定但收敛慢,特征向量通过旋转矩阵累积。
编程实现
function [D,V,iter]=Jacobi_classical(A,maxIter,tol)
n = size(A, 1); % 矩阵的大小
V = eye(n); % 初始化特征向量矩阵为单位矩阵
iter = 0; % 初始化迭代次数
% 设置最大迭代次数和误差精度
if nargin < 3 || isempty(tol)tol = 1e-9; % 默认误差精度
end
if nargin < 2 || isempty(maxIter)maxIter = 1000; % 默认最大迭代次数
end
while(iter < maxIter)iter=iter+1;D=A;n=size(D,1);p=1;q=2;for i=1:nfor j=i+1:nif(abs(D(i,j))>abs(D(p,q)))%找到对称矩阵的上三角矩阵中最大的元素的下标p=i;q=j;endendendif(abs(D(p,q))<tol)break;endif(A(p,q)~=0)d=(A(q,q)-A(p,p))/(2*A(p,q));if(d>0)t=1/(d+sqrt(d^2+1));elset=-1/(-d+sqrt(d^2+1));endc=1/sqrt(t^2+1);s=c*t;elsec=1;s=0;endR=[c s;-s c];A([p,q],:)=R'*A([p,q],:);A(:,[p,q])=A(:,[p,q])*R;V(:, [p, q]) = V(:,[p,q])*R;
end
D = diag(diag(D)); % 提取特征值
end
结果测试:
clc;
clear;
close all;A=[ 6 -7 2 ; 4 -5 2; 1 -1 1]
[D, V, iter] = Jacobi_classical(A, 2000)
eig(A)
5. Lanczos 算法(稀疏矩阵)
目标:求解稀疏矩阵的部分极端特征值。
步骤:
- 生成 Krylov 子空间的正交基底。
- 投影到三对角矩阵 T k T_k Tk:
T k = V k ⊤ A V k T_k = V_k^\top A V_k Tk=Vk⊤AVk - 对 T k T_k Tk 应用 QR 算法求特征值。
特点:
- 仅需矩阵-向量乘法,适合大规模稀疏矩阵。
6. 分治法
目标:高效求解对称三对角矩阵的所有特征值。
步骤:
- 将矩阵分解为子矩阵。
- 递归求解子矩阵特征值。
- 合并子问题解并修正。
特点:
- 复杂度 O ( n 2 ) O(n^2) O(n2),适合大规模三对角矩阵。
7. 方法选择指南
场景 | 推荐方法 |
---|---|
中小规模稠密矩阵 | QR 算法 |
对称矩阵 | Jacobi 或 QR 算法 |
稀疏矩阵的极端特征值 | Lanczos/Arnoldi 迭代 |
最小/靠近 μ \mu μ 的特征值 | 逆幂迭代法 + 位移 |
工程问题中的部分特征值 | 子空间迭代法 |
8. 关键公式与说明
特征方程
矩阵 A A A 的特征值满足:
det ( A − λ I ) = 0 \det(A - \lambda I) = 0 det(A−λI)=0
- 2x2 矩阵:
λ 2 − tr ( A ) λ + det ( A ) = 0 \lambda^2 - \text{tr}(A)\lambda + \det(A) = 0 λ2−tr(A)λ+det(A)=0 - n 阶矩阵:
P ( λ ) = ( − 1 ) n λ n + ⋯ + det ( A ) P(\lambda) = (-1)^n \lambda^n + \dots + \det(A) P(λ)=(−1)nλn+⋯+det(A)
提示:
- 高阶矩阵避免解析法,优先使用数值库(如 LAPACK、ARPACK)。
- 对称矩阵的特征向量可正交化,提升计算稳定性。
参考文献
[1] *数值计算day5-特征值与特征向量
[2] 数值计算方法 Chapter7. 计算矩阵的特征值和特征向量
[3] 数值线性代数:Arnoldi求解特征值/特征向量
[4] 使用Matlab实现:幂法、反幂法(原点位移)
[5] MATLAB求解矩阵特征值的六种方法
相关文章:

线性代数之矩阵特征值与特征向量的数值求解方法
文章目录 前言1. 幂迭代法(Power Iteration)幂法与反幂法求解矩阵特征值幂法求最大特征值编程实现补充说明 2. 逆幂迭代法(Inverse Iteration)移位反幂法 3. QR 算法(QR Algorithm)——稠密矩阵理论推导编程…...

Spring MVC源码分析のinit流程
文章目录 前言一、 init1.1、createWebApplicationContext1.2、onRefresh 二、请求处理器2.1、RequestMapping2.2、Controller接口2.3、HttpRequestHandler接口2.4、HandlerFunction 三、initHandlerMappings3.1、getDefaultStrategies3.1.1、RequestMappingHandlerMapping3.1.…...

【后端开发】go-zero微服务框架实践(goland框架对比,go-zero开发实践,文件上传问题优化等等)
【后端开发】go-zero微服务框架实践(goland框架对比,go-zero开发实践,文件上传问题优化等) 文章目录 1、go框架对比介绍2、go-zero 微服务开发实践3、go-zero 文件上传问题优化 1、go框架对比介绍 国内开源goland框架对比 1 go-…...

C#程序加密与解密Demo程序示例
目录 一、加密程序功能介绍 1、加密用途 2、功能 3、程序说明 4、加密过程 5、授权的注册文件保存方式 二、加密程序使用步骤 1、步骤一 编辑2、步骤二 3、步骤三 4、步骤四 三、核心代码说明 1、获取电脑CPU 信息 2、获取硬盘卷标号 3、机器码生成 3、 生成…...

小程序事件系统 —— 33 事件传参 - data-*自定义数据
事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参; 在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在事件处理函数中获取这些自定义数据,从而完成…...

深入解析 JavaScript 原型与原型链:从原理到应用
原型和原型链是 JavaScript 中实现对象继承和属性查找的核心机制。为了更深入地理解它们,我们需要从底层原理、实现机制以及实际应用等多个角度进行分析。 1. 原型(Prototype) 1.1 什么是原型? 每个 JavaScript 对象(…...

关于AI数据分析可行性的初步评估
一、结论:可在部分环节嵌入,无法直接处理大量数据 1.非本地部署的AI应用处理非机密文件没问题,内部文件要注意数据安全风险。 2.AI(指高规格大模型)十分适合探索性研究分析,对复杂报告无法全流程执行&…...

回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测
回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测 目录 回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测回归效果基本介绍GWO-BP-Adaboost:基于灰狼算法优化BP神经网络结合Adaboost思想…...

ARM Cortex-M 内存映射详解:如何基于寄存器直接读写 寄存器映射方式编码程序 直接操作硬件寄存器来控制 MCU
ARM Cortex-M 的系统映射空间 在 STM32 等 ARM Cortex-M 系列 MCU 中,内存地址空间按照 存储功能 进行了严格划分,包括 Flash(程序存储)、RAM(数据存储)、外设寄存器(GPIO、UART、SPI 等&am…...

深度学习实战车辆目标跟踪与计数
本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化,该数据集包含丰富的车辆目标图像样本…...

django中视图作用和视图功能 以及用法
在 Django REST Framework(DRF)中,视图(View)是处理 HTTP 请求并返回响应的核心组件。DRF 提供了多种视图类,适用于不同的场景和需求。以下是 DRF 中常见的视图类及其作用、使用方法的详细说明: 一、DRF 视图的分类 DRF 的视图可以分为以下几类: 基于函数的视图(Func…...

【每日学点HarmonyOS Next知识】输入框自动获取焦点、JS桥实现方式、Popup设置全屏蒙版、鼠标事件适配、Web跨域
1、HarmonyOS TextInput或TextArea如何自动获取焦点? 可以使用 focusControl.requestFocus 对需要获取焦点的组件设置焦点,具体可以参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attribut…...

【学习思维模型】
学习思维模型 一、理解类模型二、记忆类模型三、解决问题类模型四、结构化学习模型五、效率与习惯类模型六、高阶思维模型七、实践建议八、新增学习思维模型**1. 波利亚问题解决四步法****2. 主动回忆(Active Recall)****3. 鱼骨图(因果图/Ishikawa Diagram)****4. MECE原则…...

MyBatis-Plus分页控件使用及使用过程发现的一个坑
最近维护一个旧项目的时候,出现了一个BUG,经排查后发现是Mybatis-plus分页控件使用的时候需要注意的一个问题,故在本地使用MybatisPlus模拟出现了一下这个问题。 首先,先说一下MyBatis-Plus的使用: 1)引入…...

STM32的APB1和APB2的区别
STM32微控制器中的APB1和APB2的区别 STM32微控制器中的APB1和APB2是两种不同的外设总线,主要区别在于时钟速度、连接的外设以及用途。以下是它们的详细对比: 1. 时钟速度 APB1 (Advanced Peripheral Bus 1): 低速总线,时钟频率通常为系统时钟…...

JS一些小知识点
一、|| 运算符 plain this.ctx.body { type: type || 0, // ||在此处用法用于默认值填充,判断是否传参或该值是否存在,如果不存在就使用||后买你的值作为默认值 code: code || 0, msg: msg || SUCCESS, data: data || {}, ...others }; 二、trim() 方…...

手写Tomcat:实现基本功能
首先,Tomcat是一个软件,所有的项目都能在Tomcat上加载运行,Tomcat最核心的就是Servlet集合,本身就是HashMap。Tomcat需要支持Servlet,所以有servlet底层的资源:HttpServlet抽象类、HttpRequest和HttpRespon…...

C#变量与变量作用域详解
一、变量基础 1. 声明与初始化 声明语法:<数据类型> <变量名>(如 int age; string name)初始化要求: 1、 类或结构体中的字段变量(全局变量)无需显式初始化,默认值…...

SV学习笔记——数组、队列
一、定宽数组 定宽数组是静态变量,编译时便已经确定其大小,其可以分为压缩定宽数组和非压缩定宽数组:压缩数组是定义在类型后面,名字前面;非压缩数组定义在名字后面。Bit [7:0][3:0] name; bit[7:0] name [3:0]; 1.1定宽数组声明 数组的声…...

API调试工具的无解困境:白名单、动态IP与平台设计问题
引言 你是否曾经在开发中遇到过这样的尴尬情形:你打开了平台的API调试工具,准备一番操作,结果却发现根本无法连接到平台?别急,问题出在调试工具本身。今天我们要吐槽的就是那些神奇的开放平台API调试工具,…...

Git清理本地残留的、但已经在服务器上被删除的分支
要筛选出已经被服务器删除的本地分支,并在本地删除这些分支,可以按照以下步骤进行操作: 步骤 1: 获取远程分支信息,确保本地的远程分支信息是最新的: git fetch -p步骤 2: 列出本地分支和远程分支: git …...

HTTPS实现内容加密的逻辑
加密过程 使用非对称加密,网站生成公钥和私钥浏览器获取到网站公钥(通过验证和解析CA证书),随即生成一串字符串,然后使用公钥加密,发送给网站。网站用私钥将加密内容解析,然后使用这串字符串对…...

使用vue3.0+electron搭建桌面应用并打包exe
使用vue3.0electron搭建桌面应用并打包exe_如何使用electron将vue3vite开发完的项目打包成exe应用程序-CSDN博客...

JSAR 基础 1.2.1 基础概念_空间小程序
JSAR 基础 1.2.1 基础概念_空间小程序 空间空间自由度可嵌入空间空间小程序 最新的技术进展表明,官网之前的文档准备废除了,基于xsml的开发将退出历史舞台,three.js和普通web结合的技术将成为主导。所以后续学习请移步three.js学习路径&#…...

mysql练习
创建数据库db_ck,再创建表t_hero,将四大名著中的主要人物都插入这个表中,将实现过程中sql提交上上来 1、创建数据库db_ck mysql> create database db_ck; 2、创建表t_hero mysql> use db_ck Database changed mysql> create table …...

2025年2月平价旗舰手机性能对比
1、荣耀Magic7 点评:缺席潜望式长焦,3X直立长焦体验还行。兼顾性能、游戏、屏幕、影像、续航、快充等诸多方面,且外围配置比较齐全。 2、vivo x200 点评:潜望式长焦相机,拍照效果好,30W无线充电着实鸡肋&a…...

基于Spring Boot的扶贫助农系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

物联网中如何增加其可扩展性 协议 网络 设备 还包括软件层面上的
物联网(IoT)系统的可扩展性是指系统能够随着设备数量、数据流量和业务需求的增长而灵活扩展的能力。为了增加物联网的可扩展性,需要从协议、网络、设备和软件等多个层面进行优化和设计。以下是一些具体的策略和方法: 1. 协议层面的可扩展性 1.1 采用轻量级协议 轻量级协议…...

基于DeepSeek与搜索引擎构建智能搜索摘要工具
基于DeepSeek与搜索引擎构建智能搜索摘要工具 1. 项目概述 本项目通过整合DuckDuckGo搜索引擎与DeepSeek大语言模型,实现了一个智能搜索摘要生成工具。系统可自动执行以下流程: 输入查询语句进行全网搜索获取并解析搜索结果调用AI模型生成结构化摘要输出带来源标注的专业级…...

SQL 简介
SQL 简介 引言 结构化查询语言(Structured Query Language,简称 SQL)是一种用于数据库管理和操作的标准查询语言。它广泛应用于各个领域的数据库管理系统(DBMS)中,用于存储、检索和管理数据。SQL 不仅是数…...