matlab使用教程(14)—稀疏矩阵的运算

news2025/1/16 19:06:57

1.运算效率

1.1计算复杂度

        稀疏运算的计算复杂度与矩阵中的非零元素数 nnz 成比例。计算复杂度在线性上还与矩阵的行大小 m 和列大小 n 相关,但与积 m*n(零元素和非零元素总数)无关。相当复杂的运算(例如对稀疏线性方程求解)的复杂度涉及如排序和填充之类的因素,已在上一部分中对这些因素进行了讨论。通常,稀疏矩阵运算所需的计算时间通常与非零元素数量中的算术运算数成比例。

1.2算法详细信息

        根据以下规则,稀疏矩阵通过计算传播:
        • 接受矩阵并返回标量或等尺寸向量的函数始终都以满存储格式生成输出。例如,无论其输入是完全还是稀疏模式, size 函数始终都返回满向量。
        • 接受标量或向量并返回矩阵的函数始终都返回完全结果,例如 zeros ones rand eye。该操作十分必要,可以避免意外引入稀疏。 zeros(m,n) 的稀疏模拟函数即是 sparse(m,n) rand eye 的稀疏模拟函数分别是 sprand speye 。函数 ones 没有稀疏模拟。
        • 接受矩阵并返回矩阵或向量的一元函数保留存储类的操作数。如果 S 是稀疏矩阵,则 chol(S) 也是稀疏矩阵, diag(S) 是稀疏向量。如 max sum 之类的列级函数也返回稀疏向量,即使这些向量完全为非零元素也是如此。该规则的重要例外是 sparse full 函数。
        • 如果两个操作数都是稀疏元素,则二元运算符生成稀疏结果;如果两个操作数都是完全元素,则生成完全结果。对于混合操作数,除非运算保留稀疏性,否则生成完全结果。如果 S 是稀疏矩阵,而 F 是满矩阵,则 S+F S*F F\S 是满矩阵,而 S.*F S&F 是稀疏矩阵。在某些情况下,即使矩阵包含很少的零元素,也可能是稀疏结果。
        • 使用 cat 函数或方括号串联矩阵会为混合操作数生成稀疏结果。

1.3置换与重新排序

        可以通过以下两种方式表示稀疏矩阵 S 的行和列置换:
        • 置换矩阵 P 对作为 P*S S 有效,或对作为 S*P' 的列有效。
        • 置换向量 p 是包含 1:n 置换的满向量。对作为 S(p,:) S 行有效,或对作为 S(:,p) 的列有效。例如:
p = [1 3 4 2 5]
I = eye(5,5);
P = I(p,:)
e = ones(4,1);
S = diag(11:11:55) + diag(e,1) + diag(e,-1)
p =
1 3 4 2 5
P =
1 0 0 0 0
0 0 1 0 0
0 0 0 1 0
0 1 0 0 0
0 0 0 0 1
S =
11 1 0 0 0
1 22 1 0 0
0 1 33 1 0
0 0 1 44 1
0 0 0 1 55
        现在,可以使用置换向量 p 和置换矩阵 P 尝试一些置换。例如,语句 S(p,:) P*S 返回相同的矩阵。
S(p,:)
ans =
11 1 0 0 0
0 1 33 1 0
0 0 1 44 1
1 22 1 0 0
0 0 0 1 55
P*S
ans =
11 1 0 0 0
0 1 33 1 0
0 0 1 44 1
1 22 1 0 0
0 0 0 1 55
        同样,S(:,p) S*P' 都生成
S*P'
ans =
11 0 0 1 0
1 1 0 22 0
0 33 1 1 0
0 1 44 0 1
0 0 1 0 55
        如果 P 是稀疏矩阵,则两种表示都使用与 n 成比例的存储,可以在与 nnz(S) 成正比的时间向 S 应用任一种表示。向量表示略为简洁和有效,因此除了 LU(三角)分解中的主元置换返回与完全 LU 分解兼容的矩阵外,许多稀疏矩阵置换例程都返回满行向量。要在两种置换表示之间转换:
