MATLAB(五)在线性代数中的应用

MATLAB在线性代数中的应用

(一)向量组的线性相关性

求列向量组A的一个最大线性无关组,可用命令rref(A)将A化成行最简形,其中单位向量对应的列向量即为最大线性无关组所含向量,其他列向量的坐标即为其对应向量用最大线性无关组线性表示的系数。

例1. 求下列矩阵列向量组的一个最大无关组。

程序如下:

format rat   %有理分数的显示格式
a = [1 2 -1 0 2;-2 4 2 6 -6;2 -1 0 2 3;3 3 3 3 4];
b = rref(a)
format   %恢复到短小数的显示格式

结果为:

b =1              0              0              0             11/6     0              1              0              0              0       0              0              1              0             -1/6     0              0              0              1             -1/3  

记矩阵A的五个列向量依次为a1、a2、a3、a4、a5,则a1、a2、a3、a4是列向量组的一个最大无关组,且有

a5=\frac{11}{6}\times a1-\frac{1}{6}\times a3-\frac{1}{3}\times a4

例2.设

验证a1、a2、a3是R^{3}的一个基,并把b1、b2用这个基线性表示。

程序如下:

clc,clear;
format rat
a = [2 2 -1;2 -1 2;-1 2 2];
b = [1 4;0 3;-4 2];
c = rref([a,b])
format   %恢复到短小数的显示格式

结果为:

c =1              0              0              2/3            4/3     0              1              0             -2/3            1       0              0              1             -1              2/3   

说明a1、a2、a3是R^{3}的一个基,且有b1=\frac{2}{3}\times a1-\frac{2}{3}\times a2-a3; b2=\frac{4}{3}\times a1+a2+\frac{2}{3}\times a3

(二)齐次线性方程组

在Matlab中,函数null用来求解零空间,即满足Ax = 0的解空间,实际上是求出解空间的一组基(基础解系)。格式如下:

z = null(A)  %z的列向量为方程组的正交规范基,满足zTz=E
z = null(A,'r')  %z的列向量是方程Ax=0的有理基

例3. 求方程组的通解

程序如下:

clc,clear;
format rat
a = [1 2 2 1;2 1 -2 -2;1 -1 -4 -3];
b = null(a,'r')
syms k1 k2
x = k1*b(:,1)+k2*b(:,2)   %写出方程组的通解

基础解系和通解分别为:

b =2              5/3     -2             -4/3     1              0       0              1       
x =2*k1 + (5*k2)/3- 2*k1 - (4*k2)/3k1k2

(三)非齐次线性方程组

Matlab中解非齐次线性方程组可以使用‘\’,虽然表面上只是一个简单的符号,而它的内部却包含许多自适应算法,如对超定方程(无解)用最小二乘法,对欠定方程(多解)它将给出范数最小的一个解。

另外求解欠定方程组(多解)可以使用求矩阵A的行最简形命令rref(A),求出所有的基础解系。

例4.求超定方程组

程序如下:

clc,clear;
format rat
a = [1 1 0;1 0 1;1 1 1;1 2 -1];
b = [1;2;0;-1];
x1 = a\b    %这里\和pinv是等价的
x2 = pinv(a)*b

结果为:

x1 =17/6     -13/6     -2/3     
x2 =17/6     -13/6     -2/3     

求得最小二乘解为

x1=\frac{17}{6};x2=-\frac{13}{6};x3=-\frac{2}{3}

例5.求解方程组

程序如下:

clc,clear;
format rat
a = [1 -1 -1 1 0;1 -1 1 -3 1;1 -1 -2 3  -1/2];
b = rref(a)
format  %恢复到短小数的显示格式

结果为:

b =1             -1              0             -1              1/2     0              0              1             -2              1/2     0              0              0              0              0 

所以,方程组有解,并有

因而方程组的通解为

求解非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。因此,步骤为:

  • 第一步,判断Ax=b是否有解,若有解则进行第二步;
  • 第二步,求Ax=b的一个特解;
  • 第三步,求Ax=0的通解;
  • 第四步,写出Ax=b的通解。

(四)相似矩阵及二次型

有时候我们需要精确的特征值和特征向量,就必须利用Matlab的符号运算功能,在Matlab中创建符号矩阵和创建数值矩阵的形式很相似,只不过要用到符号定义函数sym。下面介绍shi使用次函数创建符号矩阵的几种形式。

1.  使用sym函数直接创建符号矩阵

此方法和直接创建数值矩阵的方法几乎完全相同,矩阵元素可以是符号表达式,各符号表达式的长度可以不同,矩阵元素之间可用逗号或空格分隔。例如:

clc,clear;
x = sym('[a+sin(d),b;1/c,d]');
y = det(x)

结果为:

y =
(a*c*d - b + c*d*sin(d))/c

2.  将数值矩阵转化为符号矩阵

在Matlab中,数值矩阵不能直接参与符号运算,必须先转化为符号矩阵。例如:

clc,clear;
a = [2/3, sqrt(2);3,1]
b = sym(a)

结果为:

a =0.666666666666667   1.4142135623730953.000000000000000   1.000000000000000
b =
[ 2/3, 2^(1/2)]
[   3,       1]

3.  符号矩阵的索引和修改

Matlab的符号矩阵索引和修改同数值矩阵的索引和修改完全相同。

b(2,2) = 'log(2)'
b =
[ 2/3, 2^(1/2)]
[   3,  log(2)]

例6. 求一个正交变换x = Py, 把二次型

f=2x_{1}x_{2}+2x_{1}x_{3}-2x_{1}x_{4}-2x_{2}x_{3}+2x_{2}x_{4}+2x_{3}x_{4}

化为标准型。

二次型矩阵为

程序如下:

clc,clear;
A = [0, 1, 1, -1;1, 0, -1, 1;1, -1, 0, 1;-1, 1, 1, 0];
[P, D] = eig(A)

结果为:

P =-0.5000    0.2887    0.7887    0.21130.5000   -0.2887    0.2113    0.78870.5000   -0.2887    0.5774   -0.5774-0.5000   -0.8660         0         0
D =-3.0000         0         0         00    1.0000         0         00         0    1.0000         00         0         0    1.0000

P就是所求的正交矩阵,使得P^{T}AP=D,x = Py,其中x = [x_{1},x_{2},x_{3},x_{4}]^{T},y = [y_{1},y_{2},y_{3},y_{4}]^{T},

化简后的二次型为g = -3y_{1}^{2}+y_{2}^{2}+y_{3}^{2}+y_{4}^{2}

例7.  判别二次型f=2x_{1}^{2}+4x_{2}^{2}+5x_{3}^{2}-4x_{1}x_{2}的正定性,并求正交变换把二次型化che成标准型。

程序如下:

clc,clear;
a = [2 -2 0;-2 4 0;0 0 5];
b = eig(a)
if all(b>0)fprintf('二次型正定\n');
elsefprintf('二次型非正定\n');
end
[c,d]=eig(a)

结果为:

b =0.76395.00005.2361
二次型正定
c =-0.8507         0   -0.5257-0.5257         0    0.85070    1.0000         0
d =0.7639         0         00    5.0000         00         0    5.2361

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++一位的字符数字转数字

char c4; //1,2,3,.....9 int num0; num int(c - 0);’0’的ASC码是48,‘1’,‘2’......的ASC码分别为49,50...... 和0相减即为对应的数字

关于无穷大量的选择

在解题时候,通常有遇到设置为无穷大的情况。这时候通常用0x7fffffff来设置,他是计算机32位整数最大数,相当于INT_MAX.但是在很多时候这样设置并不会是最佳的,还可能导致bug,这是由于我们有的时候希望无穷大无穷大无穷大&#xff0…

全球市值最大公司的巨变:20年,已是沧海桑田

来源: 资本实验室三十年河东,三十年河西。而商业的世界,变化来得更为迅猛、激烈。就比如当我们比较1999到2019年间的全球市值最大公司,并回看二十年时,惊觉已是沧海桑田。如果以更短的五年为一个观察周期,则…

python+OpenCV图像处理(六)图像平滑与滤波

图像平滑与滤波 运用它,首先就要了解它,什么是平滑滤波? 平滑滤波是低频增强的空间域滤波技术。它的目的有两类:一类是模糊;另一类是消除噪音。空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的…

pytorch每次迭代训练前都重新对数据集进行采样形成平衡数据集

对于不平衡数据集的训练通常有两种方法: 一种是先用数据平衡的方法形成平衡数据集之后用于每一轮的训练,此时每轮训练的数据集是不变的,这一方法在pytorch的实现比较简单,即先构建好平衡数据集train_set,然后构建trai…

Delphi中动态调用DLL的方法

Delphi中动态调用dll的方法如下&#xff1a; function CallFunc(dllname, funcname: string; const param: array of const): DWORD; varhLib: THandle;pFunc: Pointer;intSize: Integer; beginResult : 0;hLib : LoadLibrary(PChar(dllname));if hLib <> 0 then beginpF…

语音助手再次敲响隐私保护警钟

来源&#xff1a; 中国科学报智能手机内置的语音助手已成为人们生活中的亲密伙伴&#xff0c;大家习惯于让它完成报时、查询天气等日常任务甚至与它聊天解闷。然而&#xff0c;近期多家科技公司被曝光以智能语音助手录制用户谈话&#xff0c;再通过人工对语音做标注和反馈&…

