网站数据统计工具,python 做网站教程,网站没有icp备案怎么访问,网站做的好不好乘幂法
一种求实矩阵 A {A} A 的按模最大的特征值#xff0c;及其对应的特征向量 x i {x_i} xi 的方法#xff0c;只能求一个。特别适合于大型稀疏矩阵。 一个矩阵的特征值和特征向量可以通过矩阵不断乘以一个初始向量得到。 每次乘完之后要规范化#xff0c;防止上溢或…乘幂法
一种求实矩阵 A {A} A 的按模最大的特征值及其对应的特征向量 x i {x_i} xi 的方法只能求一个。特别适合于大型稀疏矩阵。 一个矩阵的特征值和特征向量可以通过矩阵不断乘以一个初始向量得到。 每次乘完之后要规范化防止上溢或下溢。规范化可以用各种范数。 要保证矩阵最大特征值只有一个有 n {n} n 个线性无关的特征向量。 有多个相同特征值时求得的特征向量可以近似看成排第一个的最大特征值的特征向量。 步骤 1. 求初始向量 u 0 模最大元素的编号 i d , 初始特征值 β 0 u 0 ( i d ) , 求归一化后的初始向量 y 0 2. 迭代 , k 0 , 1 , ⋯ u k 1 A y k β k 1 u k 1 ( i d k ) y k 1 u k 1 ∣ ∣ u k 1 ∣ ∣ ∞ i d k 1 u k 1 模最大元素的编号 3. 判断是否满足 β k 1 − β k eps , 特征值 β k 1 \begin{align*}1. 求初始向量u_0模最大元素的编号 id \,\,,\,\, 初始特征值 \beta_0u_0(id) \,\,,\,\, 求归一化后的初始向量y_0 \\ \\ 2. 迭代 \,\,,\,\, k0,1, \cdots \\ \\ u_{k1}Ay_k \\ \\ \beta_{k1}u_{k1}(id_k) \\ \\ y_{k1} \frac{u_{k1}}{||u_{k1}||_\infty} \\ \\ id_{k1}u_{k1}模最大元素的编号 \\ \\ 3. 判断是否满足 \,\,\, \beta_{k1}- \beta_k \text{eps} \,\,,\,\, 特征值 \beta_{k1} \end{align*} 1.2.3.求初始向量u0模最大元素的编号id,初始特征值β0u0(id),求归一化后的初始向量y0迭代,k0,1,⋯uk1Aykβk1uk1(idk)yk1∣∣uk1∣∣∞uk1idk1uk1模最大元素的编号判断是否满足βk1−βkeps,特征值βk1 [!example]- A [ 1 2 1 3 ] , u 0 [ 0.6 0.8 ] A \begin{bmatrix} 1 2 \\ 1 3 \end{bmatrix} \,\,,\,\, u_0 \begin{bmatrix} 0.6\\0.8 \end{bmatrix} A[1123],u0[0.60.8] 解 y 0 u 0 ∣ ∣ u 0 ∣ ∣ ∞ [ 0.75 1.00 ] y_0 \frac{u_0}{||u_0||_\infty} \begin{bmatrix} 0.75\\ 1.00 \end{bmatrix} y0∣∣u0∣∣∞u0[0.751.00] u 1 A y 0 [ 2.75 3.75 ] u_1Ay_0 \begin{bmatrix} 2.75\\3.75 \end{bmatrix} u1Ay0[2.753.75] 在 y 0 {y_0} y0 中 1 {1} 1 在下面所以近似最大特征值 β 1 3.75 \beta_1 3.75 β13.75 特征向量 y 1 u 1 ∣ ∣ u 1 ∣ ∣ ∞ [ 0.7333 1.0000 ] y_1 \frac{u_1}{||u_1||_\infty} \begin{bmatrix} 0.7333\\ 1.0000 \end{bmatrix} y1∣∣u1∣∣∞u1[0.73331.0000] 乘幂法matlab实现
%% 乘幂法例子
A [12 6 -6; 6 16 2; -6 2 16];
u0 [1.0, 0.5, -0.5];
format long
[beta1, i] powerMethod(A, u0, 1e-6, 10)%% 乘幂法求模最大特征值和特征向量
% 输入矩阵、初始迭代向量、精度、最大迭代次数
% 输出特征值、无穷范数归一化后的特征向量、迭代次数
function [lbd, y1, i] powerMethod(A, u0, eps, max_iter)[u0norm, id] max(abs(u0)); % 取无穷范数和其所在行beta0 u0(id);y0 u0/ u0norm;for i 1:max_iteru1 A*y0;beta1 u1(id);[u1norm, id] max(abs(u1));y1 u1/u1norm;if abs(beta1 - beta0)epslbd beta1;break;endy0 y1; % 当前变成过去beta0 beta1;end
end