n = 5;
I = speye(n);
Pr = I(p,:);
Pc = I(:,p);
pc = (1:n)*Pc
pc =
1 3 4 2 5
pr = (Pr*(1:n)')'
pr =
1 3 4 2 5
P 的逆为 R = P' 。可以通过 r(p) = 1:n 计算 p 的逆。
r(p) = 1:5
r =
1 4 2 3 5

1.4重新排序以改变稀疏性

        对矩阵列重新排序通常可以使其 LU 或 QR 因子更加稀疏。对列和列重新排序通常可以使其 Cholesky 因子更加稀疏。此类最简单的重新排序是按照非零元素计数为列排序。对于具有及其不规则结构的矩阵而言,这有时是一个不错的重新排序方法,尤其是行或列的非零元素计数出现重大变化时更是如此。colperm 函数按每列中非零元素数量从小到大的顺序重排矩阵列,计算矩阵的置换。
        反向 Cuthill-McKee 排序用于减少矩阵的轮廓或带宽。该排序方法不能保证会找到尽可能最小的带宽,但通常都能找到。 symrcm 函数实际上处理的是对称矩阵 A + A' 中的非零结构体。但对于非对称矩阵,该函数的结果也很有用。此种排序对源自一维问题或某种意义上细长的问题的矩阵很有用。

1.5近似最小度排序

        节点在图中的度是到该节点的连接数。这与邻接矩阵的相应行中的非对角非零元素数相同。近似最小度算法基于高斯消去法或 Cholesky 分解期间这些度的更改来进行排序。该算法很复杂并且功能强大,通常会生成比大多数其他排序稀疏的因子,包含列计数和反向 Cuthill-McKee。由于记录每个节点的度非常耗时,因此近似最小度算法使用近似度而不是精确度。
以下 MATLAB 函数可以实现近似最小度算法:
        • symamd - 用于对称矩阵。
        • colamd - 用于 A*A' A'*A 形式的非对称矩阵和对称矩阵。
        可以使用 spparms 函数更改与这些算法详细信息相关的不同参数。
        dissect 函数所实现的嵌套剖分排序算法与近似最小度排序类似,即通过将矩阵视为图的邻接矩阵,对矩阵的行和列进行重新排序。该算法通过将图中的顶点对折叠在一起,大幅减小问题的规模。在对较小的图重新排序后,该算法随即通过应用投影和细化步骤,将图恢复至原始大小。与其他重新排序方法相比,嵌套剖分算法可生成高质量的重新排序,尤其适用于有限元矩阵。

2.稀疏矩阵分解

2.1LU 分解

        如果 S 是稀疏矩阵,则以下命令返回三个稀疏矩阵: L U P ,这样 P*S = L*U
[L,U,P] = lu(S);
        lu 使用高斯消去法和部分主元消去法获取因子。置换矩阵 P 仅有 n 个非零元素。和稠密矩阵一样,语句[L,U] = lu(S) 返回置换的单位下三角矩阵和其积为 S 的上三角矩阵。 lu(S) 本身在单个矩阵中返回 LU,没有主元信息。有三个输出的语法 [L,U,P] = lu(S) 通过数值部分主元消去法选择 P ,但不执行主元消去法来改进 LU 因子中的稀疏性。另一方面,有四个输出的语法 [L,U,P,Q] = lu(S) 通过阈值部分主元消去法选择 P,并选择 P Q 以改善 LU 因子中的稀疏性。
        可以使用以下项控制稀疏矩阵中的主元lu(S,thresh)
        其中 thresh 是 [0,1] 中的主元阈值。列中对角线元素的模小于该列中任何子对角线元素模的 thresh 倍时会选主元。 thresh = 0 强迫选择对角主元。 thresh = 1 是默认值。( thresh 的默认值是四输出语法的0.1)。调用不超过三个输出的 lu 时,MATLAB 会在分解期间自动分配存储稀疏 L U 因子所必需的内存。除了四个输出的语法外,MATLAB 不使用任何符号 LU 预分解确定内存要求和提前设置数据结构体。

2.2稀疏矩阵的重新排序和分解

        此示例说明重新排序与分解对稀疏矩阵的影响。如果您求得可减少填充项的良好列置换矩阵 p (可能通过 symrcm colamd 求得),则计算 lu(S(:,p)) 所需的时间和存储将少于计算 lu(S) 所需的时间和存储。使用布基球示例创建稀疏矩阵。
B = bucky;
        B 在每一个行和列都有恰好 3 个非零元素。
        分别使用 symrcm symamd 创建两个置换 r m
r = symrcm(B);
m = symamd(B);
        这两个置换是对称反向 Cuthill-McKee 排序和对称近似最小度排序。
        创建稀疏模式图,显示具有以下三个不同数序的三个布基球图邻接矩阵。原始数序对应的局部五边形结构在其他结构中并不明显。
figure
subplot(1,3,1)
spy(B)
title( 'Original' )
subplot(1,3,2)
spy(B(r,r))
title( 'Reverse Cuthill-McKee' )
subplot(1,3,3)
spy(B(m,m))
title( 'Min Degree' )
        反向 Cuthill-McKee 排序 r 减小了带宽,并将所有非零元素集中在对角线附近。近似最小度排序 m 则生成了包含大块零的类分形结构。要查看在布基球 LU 分解中生成的填充元素,请使用稀疏单位矩阵 speye B 的对角线上插入 -3。
B = B - 3*speye(size(B));
        由于每一行的和现在为零,因此新的 B 实际为奇异矩阵,但它仍有助于计算其 LU 分解。当仅使用一个输出参数调用时, lu 会在一个稀疏矩阵中返回两个三角矩阵 L U。该矩阵中的非零元素数量是在解算涉及B 的线性系统时所需的时间和存储测度。以下是当前考虑的三个置换的非零计数。
        • lu(B) (原始):1022
        • lu(B(r,r)) (反向 Cuthill-McKee 排序):968
        • lu(B(m,m)) (近似最小度):636
        尽管这只是一个很小的示例,但结果却非常典型。原始数序方案产生的填充元素最多。反向 Cuthill McKee 排序的填充元素集中在条带以内,但几乎与前两个排序一样广泛。对于近似最小度排序,在消元过程中保留了相对较大的零块,并且填充量远小于其他排序所生成的填充量。以下 spy 绘图反映了每个重新排序的特征。
figure
subplot(1,3,1)
spy(lu(B))
title( 'Original' )
subplot(1,3,2)
spy(lu(B(r,r)))
title( 'Reverse Cuthill-McKee' )
subplot(1,3,3)
spy(lu(B(m,m)))
title( 'Min Degree' )

2.3Cholesky 分解

        如果 S 是对称(或 Hermitian)的正定稀疏矩阵,下面的语句返回上三角稀疏矩阵 R ,这样 R'*R = S
R = chol(S)
        chol 不会针对稀疏度自动选主元,但可以计算近似最小度和描述文件极限置换以用于 chol(S(p,p))
        由于 Cholesky 算法不会针对稀疏度选主元,也不需要选主元以保持数值稳定性,chol 将快速计算所需的内存量并在分解开始时分配所有的内存。可以使用 symbfact 计算分配的内存量,该函数使用与 chol 相同的算法。

2.4QR 分解

        MATLAB 通过以下语句计算稀疏矩阵 S 的完整 QR 分解
[Q,R] = qr(S)
        或
[Q,R,E] = qr(S)
        但这通常不切实际。酉矩阵 Q 通常无法拥有大量的零元素。可以使用更为实际的替代方法,该方法有时也称为“Q-less QR 分解”。通过一个稀疏输入参数和一个输出参数
R = qr(S)
        仅返回 QR 分解的上三角部分。矩阵 R 为与标准方程相关的矩阵提供 Cholesky 分解:
R'*R = S'*S
        但是,避免在计算 S'*S 时丢失固有的数值信息。通过两个具有相同行数的输入参数和两个输出参数,语句
[C,R] = qr(S,B)
        对 B 应用正交变换,生成 C = Q'*B ,但不计算 Q。Q-less QR 分解允许解决稀疏最小二乘问题
        通过两步
[c,R] = qr(A,b);
x = R\c
        如果 A 是稀疏矩阵但不是方阵,MATLAB 对线性方程求解反斜杠运算符使用这些步长。
x = A\b
        您也可以自己进行分解,并检查 R 是否发生秩亏情况。也可以通过不同的右端 b 对一个序列的最小二乘线性系统求解,计算 R = qr(A) 时该右端不必为已知。该方法使用以下代码对“半标准方程” R'*R*x = A'*b 求解
x = R\(R'\(A'*b))
        然后应用一步迭代细化以减少舍入误差:
