matlab 共轭,求解线性方程组 - 双共轭梯度法
通过为 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 共轭,求解线性方程组 - 双共轭梯度法相关推荐
- 基于MATLAB的求解线性方程组(附完整代码和例题)
目录 前言 一. 直接求解:矩阵除法 例题1 例题2 例题3 二. 直接求解:判断求解 2.1 m=n且rank(A)=rank(C)=n 2.2 rank(A)=rank(C)=r<> ...
- 共轭梯度下降法matlab,用matlab实现最速下降法,牛顿法和共轭梯度法求解实例
用matlab实现最速下降法,牛顿法和共轭梯度法求解实例 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验的题目和要求 1.所属 ...
- Matlab求解线性方程组(一)共轭梯度法
一,算法原理 共轭梯度法可以看作是特殊的迭代法,有迭代法的格式,即首先给出x(0),再由迭代格式 x(k+1)=x(k)+αkd(k){{x}^{(k+1)}}={{x}^{(k)}}+{{\alp ...
- MATLAB求解线性方程组的八种方法
MATLAB求解线性方程组的八种方法 求解线性方程分为两种方法–直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seid ...
- 共轭梯度法求解线性方程组
function [k,x]=Conjugate_gradient(A,b,x0,esp) %% 参数说明% 采用共轭梯度算法求解线性方程组 % 输入参数% A为线性方程组系数矩阵 % b为线性方程组 ...
- [Matlab]求解线性方程组
转自:http://silencethinking.blog.163.com/blog/static/911490562008928105813169/ AX=B或XA=B 在MATLAB中,求解线性 ...
- 共轭梯度法求解线性方程组Ax=b(附代码)
共轭梯度法求解线性方程组:Ax=b 数值分析老师给的作业,写出来代码平时分满分.简单勿喷,hhhh 原理 CG求解线性方程组的原理大家翻一翻数值分析的课本即可,此处不哔哔直接上matlab代码 代码 ...
- matlab用高斯消元法解线性方程组,用matlab利用高斯消元法求解线性方程组
用matlab利用高斯消元法求解线性方程组Tag内容描述: 1.用C语言编写软件完成以下任务:请用高斯列主元消元法解下列线性方程组:方法说明(以4阶为例):第1步消元在增广矩阵(A,b)第一列中找到绝 ...
- MATLAB基础教程(6)——使用matlab求解线性方程组
目录 今日任务: 一般方程: 方程组(目前仅讨论方程个数和未知数个数一样的情况): 额外知识 咦,咋跑题了 左除和右除 今日总结: 今日任务: 在数学中经常遇见的一个问题就是方程求解,特别是线性代数中 ...
最新文章
- 访问者模式的java语言_Java 设计模式 之 访问者模式
- 联想用u盘重装系统步骤_联想笔记本重装win10系统教程
- 委员建议开辟多种科研资助模式,呼唤“科研悬赏制”
- 爬虫好学吗python-python爬虫容易学吗
- SharePoint 2013 APP 开发示例 系列
- linux centos7修改默认启动的内核(升级及切换内核)
- Linux学习之系统编程篇:编写一个守护进程
- [WorldWind学习]5.相机对象
- 仿照七牛云图片处理类实现的C#帮助类
- linux重定向串口打印到telnet
- python怎么读取excel-python怎么从excel中读取数据?
- LeetCode_88、合并两个数组(python)
- Burp Suite CA证书下载及导入教程
- 【Java基础】Java网络编程基础
- 研发人员的特质_9个有效开发人员的人格特质
- jQuery——遍历DOM元素的后代元素
- 站点类型、tdk布局和采集规则
- 一个基于HTML的可定制轮盘——帮你告别选择困难症
- Kotlin学习(6)-类和对象之类成员介绍
- 票据OCR扫描仪-助力财务智能化