matlab 求解 Ax=B 时所用算法

本文介绍Matlab中使用AB求解线性方程组的方法,包括当A为方阵和非方阵的情况。对于方阵,直接求解Ax=B;对于非方阵,则求最小二乘解。
x = A\B;
x = mldivide(A, B);

matlab 在这里的求解与严格的数学意义是不同的,

  • 如果 A 接近奇异,matlab 仍会给出合理的结果,但也会提示警告信息;
  • 如果 A 为方阵,如果解存在的话,x = A\B 的解就是 Ax=B(代入就会成立)
  • 如果 A 不为方阵,返回的是 Ax=B 的最小二乘解;

1. A 和 B 是 full 型矩阵(一般的矩阵)


这里写图片描述

2. A 为 sparse 型矩阵


这里写图片描述

转载于:https://www.cnblogs.com/mtcnn/p/9422721.html

Lanczos算法是一种用于近似大型稀疏矩阵特征值和向量的数值方法,在解决线性方程组 `Ax = b` 中尤其有用,特别是在处理大规模系统。在MATLAB中,你可以使用内置函数`eig`结合自定义循环来实现Lanczos算法。以下是一个简单的示例,展示了如何通过迭代生成Krylov子空间来逼近矩阵A的一些最小特征对: ```Matlab function [V, D] = lanczos(A, b, k) % A: 稀疏矩阵 % b: 目标向量 % k: Lanczos过程所需的迭代次数 % 初始化 m = length(b); [V, D] = zeros(k, m), % 初始化向量矩阵和对角矩阵 v0 = b / norm(b), % 首个向量 H = v0 * v0'; % 初始内积矩阵 alpha = zeros(1, k); % Lanczos系数 ii = 1; % 当前索引 for i = 1:k-1 Av_i = A*v0; % 计算Av_1至Av_(i-1) % 更新向量和内积矩阵 beta = norm(Av_i - H * v0); v_new = (Av_i - H * v0) / beta; V(:, ii+1:i+1) = [V(:, ii:i), v_new]; % 添加新的列到向量矩阵 alpha(ii+1:i+1) = [alpha(ii:i), beta]; % 更新Lanczos系数 if i < m % 更新内积矩阵 H = H + v_new * v_new'; end v0 = v_new; % 更新当前向量 ii = ii + 1; % 进行下一次迭代 end % 使用Householder反射将V的最后一列正交化 [V, R] = qr(V(:, 1:end-1)); % QR分解 D = V' * H * V; % 构建对角矩阵 D = diag(diag(D)); % 只保留对角元素 V(:, end) = R * V(:, end); % 正交化最后一列 end % 示例用法 [A, b] = ...; % 实际的矩阵和向量数据 [V, D] = lanczos(A, b, 10); % 运行Lanczos算法,获取近似的特征向量和值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值