r = b - A*x;
e = R\(R'\(A'*r));
x = x + e

2.5不完全分解

        ilu ichol 函数提供近似不完全分解,它们可用作稀疏迭代方法的预条件子。ilu 函数生成三个不完全的下-上 (ILU) 分解:零填充 ILU ( ILU(0) )、Crout 版本的 ILU ( ILUC(tau)),以及具有阈值调降和主元的 ILU ( ILUTP(tau) )。 ILU(0) 从不选主元,并且生成因子仅在输入矩阵具有非零元素的位置包含非零元素。但是, ILUC(tau) ILUTP(tau) 通过用户定义的调降容差 tau 执行基于阈
值的调降。例如:
A = gallery( 'neumann' ,1600) + speye(1600);
nnz(A)
ans =
7840
nnz(lu(A))
ans =
126478
        显示 A 包含 7840 个非零元素,其完全 LU 分解包含 126478 个非零元素。另一方面,以下代码显示不同的 ILU 输出:
[L,U] = ilu(A);
nnz(L)+nnz(U)-size(A,1)
ans =
7840
norm(A-(L*U).*spones(A), 'fro' )./norm(A, 'fro' )
ans =
4.8874e-17
opts.type = 'ilutp' ;
opts.droptol = 1e-4;
[L,U,P] = ilu(A, opts);
nnz(L)+nnz(U)-size(A,1)
ans =
31147
norm(P*A - L*U, 'fro' )./norm(A, 'fro' )
ans =
9.9224e-05
opts.type = 'crout' ;
[L,U,P] = ilu(A, opts);
nnz(L)+nnz(U)-size(A,1)
ans =
31083
norm(P*A-L*U, 'fro' )./norm(A, 'fro' )
ans =
9.7344e-05
        这些计算显示零填充因子包含 7840 个非零元素,ILUTP(1e-4) 因子包含 31147 个非零元素,
