matlab的sub,matlab中的通用置换指令subs()用法

2023-05-16

MATLAB中的subs函数是一种通用的置换指令,它的功能是在符号表达式和矩阵中进行符号替换/置换操作。此外它还提供了一种在符号计算和数值计算之间转换的一种途径。下面相机介绍一下如何进行置换和如何进行数值计算与符号计算的转换。

1. sub指令的功能语法:subs能够在符号表达式和符号矩阵中进行置换操作,下面我们就介绍一下它的调用语法规则:

R = subs(S)         %将表达式S中的所有变量用调用的函数或MATLAB workspace中获得的值进行置换,将置换后的表达式赋给R;

R = subs(S, new)     %用new置换表达式S中的自变量后在赋给R;

R = subs(S, old, new)  %用new置换表达式中的old,然后将置换完的表达式赋给R。

对于英语学的比较好的人员,可以通过help subs搜索matlab自带的帮助信息进一步学习。下面是用help subs搜索到的subs帮助信息。

2.产生待置换的符号函数

为方便下一步进行符号-符号、符号-数字的置换这一步先生成符号函数,以供后面的置换操作进行调用。需要注意的是在进行新的计算之前先用“clear”清除一下内存空间。生成的符号函数为f = a*sin(x)+b,具体结果如下图所示:

2bd0132766f7405e1b5038d6b6a79df8.png

3.符号-符号置换

在这一步,我们先用符号表达式置换符号表达式,演示一下subs的具体功能。上一步生成的符号函数f中有sin(x),这一步我们先用log(y)将其置换。其置换指令为:f1=subs(f,sin(x),'log(y)'),其置换结果如下图所示:

82ba6c4bfcfe2f7d0d90f6019d16d7c3.png

4.符号-数字置换:单个变量被双精度数字置换

从这一步开始就提供了一种符号-数字之间的转换,需要注意的是,当单个变量被双精度数字置换后,其结果仍然是符号对象属性。这一点我们可以用class指令查看结果的类型。这一步的置换代码指令:f2 = subs(f,a,2.886),置换结果如下图显示:

188ac6c354011ba916940fdaf07b661d.png

5.用数字置换所有变量(含符号数字)

自这一步中我们将所有变量被数字(至少一个符号数字,例如π(在matlab中表示为pi))置换,这个时候我们来看一下结果是否仍为符号对象型的。置换指令代码:f3 = subs(f,{a,b,x},{2,5,sym('pi/3')})。注意这一步里面我们用到了胞元数组。上面指令的意思是:用2置换a,用5置换b,用sym('pi/3')置换x。下图是运算结果:

b758348dce91646557a96a97d51e9047.png

6.用数字置换所有变量(全为双精度数值数字)

从上一步可以看出,当进行置换操作时,如果置换数字中含有符号数字,那么计算结果类型也为符号sym类型。那如果全为全为双精度数值数字,那计算结果会是什么类型呢?符号?还是数值?下面我们探究一下就知道了。置换操作的指令代码为:f4 = subs(f,{a,b,x},{2,5,pi/3})。注意这次的pi/3为数值型的数字而非符号型的。具体置换和上一步一样,下面我们看一下具体的结果,如下图所示:

d56d7f571db94d97c35e40a2ae6ea728.png

7.单个变量被数值数组置换

在上一步中我们可以得出结论:当所有变量被双精度数值数字置换时,其计算结果也为数值型(double)。现在我们看一下另外一种情况,即一个变量被双精度数组置换,此时计算结果的类型将是什么结果?这里我们就用数组[0,pi/1,pi]来置换变量x,再查看结果类型。其计算代码为:f5=subs(f,x,[0,pi/2,pi]),计算结果如下图所示:

4922aa98e9271030c08d8316897efaae.png

8.所有变量被数值数字置换(有一个是数组)

上面一步的结果从图上很容易就可以看出来了。在这一次计算中,我们将x用数值数组来进行置换,其他变量用单个具体数值来置换查看结果,我们还可以画出置换后函数的图形来看一下。为简便起见我们可以先生成数组存放在一个变量中,然后在置换时调用。具体的置换指令为:f6=subs(f,{a,b,x},{1.98,3.45,t}),其中t为数组,我们可以在置换前用“t=(0:pi/10:4*pi)”指令来生成。计算结果如下图:

cf613f2baaf21ceb5241d3479f9963be.png

下面画出所有变量被数值数字置换(有一个是数组)后结果函数的图形(用代码“plot(t,f6)”画出):

184794b6d724fcd8a8f3180baa6a45e8.png

9.两次置换获得双精度数组

上一步我们只用了一次置换,并且画出了置换结果的图形。下面我们进行两次置换,观察结果和上一步中的一次置换有什么具体的不同。同样我们也画出两次置换结果的图形。具体代码就不写了,可以在图中看。具体置换代码及计算结果如下图所示:

719d44ac2b1672fb5e685afdb3268a6c.png

10.一次置换和两次置换的结果图

