《矩阵分析》代码Ⅲ——Doolittle分解、Crout分解、Cholesky分解求解线性方程组matlab实现

2023-11-14

《矩阵分析》代码Ⅲ——Doolittle分解、Crout分解、Cholesky分解求解线性方程组matlab实现

注意:
三种分解方法求解过程都会用到三角矩阵的回代法。小编之前已经写过三角矩阵回代法程序!!关于代码可参考:https://blog.csdn.net/m0_46498899/article/details/109223781

(一)Doolittle分解

1.1 算法思想

n阶线性方程组系数矩阵A可以分解成单位下三角矩阵L和上三角矩阵R,即
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 matlab实现

function [L,R,X]=Doolittle(A,B)
%%%输入n*n的方阵A,
%%%通过Doolittle分解;
%%%输出单位下三角矩阵L和上三角矩阵R。
[n,~]=size(A);
L=eye(n);
R=zeros(n);
for k=1:n
    for j=k:n
        R(k,j)=A(k,j)-L(k,1:k-1)*R(1:k-1,j);
    end
    for i=k+1:n
        L(i,k)=(A(i,k)-L(i,1:k-1)*R(1:k-1,k))/R(k,k);
    end
end
y=b_Back_subtitution(L,B);   %下三角回代法函数;
X=a_Back_subtitution(R,y);   %上三角回代法函数;

1.3 实例验证

命令行输入:

在这里插入图片描述

运行结果:

在这里插入图片描述

(二) Crout分解

2.1 算法思想

Doolittle分解是将矩阵A分解为单位下三角矩阵L和上三角矩阵R的乘积;而Crout分解则是将矩阵A分解为下三角矩阵L和单位上三角矩阵的乘积。具体方法与Doolittle分解类似,这里不加赘述,不明白的可以自行百度。下面直接给出matlab代码。

2.2 matlab实现

function [L,R,X]=Crout(A,B)
%%%输入n*n的方阵A,
%%%通过Crout分解;
%%%输出下三角矩阵L和单位上三角矩阵R。
Y=A\B;
[n,~]=size(A);
L=zeros(n);
R=eye(n);
for k=1:n
    for i=k:n
        L(i,k)=A(i,k)-L(i,1:k-1)*R(1:k-1,k);
    end
    for j=k+1:n
        R(k,j)=(A(k,j)-L(k,1:k-1)*R(1:k-1,j))/L(k,k);
    end

end
y=b_Back_subtitution(L,B);   %%调用下三角回代法;
X=a_Back_subtitution(R,y);   %%调用上三角回代法;

2.3 实例验证

命令行输入:

在这里插入图片描述

运行结果:

在这里插入图片描述

(三)正定矩阵的平方根(Cholesky)分解

3.1算法思想

在这里插入图片描述
在这里插入图片描述

3.2 matlab实现