大数据深度解析NLP文本摘要技术:定义、应用与PyTorch实战

文章目录 大数据深度解析NLP文本摘要技术&#xff1a;定义、应用与PyTorch实战1. 概述1.1 什么是文本摘要&#xff1f;1.2 为什么需要文本摘要&#xff1f; 2. 发展历程2.1 早期技术2.2 统计方法的崛起2.3 深度学习的应用2.4 文本摘要的演变趋势 3. 主要任务3.1 单文档摘要3.2 …

python+OpenCV图像处理(七)图像的形态学处理

图像的形态学处理 数学形态学&#xff08;Mathematical morphology&#xff09;是一门 建立在格论和拓扑学基础之上的图像分析学科&#xff0c;是数学形态学图像处理的基本理论。其基本的运算包括&#xff1a;腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、…

pandas取某一索引的数据

pandas.DataFrame.take(index) 返回给定位置索引中的元素。注意上面的index是元素的实际位置 举个例子&#xff1a; myList [[a, 10, 1.1],[b, 20, 2.2],[c, 30, 3.3],[d, 40, 4.4]] df1 pd.DataFrame(data myList) print(df1.take([2,3])) 输出&#xff1a; c 30 3.…

站立会议08

一、会议细节 时间   2014-4-27 21&#xff1a;10~21:40 地点   基教102 记录人   王岸城 二&#xff0c;会议记录 姓名今天你做了什么明天你要做什么今天遇到了什么问题王岸城记事本删除记事本修改无法使用数据库 苏月 实现登录和注册的连接 学习数据库 连接数据库信息…

【人工智能】机器人的未来发展:从工业自动化到知识自动化

来源&#xff1a;王飞跃博客【导读】智能时代的核心技术将是知识自动化&#xff0c;因此必须从一开始就加快、加强以软件形态为主的知识机器人的研发与应用&#xff0c;尽快形成软件和物理形态平行互动的新型机器人系统&#xff0c;并以此为突破口&#xff0c;引发下一代智能机…

python+OpenCV图像处理(八)边缘检测

边缘检测 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。边缘检测是特征提取中的一个研究领域。 图像边缘检测大幅度地减少了数据量&#xff0c;并且剔除了…

os.path.join拼接错误

csv_dir r"D:\test" print(os.path.join(csv_dir, r\test.csv)) 如上述代码所示&#xff0c;此时拼接后的路径为“D:\a.csv”&#xff0c;不符合预期&#xff0c;那是因为os.path.join第二个参数开头不能为斜杠和反斜杠&#xff0c;改为如下代码之后正确&#xff1…

bzoj 4551[Tjoi2016Heoi2016]树

这题可以用并查集做&#xff0c;一开始统计一下记录每个点被标记了几次&#xff0c;除了被标记过的点外&#xff0c;其他节点都与其父亲所在集合合并&#xff0c;然后倒着做&#xff0c;做的时候如果有节点标记次数变为了0&#xff0c;则将其与其父亲合并。 代码 1 #include<…

python+OpenCV图像处理(九)图像金字塔

图像金字塔 图像金字塔是图像多尺度表达的一种&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩&#xff0c;一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低&#xff0c;且来源于同一张原始图的图像集合。其通…

ImportError: cannot import name ‘joblib‘

原因&#xff1a; 安装的Scikit-learn版本太高&#xff0c;我安装的版本是0.23.1 解决方法&#xff1a; 需要将Scikit-learn版本降到0.21以下 pip uninstall joblib scikit-learn sklearn pip install Scikit-learn0.20.4 或者直接安装joblib&#xff1a; pip install j…

3位物理学家获基础物理学特别突破奖

Peter van Nieuwenhuizen、Sergio Ferrara和Dan Freedman&#xff08;从左至右&#xff09;来源&#xff1a;中国科学报超引力理论是一个试图统一所有自然力的理论&#xff0c;在被提出40多年后&#xff0c;它是否能真实描述这个世界仍然悬而未决。尽管如此&#xff0c;该理论的…

python+OpenCV图像处理(十)霍夫变换简单图形检测

霍夫变换 霍夫变换&#xff08;Hough Transform&#xff09;是图像处理中从图像中识别几何形状的基本方法之一&#xff0c;应用很广泛&#xff0c;也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状&#xff08;如&#xff1a;直线、圆等&#xff09;。最基…

Windows下安装scikit-learn

在安装sklearn前&#xff0c;首先确保安装了Numpy、Scipy和matplotlib 安装Numpy&#xff1a; 首先到https://pypi.org/project/numpy/#files下载安装包 注意文件的版本&#xff0c;如“numpy-1.19.1-cp36-cp36m-win_amd64.whl”表示该文件适用于widows操作系统下64位的Pyth…