matlab subspace函数 求解矩阵子空间的夹角(链接)

原作者一共发了7篇关于subspace函数实现的介绍,由于太长我就不复制到这来了,贴上链接,同学们感兴趣的自己去看吧。

转载:

  我觉得这是一个名不副实的函数,名为“子空间”,实际作用是求解两个子空间的夹角(Angle between   two subspace)。所谓两个子空间的夹角,对于不怎么接触矩阵理论的人,听起来可能有点费解。其实说简单一点,像空间几何中,两个向量的夹角,向量与平面的夹角,两个平面的夹角等都属于子空间夹角问题的范畴。只是这里的subspace函数能够求解任意维的两个子空间的夹角。不局限于三维空间。也就是说,subspace所使用的算法,是一种通用的算法。而像空间几何中使用的求两个向量夹角的方法,利用内积的特性,利用反余弦函数求解,并不能应用于向量和平面之间夹角的计算,所以不是通用的算法。



...剩下的在作者博客中自己找吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
空间迭代法可以用于求解线性对流方程,具体步骤如下: 1. 将线性对流方程 $u_t+au_x=0$ 转化为特征值问题 $Pu_{xx}=\lambda u_x$,其中 $P=I+aD$,$D$ 为二阶差分矩阵。 2. 初始化 $k$ 个线性无关的向量 $v_1,v_2,\ldots,v_k$。 3. 对于迭代次数 $i=1,2,\ldots$,计算 $k$ 维空间 $S_i=\operatorname{span}\{v_1,v_2,\ldots,v_k\}$。 4. 在空间 $S_i$ 中求解 $Pu_{xx}=\lambda u_x$,得到 $\lambda_{i,1},\lambda_{i,2},\ldots,\lambda_{i,k}$ 和 $u_{i,1},u_{i,2},\ldots,u_{i,k}$。 5. 通过 Rayleigh 商估计法来选取一个特征向量 $u_{i,j}$ 作为当前迭代结果,即 $u_{i,j}=\operatorname{argmin}_{u\in S_i}\frac{\|Pu_{xx}-\lambda_{i,j}u_x\|_2}{\|u\|_2}$。 6. 如果满足停止条件,则输出当前迭代结果 $u_{i,j}$;否则,更新向量 $v_1,v_2,\ldots,v_k$,然后跳转到第 3 步继续迭代。 以下是使用 MATLAB 实现空间迭代法求解线性对流方程的代码: ```matlab function u = subspace_iteration_solve_convection(a, L, N, T, k, tol, max_iter) % 输入:a——对流速度, % L——空间区间长度, % N——空间网格数, % T——时间总长度, % k——每次迭代计算的特征值和特征向量的个数, % tol——迭代精度,当两次迭代的特征向量差的二范数小于 tol 时,停止迭代, % max_iter——最大迭代次数 % 输出:u——线性对流方程的解向量 % 网格大小 h = L / N; % 时间步长 dt = h / abs(a) / 2; % 时间网格数 M = ceil(T / dt); % 二阶中心差分矩阵 D = toeplitz(sparse([1,1],[1,2],[-2,1]/h^2,1,N)); % 单位矩阵 I = speye(N); % 系数矩阵 P = I + a * dt * D; % 初始条件 x = linspace(0, L, N)'; u0 = exp(-100 * (x - L/2).^2); u = u0; v = rand(N, k); % 迭代计算 for iter = 1:max_iter v_old = v; for i = 1:k for j = 1:iter v(:, i) = P * v(:, i); v(:, i) = v(:, i) - v(:, 1:j-1) * (v(:, 1:j-1)' * v(:, i)); v(:, i) = v(:, i) / norm(v(:, i)); end end B = v' * P * v; [v, D] = eig(B); lambda = diag(D); for j = 1:k [~, index] = min(abs(lambda(j) - diag(v(:, 1:j)' * P * v(:, 1:j)))); u = v(:, 1:j) * v(index, 1:j)' * u; end if norm(v - v_old) < tol break; end end end ``` 其中,a 为对流速度,L 为空间区间长度,N 为空间网格数,T 为时间总长度,k 为每次迭代计算的特征值和特征向量的个数,tol 为迭代精度,max_iter 为最大迭代次数。函数输出线性对流方程的解向量 u。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值