通过为 bicg 提供用来计算 A*x 和 A'*x 的函数句柄(而非系数矩阵 A)来求解线性方程组。

创建一个非对称三对角矩阵。预览该矩阵。

A = gallery('wilk',21) + diag(ones(20,1),1)

A = 21×21

10 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 9 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 1 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 1 7 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 1 6 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 5 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 1 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 1 3 2 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 1 2 2 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 1 2 0 0 0 0 0 0 0 0 0 0

由于此三对角矩阵有特殊的结构,您可以用函数句柄来表示 A*x 运算。当 A 乘以向量时,所得向量中的大多数元素为零。结果中的非零元素对应于 A 的非零三对角元素。

表达式 Ax 变为:

Ax=[1020⋯⋯01920⋮01⋱20⋮010⋱⋱⋮0⋱1⋱0⋮⋱⋱⋱20⋯⋯0110][x1x2x3⋮⋮x21]=[10x1+2x2x1+9x2+2x3⋮⋮x19+9x20+2x21x20+10x21]。

结果向量可以写为三个向量的和:

Ax=[10x1+2x2x1+9x2+2x3⋮⋮x19+9x20+2x21x20+10x21]=[0x1x2⋮x20]+[10x19x2⋮9x2010x21]+2⋅[x2x3⋮x210]。

同样,ATx 的表达式变为:

ATx=[1010⋯⋯02910⋮02⋱10⋮020⋱⋱⋮0⋱1⋱0⋮⋱⋱⋱10⋯⋯0210][x1x2x3⋮⋮x21]=[10x1+x22x1+9x2+x3⋮⋮2x19+9x20+x212x20+10x21]。

ATx=[10x1+x22x1+9x2+x3⋮⋮2x19+9x20+x212x20+10x21]=2⋅[0x1x2⋮x20]+[10x19x2⋮9x2010x21]+[x2x3⋮x210]。

在 MATLAB® 中,编写一个函数来创建这些向量并将它们相加,根据标志输入给出 A*x 或 A'*x 的值:

function y = afun(x,flag)

if strcmp(flag,'notransp') % Compute A*x

y = [0; x(1:20)] ...

+ [(10:-1:0)'; (1:10)'].*x ...

+ 2*[x(2:end); 0];

elseif strcmp(flag,'transp') % Compute A'*x

y = 2*[0; x(1:20)] ...

+ [(10:-1:0)'; (1:10)'].*x ...

+ [x(2:end); 0];

end

end

(该函数作为局部函数保存在示例的末尾。)

现在,通过为 bicg 提供用于计算 A*x 和 A'*x 的函数句柄,求解线性方程组 Ax=b。使用容差 1e-6 和 25 次迭代。指定 b 为 A 的行总和,使得 x 的实际解是由 1 组成的向量。

b = full(sum(A,2));

tol = 1e-6;

maxit = 25;

x1 = bicg(@afun,b,tol,maxit)

bicg converged at iteration 19 to a solution with relative residual 4.8e-07.

x1 = 21×1

1.0000

1.0000

1.0000

1.0000

1.0000

1.0000

1.0000

1.0000

1.0000

1.0000

局部函数

function y = afun(x,flag)

if strcmp(flag,'notransp') % Compute A*x

y = [0; x(1:20)] ...

+ [(10:-1:0)'; (1:10)'].*x ...

+ 2*[x(2:end); 0];

elseif strcmp(flag,'transp') % Compute A'*x

y = 2*[0; x(1:20)] ...

+ [(10:-1:0)'; (1:10)'].*x ...

+ [x(2:end); 0];

end

end