ILUC(1e-4) 因子包含 31083 个非零元素。另外,零填充因子积的相对误差在 A 的模式中实质上为零。最后,通过阈值调降生成的分解中的相对误差类似于调降容差,虽然不能保证一定会发生此情况。 ichol 函数提供对称正定稀疏矩阵的零填充不完全 Cholesky 分解 ( IC(0)) 以及基于阈值的调降不完全Cholesky 分解 ( ICT(tau) )。这些分解是上述不完全 LU 分解的模拟,具有许多相同特点。例如:
A = delsq(numgrid( 'S' ,200));
nnz(A)
ans =
195228
nnz(chol(A, 'lower' ))
ans =
7762589
        显示 A 包含 195228 个非零元素,其没有重新排序的完全 Cholesky 分解包含 7762589 个非零元素。相比之下:
L = ichol(A);
nnz(L)
ans =
117216
norm(A-(L*L').*spones(A), 'fro' )./norm(A, 'fro' )
ans =
3.5805e-17
opts.type = 'ict' ;
opts.droptol = 1e-4;
L = ichol(A,opts);
nnz(L)
ans =
1166754
norm(A-L*L', 'fro' )./norm(A, 'fro' )
ans =
2.3997e-04
        IC(0) 仅在 A 的下三角模式以及 A 的匹配因子积模式中拥有非零模式。另外, ICT(1e-4) 因子远远比完全Cholesky 分解稀疏,并且 A L*L' 之间的相对误差类似于调降容差。值得注意的是,与 chol 提供的因子不同, ichol 提供的默认因子是下三角

3特征值和奇异值

        可以使用两个函数计算一些指定的特征值或奇异值。svds 基于 eigs
        这些函数最常用于稀疏矩阵,但它们可以用于满矩阵,甚至是 MATLAB 代码中定义的线性运算函数。语句
[V,lambda] = eigs(A,k,sigma)
        查找矩阵 A 最靠近“shift” sigma k 特征值及相应的特征向量。如果忽略 sigma,会找到模最大的特征值。如果 sigma 为零,会找到模最小的特征值。可以包含第二个矩阵 B 以避免广义特征值问题:Aυ =λBυ。
        语句
[U,S,V] = svds(A,k)
        查找 A k 个最大奇异值,而
[U,S,V] = svds(A,k, 'smallest' )
        查找 k 个最小奇异值。
        eigs svds 中使用的数值方法在 [6] 中进行了介绍。

稀疏矩阵的最小特征值

        此示例说明如何求稀疏矩阵的最小特征值和特征向量。在 L 形二维域中的 65×65 网格中设置五点拉普拉斯差分算子。
L = numgrid( 'L' ,65);
A = delsq(L);
        确定非零元素的阶数和数量。
size(A)
ans = 1×2
2945 2945
nnz(A)
ans = 14473
        A 是阶数为 2945 且包含 14,473 个非零元素的矩阵。计算最小特征值和特征向量。
[v,d] = eigs(A,1, 'smallestabs' );
        在相应的网格点上分布特征向量的分量,并生成结果的等高线图。
L(L>0) = full(v(L(L>0)));
x = -1:1/32:1;
contour(x,x,L,15)
axis square

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/869149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GDB 函数调用栈管理

栈的调用关系:后进先出 1、bt:backtrace 查看栈回溯信息 #0号栈桢表示正在执行的函数,在栈的最顶部。 2、frame n 切换栈桢 3、info f n 查看栈桢信息 4、直接调用函数 格式 p 函数名(参数) 或者 call 函数名(参数)(gdb) p get_time_stam…

GCC的inline内敛函数

GCC(GNU Compiler Collection)是一个广泛使用的编译器套件,它支持多种编程语言,包括C和C。GCC提供了一些优化特性,其中之一是内联函数(inline functions)。 内联函数是一种编译器优化技术&…

Xilinx DDR3学习总结——4、添加读写功能

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Xilinx DDR3学习总结——4、添加读写功能 前言APP端口读写测试 前言 前面modelsim已经仿真成功了了DDR3的初始化,但其他端口都设置成了0,现在就需要对…

【Spring Boot】夺名连环问(持续更新ing)

Spring的了解与特性 简单介绍:快速开发Spring项目的脚手架。简化Spring应用的初始搭建以及开发过程。 特性 提供了很多内置的Starter结合自动配置,对主流框架的无配置集成、开箱即用。即不需要自己去引入很多依赖。 并且管理了常用的第三方依赖的版本&…

DAY20

题目一 一个字符串 最少分隔几个部分 让它全都是回文字符串 做一个dp[][]数组 dp[i][j] 表示i....j位置上的字符串是否为回文字符串 依赖于dp[i1][j-1] 也就是左边界缩一个格子 右边界缩一个格子 basecase 对角线 dp[i][i]只有一个字符 必为回文 最后一列 倒数第二行的格子…

SpringBoot案例-部门管理-修改

目录 前言 查看页面原型,明确需求 页面原型 需求 阅读接口文件 思路分析 功能接口开发 控制层(Controller类) 业务层(Service类) 业务类 业务实现类 持久层(Mapper类) 接口测试 前…

网络编程小项目-tftp下载

tftp下载模型 TFTP通信过程总结 服务器在69号端口等待客户端的请求服务器若批准此请求,则使用 临时端口 与客户端进行通信。每个数据包的编号都有变化(从1开始)每个数据包都要得到ACK的确认,如果出现超时,则需要重新发…

Ubuntu 连接海康智能相机步骤(亲测,成功读码)

ubuntu20.04下连接海康智能相机 Ubuntu 连接海康智能相机步骤(亲测,已成功读码)输出的结果 Ubuntu 连接海康智能相机步骤(亲测,已成功读码) (就是按照海康的提供的步骤和源码连接相机,流水账) 安装Ubuntu20.04安装gcc和g,IDmvs只…

746.使用最小花费爬楼梯

class Solution {public int minCostClimbingStairs(int[] cost) {int[] dp new int[cost.length];dp[0] cost[0];dp[1] cost[1];for(int i2;i<cost.length;i){dp[i] Math.min(dp[i-1],dp[i-2])cost[i];}return Math.min(dp[cost.length-1],dp[cost.length-2]);} } 经典…

你知道什么是电商私域吗?

电商私域是当前电子商务领域中的一个热门概念&#xff0c;它指的是电商平台和商家之间建立起的用户亲密关系&#xff0c;通过运用品牌内容和数据等方式&#xff0c;通过私域流量的运营和管理&#xff0c;实现用户精细化运营和增长。 在过去&#xff0c;电商平台主要依赖于流量…

Delphi7通过VB6之COM对象调用FreeBASIC写的DLL功能

VB6写ActiveX COM组件比较方便&#xff0c;不仅PowerBASIC与VB6兼容性好&#xff0c;Delphi7与VB6兼容性也不错&#xff0c;但二者与FreeBASIC兼容性在字符串处理上差距比较大&#xff0c;FreeBASIC是C化的语言&#xff0c;可直接使用C指令。下面还是以实现MKI/CVI, MKL/CVL, M…

LinuxC编程——进程间通信(一)(管道)

目录 一、Linux平台通信方式发展史二、进程间通信方式⭐⭐⭐三、无名管道3.1 特点⭐⭐⭐3.2 函数pipe3.3 注意事项⭐⭐⭐3.4 练习 四、有名管道4.1 特点⭐⭐⭐4.2 函数 mkfifo4.3 注意事项⭐⭐4.4 练习 五、无名管道与有名管道对比⭐⭐ 复杂的编程环境通常使用多个相关的进程来…

【周末闲谈】人工智能热潮下的AIGC到底指的是什么?

生成式人工智能AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;是人工智能1.0时代进入2.0时代的重要标志。 个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一…

HTML5 基础标签

目录 前言 标题标签 段落标签 换行标签和水平线标签 文本格式化标签 图像标签 超链接标签 多媒体标签 列表标签 无序列表 有序列表 表格 合并单元格 表单 无语义的布局标签 字符实体 前言 当今互联网时代&#xff0c;网页是我们获取信息、交流和展示自己的重要渠…

【SpringBoot学习笔记】04. Thymeleaf模板引擎

模板引擎 所有的html元素都可以被thymeleaf替换接管 th:元素名 templates下的只能通过Controller来跳转&#xff0c;templates前后端分离&#xff0c;需要模板引擎thymeleaf支持 模板引擎的作用就是我们来写一个页面模板&#xff0c;比如有些值呢&#xff0c;是动态的&#x…

Leetcode-每日一题【剑指 Offer 27. 二叉树的镜像】

题目 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 4 / \ 2 7 / \ / \ 1 3 6 9 镜像输出&#xff1a; 4 / \ 7 2 / \ / \ 9 6 3 1 示例 1&#xff1a; 输入&#xff1a;root [4,2,…

实验二十六、RC桥式正弦波振荡电路参数选择

一、题目 电路如图1所示。利用 Multisim 分析下列问题&#xff1a; &#xff08;1&#xff09;选择合适的 R f R_f Rf​ 和稳压管&#xff0c;使电路产生正弦波振荡&#xff0c;并观察起振过程&#xff1b; &#xff08;2&#xff09;调整电路参数&#xff0c;使输出电压峰值…

2. 获取自己CSDN文章列表并按质量分由小到大排序(文章质量分、博客质量分、博文质量分)(阿里云API认证)

文章目录 写在前面步骤打开CSDN质量分页面粘贴查询文章url按F12打开调试工具&#xff0c;点击Network&#xff0c;点击清空按钮点击查询是调了这个接口https://bizapi.csdn.net/trends/api/v1/get-article-score用postman测试调用这个接口&#xff08;不行&#xff0c;认证不通…

Linux 基础篇(六)sudo和添加信任用户

一、sudo 1.是什么&#xff1f; 给被信任的普通用户授权&#xff0c;让被信任的普通用户能执行root用户才能执行的命令的一个命令。 2.为什么&#xff1f; 很多时候我们要在被信任的普通用户下执行一些root用户才能执行的命令&#xff0c;如 yum… 所以需要有一个命令能给普通用…

阿里云预装LAMP应用导致MySQL不显示访问密码如何解决

&#x1f600;前言 本篇博文是关于阿里云云服务器ECS部署MySQL过程中出现的一下坑&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家…