矩阵的乘法与利用矩阵求解线性方程组

2023-05-16

    矩阵的乘法定义:假定A=\left ( a_{ij} \right )是一个m \times s的矩阵,B=\left (b_{ij} \right )是一个s \times n的矩阵,那么规定,矩阵A与矩阵B的乘积是一个m \times n的矩阵C=\left ( c_{ij} \right ),其中,c_{ij} = a_{i1}b_{1j}+a_{i2}b_{2j}+\cdots +a_{is}b_{sj}=\sum\limits^s\limits_{k=1} a_{ik}b_{kj} (i=1,2,...,m; j=1,2,...,n)

    单看公式,可能理解有困难,我们直接上示例:

    矩阵乘法示例1:

\begin{pmatrix} 1 & 2 &3 \end{pmatrix}_{1\times 3}\times \begin{pmatrix} 4\\ 5 \\ 6 \end{pmatrix}_{3\times 1} = 1{\times}4+2{\times}5+3{\times}6 = 32

    矩阵乘法示例2:

\begin{pmatrix} 1\\ 2 \\ 3 \end{pmatrix}_{3\times1}{\times}\begin{pmatrix} 4 & 5 &6 \end{pmatrix}_{1\times3}=\begin{pmatrix} 1{\times}4 & 1{\times}5 & 1{\times}6 \\ 2{\times}4 &2{\times}5 &2{\times}6 \\ 3{\times}4 &3{\times}5 &3{\times}6 \end{pmatrix}_{3{\times}3}=\begin{pmatrix} 4 &5 &6 \\ 8& 10 &12 \\ 12& 15 &18 \end{pmatrix}_{3{\times}3}

    矩阵乘法示例3:

\begin{pmatrix} -2 &4 \\ 1& -2 \end{pmatrix}_{2\times2}{\times}\begin{pmatrix} 2 &4 \\ -3& -6 \end{pmatrix}_{2\times2}=\begin{pmatrix} -2{\times}2+4{\times}-3 &-2{\times}4+4{\times}-6 \\ 1{\times}2+-2{\times}-3 & 1{\times}4+-2{\times}-6 \end{pmatrix}_{2\times2}=\begin{pmatrix} -16 &-32 \\ 8 & 16 \end{pmatrix}_{2\times2}

    矩阵乘法示例4: 

\begin{pmatrix} 1 & 0 &0 \\ 0&2 &0 \\ 0&0 &3 \end{pmatrix}{\times}\begin{pmatrix} 1&1 &1 \\ 1 &1 &1 \\ 1& 1 &1 \end{pmatrix}=\begin{pmatrix} 1 & 1 &1 \\ 2& 2 &2 \\ 3& 3 & 3 \end{pmatrix}

    以上矩阵能够做乘法是因为他们的行和列正好满足:

    A矩阵的列数=B矩阵的行数。

     有一些矩阵就不满足这些条件,他们就不能做乘法,比如:

    A=\begin{pmatrix} 1 &1 \end{pmatrix} , B=\begin{pmatrix} 3 &3 \\ 3&3 \\ 3& 3 \end{pmatrix}

    他们不满足上面的条件,2!=3。所以他们不能做乘法。

    上面的示例,我们通过python编程,使用numpy库实现:

import numpy as np
A = np.array([[1,2,3]])
B = np.array([[4],[5],[6]])
C = np.matmul(A,B)
print(C)
print()
A = np.array([[1],[2],[3]])
B = np.array([[4,5,6]])
C = np.matmul(A,B)
print(C)
print()
A = np.array([[-2,4],[1,-2]])
B = np.array([[2,4],[-3,-6]])
C = np.matmul(A,B)
print(C)
print()
A = np.array([[1,0,0],[0,2,0],[0,0,3]])
B = np.array([[1,1,1],[1,1,1],[1,1,1]])
C = np.matmul(A,B)
print(C)

     运行,打印结果:

=====================================

    下面介绍矩阵变换在解线性方程组中的应用。

    假定有如下方程组:

\left\{\begin{matrix} x+2y+3z=3 \\ 4x+5y+6z=3 \\ 7x+8y+10z=4 \end{matrix}\right.

   我们可以转换如下的矩阵:

  \begin{bmatrix} 1 & 2 &3 \\ 4 & 5&6 \\ 7 & 8 &10 \end{bmatrix}\begin{bmatrix} x\\ y\\ z \end{bmatrix}=\begin{bmatrix} 3\\ 3\\ 4 \end{bmatrix}

   其中,\begin{bmatrix} 1 & 2 &3 \\ 4& 5 &6 \\ 7& 8 &10 \end{bmatrix}是系数矩阵,英文名为coefficient matrix。\begin{bmatrix} 3\\ 3\\ 4 \end{bmatrix}为常数项矩阵。

  有时候,我们会把系数矩阵和常数项矩阵合并。

  \begin{bmatrix} 1 &2 &3 &3 \\ 4 &5 &6 &3 \\ 7& 8 &10 &4 \end{bmatrix},这个矩阵叫增广矩阵,英文名为augmented matrix 。

    这种矩阵,直接计算未知量,有一些困难,我们需要人为作一些操作,将它化简,有一种叫做高斯约尔当消元法,英文名为Gauss Jordan。

    这种消元法其实就是我们最早解方程用的把方程进行系数相乘,相加,相减的办法。

    可以考虑先消除x,这里先用第一行分别 乘以 4,7然后与第二行,第三行相减。

\left\{\begin{matrix} 1x+2y+3z=3 \\ 0+3y+6z=9\\ 0+6y+11z=17 \end{matrix}\right.

    这个表达式里面可以使用第二行乘以 2 与 第三行作减法,消除y。

\left\{\begin{matrix} 1x+2y+3z=3\\ 0+3y+6z=9\\ 0+0+z=1 \end{matrix}\right.

    其实到这里,z已经解出来了,我们继续把z带入第二行,求出y=1,最后带入第一行,x=-2。

    上面的过程,貌似跟矩阵没什么关系,都是方程组基本变换。

    这个方程,用python语言结合numpy,scipy库可以计算出结果。

import numpy as np
from scipy.linalg import solve

A = np.array([[1,2,3],[4,5,6],[7,8,10]])
B = np.array([3,3,4])
C = solve(A,B)
print(C)

    运行结果截图:

    方程组也有无数解、无解的情况,无数解其实就是方程组最后化简,两条直线合并成了一条直线。无解就是两条直线不相交。关于无解其实就是最后化简会出现0=X 的情况,这里X是非0的任意值,这种情况是不成立的,比如0=1,所以无解。 

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

矩阵的乘法与利用矩阵求解线性方程组 的相关文章

  • mac系统安装win10双系统

    一个月前 xff0c 为了在家里学习单片机 xff0c 在mac book air系统基础上 xff0c 安装了win10 xff0c 搞了一个双系统 在安装之前 xff0c 看了很多资料 xff0c 基本上提到两点 xff0c 一个是准备
  • 谐振电路应用之LED交替闪烁

    谐振电路主要利用三极管特性 xff0c 让电路持续交替出现高低电平的现象 xff0c 根据这个特点 xff0c 可以制作LED交替闪烁的效果 谐振电路图如下所示 xff1a 根据这个图 xff0c 可以很方便的利用三极管 xff0c 电阻
  • Python基础-TypeError:takes 2 positional arguments but 3 were given

    Error xff1a 今天写一段简单类定义python代码所遇到报错问题 xff1a TypeError drive takes 2 positional arguments but 3 were given 代码如下 class Car
  • node使用netcat依赖库做socket编程

    node编程里面 xff0c 默认有一个net库可以做socket编程 xff0c 这里要说的是netcat这个库 xff0c 思路都是一样的 xff0c 甚至代码逻辑都很像 netcat可以支持tcp udp xff0c 同时很方便的构造
  • 荔枝派nano初体验-windows写入镜像到TF卡启动

    荔枝派nano是一个很小的系统 xff0c 搭载全志F1C100S芯片 xff0c 具有ddr内存 xff0c 支持tf flash启动 本人在了解荔枝派的特点之后 xff0c 在淘宝上找到了一个57块钱的荔枝派nano xff0c 一般价
  • linux下socket编程中setsockopt的作用

    如题所示 xff0c 在linux进行socket编程的时候 xff0c 一般而言 xff0c socket bind listen三步曲之后 xff0c 就开始接收客户端请求 xff0c 然后实现收发数据 如下所示的代码 xff0c 是没
  • 悲观锁与乐观锁以及如何用java语言和mysql实现

    悲观锁 xff0c 乐观锁跟字面意思一样 xff0c 悲观锁认为在多线程场景下 xff0c 不一定能够获取资源 xff0c 所以要先获取锁 xff0c 再做相关业务 xff0c 保证不会发生冲突 乐观锁认为多线程场景下 xff0c 不会发生
  • opencv结合微信二维码识别功能实现图片二维码识别

    opencv本身有二维码识别功能 xff0c 但是识别效果不是很好 xff0c 它对二维码图片要求较高 xff0c 虽然可以有图片处理 xff0c 甚至抠出二维码区域 xff0c 但是整体识别与微信二维码识别功能还是有差距的 微信二维码识别
  • opencv for java给图片添加水印中文问题

    opencv提供的给图片添加文字的方法Imgproc putText 可以给图片添加文字 xff0c 最后类似一个添加水印的效果 xff0c 但是这个方法对中文支持不好 xff0c 在没有字体支持的情况下 xff0c 默认中文显示 如下图所
  • springboot文件上传大小限制设置

    一般的web系统基本都会有文件上传功能 xff0c 文件上传必然涉及到一个问题 xff0c 就是文件大小 xff0c 太大的文件不仅传输速度慢 xff0c 而且对服务器压力巨大 xff0c 后期的下载和保存都是一种考验 所以有了文件大小限制
  • springboot打包后资源文件读取问题

    springboot项目打包之后 xff0c 将所有依赖都打入jar包 xff0c 同时也将系统中要使用的一些资源文件也会打进来 xff0c 之后运行这个jar包 xff0c 里面包含的资源文件不能再像文件系统那样直接在classpath下
  • navicat导入外部数据到mysql中文乱码以及日期格式问题

    最近在使用navicat导入外部数据到mysql中总结了以下几个问题 xff1a 1 中文乱码 xff0c 这个是因为数据在csv或者excel中格式是ANSI 格式 比如csv的数据内容如下 xff1a 在导入向导这里就乱码了 xff1a
  • opencv for java实现人脸检测

    opencv是一个很优秀的图像处理框架 xff0c 可以通过源码编译 xff0c 让他支持java开发 xff0c 这里如果在windows下开发 xff0c 可以直接使用opencv 453 jar和opencv java452 dll动
  • 网络测试工具netperf

    一般我们进行网络测试 xff0c 主要是测试网络的连通性 网络带宽 网络响应时间等 常用的工具包括ping traceroute telnet ftp等 如测试网络连通性 xff0c 可以使用ping xff0c traceroute xf
  • mybatis使用collection嵌套查询

    在开发中 xff0c 可能会遇到一对多的关系 xff0c 这个时候 xff0c 一条sql语句就难以胜任这个任务了 只能先执行一条sql xff0c 然后根据返回的结果 xff0c 再做一次sql关联查询 xff0c 这个时候 xff0c
  • java通过流读取图片做base64编码

    在web页面上 xff0c 显示图片 xff0c 一般是给出图片地址 xff0c 然后以url的方式显示 xff0c 但是有一些特殊情况 xff0c 如果我们的图片保存在ftp服务器上 xff0c 不能外部轻易访问 xff0c 但是可以通过
  • tesseract-ocr+java实现图片文字识别

    ocr是Optical Character Recognition的简写 xff0c 就是光学字符识别技术 主要是对包含文本资料的图片进行识别 xff0c 获取文本信息的技术 目前tesseract ocr这个工具可以很方便的在Window
  • mysql使用join做update操纵与使用join做查询时出现重复记录的问题

    在实际处理数据过程中 xff0c 有一些数据可能会从别的地方导入过来 xff0c 两个表有关联 xff0c 但是一个表中的某一列缺失 xff0c 如果要补全 xff0c 可以利用另一个表来做填充 这里就是今天的第一个问题 xff0c 使用u
  • mac系统上通过源码编译安装opencv for java

    本人在Mac系统上尝试下载opencv源码 xff0c 然后通过cmake make make install命令编译安装 xff0c 都失败 xff0c 各种依赖缺失报错 最后通过brew install build from sourc
  • vmware安装苹果虚拟机卡在苹果图标位置不动

    计算机环境 xff1a vmware16 2 xff0c win11 xff0c macos 12 monterey xff0c macos majave 如题所示 xff0c 在vmware里面安装苹果虚拟机 xff0c 通过unlock

随机推荐

  • docker搭建fastdfs环境

    fastdfs是一个开源的分布式文件系统 xff0c 在实际使用中 xff0c 通过源码编译安装过程非常复杂 xff0c 但是通过docker快速构建却非常容易 下面介绍通过docker安装fastdfs的方法 docker镜像的选择也挺重
  • springboot项目结合fastdfs做文件上传

    前面一篇博客介绍通过docker构建fastdfs xff0c 并且在storage容器中通过fdfs upload file命令成功上传了一个文件 xff0c 最后通过http ip 8888 group path访问到了文件 xff0c
  • Kernel panic - not syncing: IO-APIC + timer doesn‘t work解决办法

    如题所示 xff0c 我在使用qemu system x86 64模拟器启动linux内核与busybox根文件系统组成的虚拟机的时候报错 xff0c 系统无法正常开启 xff0c 运行截图如下 xff1a 这里说的是apic和时钟无法工作
  • ubuntu源码编译busybox与linux内核并使用qemu-system-x86_64模拟启动

    busybox 1 35 0 https busybox net downloads busybox 1 35 0 tar bz2 sudo apt install make gcc libncurses dev 编译配置 xff1a 在b
  • Postgre数据库用户权限总结

    1 故事起源 我们的项目使用了PG数据库 xff0c 在项目开发阶段 xff0c 为了省事偷懒 xff0c 直接将应用连接数据库的用户给了supperuser权限 xff0c 用起来简直不要太爽 随着开发进度接近中后期 xff0c 开始筹建
  • mvn install:install-file将本地jar安装到maven本地仓库

    有一些三方jar包是远程仓库中没有的 xff0c 我们在maven项目中 xff0c 可以通过指定本地jar的方式使用它 lt dependency gt lt groupId gt org lt groupId gt lt artifac
  • linux奇技淫巧

    杀死进程 杀死进程 xff0c 一般的做法 xff0c 我们先通过ps ef 结合grep 定位进程号 然后执行kill 9 PID 有人将这个操作简化 xff0c 通过一行命令就解决 1 找进程号 ps ef grep python3 g
  • [牛客网]OR63删除公共字符

    如题所示 xff0c 该算法描述如下 xff1a 描述 输入两个字符串 xff0c 从第一字符串中删除第二个字符串中所有的字符 例如 xff0c 输入 They are students 和 aeiou xff0c 则删除之后的第一个字符串
  • svg通过虚线画形状

    svg可以做很多事情 xff0c 如今和canvas在web开发中使用越来越多 默认svg画图 xff0c 如果是空白填充 xff0c 最后展示的形状线条是实线 今天介绍一个属性 xff0c 可以上画出的图形显示虚线 这个属性就是strok
  • 通过vue ui方式构建vue+electron项目

    以前我构建vue 43 electron项目都是使用一些模版比如webpack simulatedgreg electron vue等 xff0c 这些模版在github上 xff0c 有时候可能因为网络原因下载会慢一些 后来看到一些文章介
  • vue+echarts画甘特图

    vue项目中添加echarts xff0c 只需要增加echarts依赖 xff0c 然后在main js中引入echarts就可以使用了 1 npm install echarts save 2 修改main js import as e
  • mac系统下node版本管理工具n的安装与使用

    node版本管理 xff0c 在windows和linux下都叫nvm 在mac下 xff0c 更加简洁 xff0c 直接就是n xff0c 似乎容易让人产生怀疑 xff0c 这太简洁了 xff0c n可以表示很多意思啊 这就是mac系统独
  • python输出不换行与多行注释

    默认情况下 xff0c python输出打印方法print xff0c 每一次调用都会单独输出一行内容 xff0c 有些场景下面 xff0c 我们需要输出是连在一起的 xff0c 不用单行显示 这就需要对打印做设置 xff0c 参数是end
  • vue转electron项目以及使用fs报错:Module not found: Error: Can‘t resolve ‘fs‘ in解决办法

    前面写了一篇博客 xff0c 通过vue ui创建electron 43 vue项目 xff0c 其实关键的一步就是增加vue cli plugin electron builder插件依赖 这一步可以通过界面上添加 xff0c 也可以手动
  • python将图片转矩阵

    在机器学习手写数字识别案例中 xff0c 需要将手写数字图片转矩阵向量 其实转矩阵 xff0c 就需要根据图片上像素点来组成一个矩阵 xff0c 如果把图片看作一个 长 宽 的二维矩阵 xff0c 那么矩阵中的每个点的像素表示的数字组成一个
  • ant-design-vue中this.$confirm 确认框使用

    cancelService obj let self 61 this this confirm title 39 确认提示 39 content 96 是否确认取消服务 xff1f 96 okType 39 danger 39 onOk r
  • javascript数组排序

    javascript原生排序算法sort xff0c 如果不带排序函数 xff0c 那么就是默认按照升序排列 如果是数字类型就按照从小到大的顺序排列 xff0c 如果是字符串 xff0c 就按照字母顺序排列 Sorts an array i
  • electron项目打包之后显示空白页面以及发送http请求地址错误

    electron项目在开发阶段 xff0c 因为使用webpack脚手架 启用了webServer提供的http服务 xff0c 所以有路由功能 xff0c 当我们运行npm run electron serve的时候 xff0c 最后可以
  • mac系统electron项目打包出现:Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

    mac系统下 xff0c electron项目打包 xff0c 好像需要python可执行程序 xff0c 如果找不到就报这个错误 xff0c 而且python版本需要2 7版本 我的系统不知道怎么回事 xff0c 因为已经安装了pytho
  • 矩阵的乘法与利用矩阵求解线性方程组

    矩阵的乘法定义 xff1a 假定A 61 是一个m s的矩阵 xff0c B 61 是一个s n的矩阵 xff0c 那么规定 xff0c 矩阵A与矩阵B的乘积是一个m n的矩阵C 61 xff0c 其中 xff0c i 61 1 2 m j