function [L,X]=Cholesky(A,B)
%%%输入n*n的正定矩阵A和常数项列向量B,
%%%通过Cholesky分解;
%%%输出下三角矩阵L,和方程的解X。
[n,~]=size(A);
L=zeros(n);
for j=1:n
    for i=j:n
        if i==j
        L(j,j)=(A(j,j)-L(j,1:j-1)*(L(j,1:j-1))')^(1/2);
        elseif i>j
        L(i,j)=(A(i,j)-L(i,1:j-1)*(L(j,1:j-1))')/L(j,j);
        end
    end
    
end
y=b_Back_subtitution(L,B);  %%调用下三角回代法函数;
X=a_Back_subtitution(L',y);  %%调用上三角回代法函数。

3.3 实例验证

命令行输入:

在这里插入图片描述

运行结果:

在这里插入图片描述

(四)正定矩阵的改进平方根分解

4.1算法思想

在这里插入图片描述

4.2 matlab实现

function [L,D0,X]=Cholesky_ed(A,B)
%%%输入n*n的正定矩阵A和常数项列向量B,
%%%通过Cholesky分解;
%%%输出下三角矩阵L,和方程的解X。
%%%{diag(A,k)函数:如果A是列向量,就将列向量放在矩阵的第K条对角线上;
                  ...如果A是矩阵,则将矩阵的第K条对角线是的元素提取并按列输出,
                  ...K=0表示主对角线}
[n,~]=size(A);
L=eye(n);
S=zeros(n);
for j=1:n
    S(j,j)=A(j,j)-S(j,1:j-1)*L(j,1:j-1)';
    for i=j+1:n
        S(i,j)=A(i,j)-S(i,1:j-1)*L(j,1:j-1)';
        L(i,j)=S(i,j)/S(j,j);
    end
end
D0=diag(S);             
y=b_Back_subtitution(L,B);
y=y./D0;
X=a_Back_subtitution(L',y);

4.3实例验证

命令行输入:

在这里插入图片描述

运行结果:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《矩阵分析》代码Ⅲ——Doolittle分解、Crout分解、Cholesky分解求解线性方程组matlab实现 的相关文章

  • 使用 python 在网络上部署 matlab 应用程序

    您好 我想使用 python 在网络上部署 matlab 应用程序 有没有办法做到这一点 我已按照数学工作网站上的文档将我的应用程序转换为 jar 文件 java 类 有人能指出我前进的正确方向吗 事实上 您的 Matlab 代码打包为 J
  • 查找数组中元素之间的平均差异的有效方法

    希望标题不会让人困惑 通过例子来展示很简单 我有一个像这样的行向量 1 5 6 我想找到每个元素之间的平均差异 此示例中的差异为 4 和 1 因此平均值为 2 5 这是一个小例子 我的行向量可能非常大 我是 MatLab 新手 那么有没有一
  • 在 MATLAB 中将数据拟合到 B 样条

    我正在尝试估计矩阵形式的时间序列数据中的缺失值 列代表时间点 即现在 我想将矩阵的每一行拟合到 B 样条曲线 并用它来估计缺失值 我可以使用 MATLAB 将数据拟合到普通样条曲线 但我完全陷入尝试找出如何拟合数据以创建 B 样条曲线的困境
  • 将单元格转换为双精度

    gt gt C 1 2 CF 2 C 1 2 CF 2 gt gt whos C Name Size Bytes Class Attributes C 2x2 478 cell 我怎样才能转换C into double以便 gt gt C
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • Matlab 编辑器不使用 emacs 快捷方式

    Is there some way I can make the matlab integrated editor not use emacs shortcut but use more normal shortcuts such that
  • 在 C/C++ 中调用 MATLAB API

    我刚刚从某处听说 对于数值计算 MATLAB 确实提供了一些用户友好的 API 如果你在 C C 代码中调用这些 API 你可以显着加快计算速度 但我在MATLAB文档中没有找到这样的信息 例如http www mathworks com
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • python 正弦和余弦精度

    如何提高Python正弦和余弦精度 例如 我想使用以下代码 只需计算随机复向量 x 的 y cos acos x import numpy as np N 100000 x np zeros N 1j np zeros N for k in
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • Matlab Solve():未给出所有解决方案

    我试图找到两条曲线的交点 syms x y g x 20 exp x 30 3 5 1 sol x sol y solve x 22 3097 2 y 16 2497 2 25 y g x x y Real true 它只提供一种解决方案
  • 如何在Matlab中将世界坐标转换为像素索引

    我有 512x512x313 体积的 dicom 图像 并且我有一个以世界坐标表示的点 57 7475 63 4184 83 1515 我如何在 Matlab 中获得该世界坐标的相应像素坐标 我不想戳破你的幻想 但你所要求的是不可能的 我能
  • 为什么 MATLAB 在打印大量 (.png) 图形时速度会变慢?

    我正在将大量数字打印为 png 文件 每个图都是数据矩阵中的一列图 我获取 png 文件并将它们串在一起形成动画 我的问题是 前几百张图像打印得很快 但创建每个新图形的时间却迅速增加 从前几百个 png 文件的约 0 2 秒到第 800 个
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • getappdata 在 MATLAB 中返回空矩阵

    我有一段代码 我在其中使用setappdata然后我使用以下方式调用数据getappdata即使它不为空 它也会返回一个空矩阵 我的一段简化代码如下 function edit1 Callback hObject eventdata han
  • 在 MATLAB 中模拟 C++ 模板

    我试图找出创建 C 模板或 Java 通用对象的替代方案的最佳方法 出于多种不同的原因 我过去曾多次想这样做 但现在我想做的是为几个相关的类创建 saveobj 和 loadobj 函数 我的想法是 我想要一组通用的例程来创建默认结构 然后
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 在matlab中不使用for循环检查数组中的成员资格

    我想简化这段代码 使其无需 for 循环即可工作 for i 1 N for j 1 N if ismember j A PID i i TFP i j PID i i end end end 其中A是一个包含一些标签的矩阵 我之前存储的T
  • Ilnumerics Ilpanel 在 winform 中编译成 dll 并加载到 matlab 时不激活

    我想将 Visual studio 2012 中用 C 编写的 winform 编译为 dll 然后将其加载到 matlab 2013a 中 然后 我想使用 matlab net 接口与 winform 进行交互 侦听其事件并通过一组预定义
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and

随机推荐