我们在一张图里面用两个子图画出一次置换和两次置换的结果图,看看他们有什么不同?画出的结果图如下:从图上我们可以看出,一次置换只能产生一条曲线,而两次置换却能产生一次列的曲线,在本次计算的两次置换中共产生了16条曲线。多次置换的这一结果也是subs置换指令在符号表达式双精度数值计算转换中的特殊功用。

e1e2c341c38602391aa0f7d9d51a453f.png

注意:subs的第三个输入量可以是“字符串”(第三步)。

MATLAB

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

matlab的sub,matlab中的通用置换指令subs()用法 的相关文章

  • 如何使用神经网络保存 Sift 特征向量进行分类

    SIFT 特征的 Matlab 实现发现于http www cs ubc ca lowe keypoints http www cs ubc ca lowe keypoints 在 stackoverflow 的帮助下 我想将功能保存到 m
  • 如何在 MATLAB 的 for 循环中读取多个图像?

    我已将结果分段放在一个文件夹中 这些需要在 for 循环中读取并在循环中进一步处理 我尝试阅读如下 for i 1 10 file name dir strcat C Users adminp Desktop dinosaurs im im
  • 通过 h5py 将 matlab v7.3 文件读入 python numpy 数组列表

    我知道以前已经有人问过这个问题 但在我看来 仍然没有答案可以解释正在发生的事情 并且不适用于我的情况 我有一个 matlab v7 3 文件 其结构如下 gt rank lt 1x454 cell gt gt each element is
  • 有没有办法在 MATLAB 中查看 pcode 文件 (.p) 的源代码?

    有没有办法在 MATLAB 中打开 pcode 文件 p 如果 开放 是指edit 那么当然不是 pcode 中的 p 代表 受保护 其主要设计目标是在保护其源代码的同时部署功能组件 如果 开放 是指run 那么当然是的 引用手册 http
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • FFT 的功率谱密度

    我有一段代码可以获取部分信号的 FFT 现在我正在尝试获取 PSD Fs 44100 cj sqrt 1 T 6 dt 1 Fs left test 1 right test 2 time 45 interval 636 w range t
  • 对多个属性使用一种设置方法 MATLAB

    我有几个属性基本上使用相同的属性set method classdef MyClass properties A B end methods function mc MyClass a b Constructor mc A a mc B b
  • Matlab:掩码/创建一个知道其原点且具有一定半径的圆形 roi

    只是一个简单的问题 我有一张图像 并且提取了某个点 特征 我知道每个帧中该点的坐标 说 x1 和 y1 我需要一个圆形 ROI 形式 该点在图像上具有我选择的半径 我尝试了 impoly 和 roipoly 当我知道图像中的要点时 不知道如
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • MATLAB 中时间戳过滤器的优化 - 处理非常大的数据集

    我正在 MATLAB 中编写一个程序 必须使用 MATLAB 并且不能真正使用 MEX 来过滤大量数据 我需要实现的过滤器之一要求我将时间戳向量与其他时间戳不会出现的已知 不良 时间列表进行比较 一个典型的时间戳向量有大约 2 000 00
  • 将自动生成的 Matlab 文档导出为 html

    我想为我开发的 Matlab 工具箱生成完整的帮助 我已经看到如何显示自定义文档 http www mathworks fr fr help matlab matlab prog display custom documentation h
  • 在另一列中添加具有特定条件的一列,如 excel 的 sumif

    我有一个像这样的矩阵 A 1 2 2 3 3 4 4 5 5 6 6 8 7 9 8 5 9 4 现在我想添加第二列 条件是如果 limit 0 interval 3 且 limit limit interval 或者换句话说 当第 1 列
  • 如何在 Matlab 中使用谷歌翻译?

    我正在编写一个程序 使用 Matlab 列出电影字幕文件中的所有唯一单词 现在我有一个独特的单词列表 我想将其翻译成我的语言并在观看电影之前了解其含义 有谁知道如何在 Matlab 中使用 Google Translate 以便完成我的脚本
  • MATLAB - 如何将子图一起缩放?

    我在一张图中有多个子图 每个图的 X 轴是相同的变量 时间 每个图上的 Y 轴都不同 无论是它所代表的内容还是数据的大小 我想要一种同时放大所有图的时间尺度的方法 理想情况下 可以在其中一张图上使用矩形缩放工具 并让其他图相应地更改其 X
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • MATLAB 教程中的 SIFT 实现

    我正在寻找 MATLAB 中的一些基本 SIFT 实现 我需要从第一原则来写它 另外 我正在寻找一些可以解释程序中发生的事情的内容 Vedali 的代码和 David Lowe 的代码超出了我的理解范围 如果您是 Matlab 用户 您一定
  • MATLAB:具有复数的 printmat

    我想使用 MATLAB 的printmat显示带有标签的矩阵 但这不适用于复数 N 5 x rand N 1 y rand N 1 z x 1i y printmat x y z fftdemo N 1 2 3 4 5 x y x iy O
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL

随机推荐