matlab 共轭,求解线性方程组 - 双共轭梯度法相关推荐

  1. 基于MATLAB的求解线性方程组(附完整代码和例题)

    目录 前言 一. 直接求解:矩阵除法 例题1 例题2 例题3 二. 直接求解:判断求解 2.1 m=n且rank(A)=rank(C)=n 2.2 rank(A)=rank(C)=r<> ...

  2. 共轭梯度下降法matlab,用matlab实现最速下降法,牛顿法和共轭梯度法求解实例

    用matlab实现最速下降法,牛顿法和共轭梯度法求解实例 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验的题目和要求 1.所属 ...

  3. Matlab求解线性方程组(一)共轭梯度法

    一,算法原理  共轭梯度法可以看作是特殊的迭代法,有迭代法的格式,即首先给出x(0),再由迭代格式 x(k+1)=x(k)+αkd(k){{x}^{(k+1)}}={{x}^{(k)}}+{{\alp ...

  4. MATLAB求解线性方程组的八种方法

    MATLAB求解线性方程组的八种方法 求解线性方程分为两种方法–直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seid ...

  5. 共轭梯度法求解线性方程组

    function [k,x]=Conjugate_gradient(A,b,x0,esp) %% 参数说明% 采用共轭梯度算法求解线性方程组 % 输入参数% A为线性方程组系数矩阵 % b为线性方程组 ...

  6. [Matlab]求解线性方程组

    转自:http://silencethinking.blog.163.com/blog/static/911490562008928105813169/ AX=B或XA=B 在MATLAB中,求解线性 ...

  7. 共轭梯度法求解线性方程组Ax=b(附代码)

    共轭梯度法求解线性方程组:Ax=b 数值分析老师给的作业,写出来代码平时分满分.简单勿喷,hhhh 原理 CG求解线性方程组的原理大家翻一翻数值分析的课本即可,此处不哔哔直接上matlab代码 代码 ...

  8. matlab用高斯消元法解线性方程组,用matlab利用高斯消元法求解线性方程组

    用matlab利用高斯消元法求解线性方程组Tag内容描述: 1.用C语言编写软件完成以下任务:请用高斯列主元消元法解下列线性方程组:方法说明(以4阶为例):第1步消元在增广矩阵(A,b)第一列中找到绝 ...

  9. MATLAB基础教程(6)——使用matlab求解线性方程组

    目录 今日任务: 一般方程: 方程组(目前仅讨论方程个数和未知数个数一样的情况): 额外知识 咦,咋跑题了 左除和右除 今日总结: 今日任务: 在数学中经常遇见的一个问题就是方程求解,特别是线性代数中 ...

最新文章

  1. 访问者模式的java语言_Java 设计模式 之 访问者模式
  2. 联想用u盘重装系统步骤_联想笔记本重装win10系统教程
  3. 委员建议开辟多种科研资助模式,呼唤“科研悬赏制”
  4. 爬虫好学吗python-python爬虫容易学吗
  5. SharePoint 2013 APP 开发示例 系列
  6. linux centos7修改默认启动的内核(升级及切换内核)
  7. Linux学习之系统编程篇:编写一个守护进程
  8. [WorldWind学习]5.相机对象
  9. 仿照七牛云图片处理类实现的C#帮助类
  10. linux重定向串口打印到telnet
  11. python怎么读取excel-python怎么从excel中读取数据?
  12. LeetCode_88、合并两个数组(python)
  13. Burp Suite CA证书下载及导入教程
  14. 【Java基础】Java网络编程基础
  15. 研发人员的特质_9个有效开发人员的人格特质
  16. jQuery——遍历DOM元素的后代元素
  17. 站点类型、tdk布局和采集规则
  18. 一个基于HTML的可定制轮盘——帮你告别选择困难症
  19. Kotlin学习(6)-类和对象之类成员介绍
  20. 票据OCR扫描仪-助力财务智能化

热门文章

  1. 【运维心得】你不知道,运维也要写代码(3)
  2. 在excel中如何筛选重复数据_Excel中12招筛选使用大全,小白也能秒变高手
  3. 漂亮特殊字体可复制_特殊字体生成器 漂亮特殊字体可复制
  4. AUTOSAR 网络管理NM
  5. DOSBox+MASM,汇编语言环境搭建
  6. Excel忽略0值求平均分,将某一列分类后求平均值
  7. r语言中which的使用_大数据分析R语言RStudio使用教程
  8. STM32实现基于I2C的AHT20温湿度采集
  9. nexmo 验证码的使用
  10. 微信小程序制作——获取用户信息