符号对象是什么?符号对象是Matlab中一种特殊的数据类型, 其实质是“a data structure that stores a string representation of the symbol”, 即它存储的是字符串表示的符号表达式, 只是这些字符串对应的是数学运算法则。如果用whos 命令查询, 符号变量对应的类型显示的是“sym“, 这也是区分符号变量与数值变量的方法。操作这些对象的步骤, 先是Matlab利用Toolbox中的m文件,传递参数到Maple核心, Maple核心经过运算后将结果再传递回Matlab, 再由M文件将结果解释成为Matlab的通用格式。 如果只需要执行基本的符合运算, 那么只要掌握如何使用Matlab中有关symbolic运算的基本命令就可以了, 而要做复杂的工作, 建议学习下Maple。

定义符号对象变量

基本语句使用sym 或者 syms 语句可以直接定义符号变量.syms

syms主要作用是告诉Matlab你要将相关的变量定义为符号变量(因为在Matlab中, 变量不需事先定义即可使用, 但是默认的变量类型都是double型, 所以非Double变量在使用前要事先定义). 相关的语法:syms a;%定义a为符号变量, 从此a的操作都服从符号变量操作规则.

syms a b c; %同时定义多个符号变量

syms a b; f=a+b; %定义了a,b为符号类型后, f作为a+b的和, 也是符号类型, 在Matlab中显示的结果就是: “a+b”

sym

sym的作用比syms要广, 不但可以声明变量为符号类型, 还可以給符号变量赋特殊的值.a=sym('a'); %其效果等同于: syms a;

a=sym('alpha'); %将a定义为为符号变量, 其值为“alpha“, 注意: 如果alpha本身也是符号变量,

那么在表达式中a和alpha实质是一样的, 但是如果alpha本身的值发生改变,

a的值却不会随之改变(有点晕), 试试执行下面这些语句看看: syms alpha, a=sym('alpha'), f=a+alpha, alpha=2, a,

a=sym(2); %a被定义为符号变量, 同时赋值为2. 注意这个和数值的2有点不同. 它的运算法则是符号运算法则.

a=sym('2*x+3y'); %a被赋值为一个符号表达式, Matlab自动识别字符串中的符号变量(注意, 只有常规的符号才能被自动识别).

a=sym(3*x+3*y); %此处要求x, y二者事先已经被声明为符号变量, 否则出错, 本句的效果和上一句相同.

定义特殊类型的符号变量语法: syms a b c 类型; 或者 a=sym('a','类型');两种语句效果相同, 注意的是他们的区别在于sym中的类型一定要加单引号! 这里的类型可以是“real“, ”unreal“,”positive“。 这样定义的好处是, 如果定义a为positive类型, 那么在之后的计算中, a都只会被赋予正的值。 例如, 如果要解一个方程: a*a=1,那么给出的解就只有a=1, 而自动将 a<0的解都舍去。

转换数值为特定的格式如上面提到的可以将数值赋值给一个符号变量, 由于符号变量存储数值的方式与数值变量不同, 所以在这个赋值的过程中, 我们还可以指定符号数值的显示样式, 语法是: a=sym(数值,'格式类型'); 此处格式类型有如下各种:f, 符号浮点数的显示类型;r,有理数显示样式, 一般是分数显示,(此为默认的显示样式);e,科学计数法显示;d,所谓的精确显示, 它用十进制数值将这个数值的精确值表示出来。说这么多太不直观了, 只要运行一下下面的代码就弄清楚所有这些显示样式有什么不同了(注意: 计算机内部存储的数值是相同的,只是显示出的样子不同罢了):b=0.1;

a=sym(b) %默认显示样式, 类型为'r'

a=sym(b,'f') %浮点样式显示

a=sym(b,'e') %科学计数法

a=sym(b,'d') %内部精确值的十进制显示

建立符号矩阵建立符号矩阵有两种方法, 一种是直接由数值矩阵转换为符号矩阵: B=sym(A) %这里, A 为一个数值矩阵, B是转换得到的符号矩阵。 另外一种方法是由已定义的符号变量组成矩阵, 如: B=[a b c; b a c; c b a] %a, b, c已经用syms 或 sym定义成了符号变量。

定义符号函数如果只是定义一个抽象函数(abstract function)而不必过问其实际形式,

如f(x),那么只要fx=sym('f(x)'), 即可, 这个特性在傅立叶变换及拉普拉斯变换, z变换中很有用.

如果需要自定义一个Matlab中还没有的特殊的符号函数, 例如sinc(), 需要写一个m函数文件, 命名为"sinc.m", 将其放入"@sym"文件夹内.

要定义一个普通的有表达式的函数, 直接将其表达式赋值给符号变量就行了. 例如定义f=sin(x*y)/x; %其中x,y事先已被定义为符号变量.

Findsym--寻找表达式中的符号变量如果你不做编程, 这个东西作用不大. 它主要用于从一个字符串表达式或者一个符号表达式中找出里面都有那些符号变量. 例如: findsym('x*3+y*2'), 找出来的符号变量就是x, y.

符号变量的替换

语法: subs(符号表达式, 替换前的符号变量, 替换后的符号变量);

例子: syms a b; %定义a,b为符号变量;

f=a*a+2*a; %将f定义为含a符号变量的符号表达式.

f=subs(f,a,b); %f表达式中a都会被替换为b,现在f是: b*b+2*b

f=subs(f,b,2); %f中的b会被2代替, 由于现在 f中不存在其他的符号变量, 所以给出的是8这个数值结果; 如果f中还有其他符号变量, 此时f中的b会被换成2然后作符号运算得出新的符号表达式。

令人发指的一个特性是这里2的位置还可以用向量代替。例如: subs(f,b,[2 3]), 将分别对2,3作运算, 得到一个1*2的向量结果。

如果需要转换多个变量可以用大括号将他们括起来, 需要注意的是替换变量与被替换变量数量要相对应,

例如: subs(f,{a,b,c},{x,y,z});

matlab中符号对象的数据类型是,符号对象(Symbolic Object)的使用相关推荐

  1. matlab中double 和single数据类型的差别

    matlab中double 和single数据类型的差别 double数据类型占用8个字节,single数据类型占4个字节.所以用single会更快一些.(可以这么理解,就像你做8位数乘法跟做4位数乘 ...

  2. MATLAB中的微积分运算(数值符号)

    显然这个函数是单词differential(微分)的简写,用于计算微分.实际上准确来说计算的是差商. 如果输入一个长度为n的一维向量,则该函数将会返回长度为n-1的向量,向量的值是原向量相邻元素的差, ...

  3. matlab 符号运算 数值,MATLAB中的微积分运算(数值符号)

    显然这个函数是单词differential(微分)的简写,用于计算微分.实际上准确来说计算的是差商. 如果输入一个长度为n的一维向量,则该函数将会返回长度为n-1的向量,向量的值是原向量相邻元素的差, ...

  4. matlab中电流表在哪儿,电流表的符号

    电流表的符号:"圈A".电流表是指用来测量交.直流电路中电流的仪表.在电路图中,电流值以"安"或"A"为标准单位. 什么是电流表 电流表是根 ...

  5. matlab中:错误使用 handle.handle/set 对象无效或已删除

    不想浪费时间深究,请直接在运行您的程序前, 先运行一句话:clear gca  即可 以下是详细解释: set(gca,'XLim',[0 14]);%X轴的数据显示范围 set(gca,'YLim' ...

  6. Matlab 中一些符号的含义

    MATLAB所定义的特殊变量及其意义变量名 意义 help 在线帮助命令, 如用help plot调用命令函数plot的帮助说明. who 列出所有定义过的变量名称 ans 最近的计算结果的变量名 e ...

  7. 在matlab中怎样把图片转化为数据类型,matlab图像数据类型转换

    uint 8:无符号的8位(8bit)整型数据(unit 都是存储型) int :整型数据 1.在MATLAB中,数值一般都采用double型(64位)存储和运算. 2.为了节省存储空间,MATLAB ...

  8. matlab 不允许函数定义,matlab中函数定义在脚本中不允许是什么意思

    [提问前请先在知道搜索,谢谢] MATLAB是一门计算机编程语言,取名来源于Matrix Laboratory,本意是专门以矩阵的方式来处理计算机数据,它把数值计算和可视化环境集成到一起,非常直观,而 ...

  9. MATLAB中exist函数的用法

    exist: exist主要有两种形式,一个参数和两个参数的,作用都是用于确定某值是否存在: 1. b = exist( a)       若 a 存在,则 b = 1: 否则 b = 0: 2. b ...

最新文章

  1. file_get_contents(php://input)的使用方法
  2. int _tmain(int argc, _TCHAR* argv[])
  3. 记一次httpclient调用失败
  4. spring-mvc 添加controller 请求 200 但是无返回
  5. Think in Java读书笔记--隐藏实施过程
  6. 网络负载平衡oracle,[Oracle] RAC 之 - 负载均衡深入解析
  7. 导出远程mysql数据库中的表_shell脚本实现导出远程mysql数据库表数据至本地
  8. 异常掉电导致的ORA-[kfrValAcd30]故障处理
  9. 观星(【CCF】NOI Online能力测试3 入门组)
  10. (转)AI vs 深度学习 vs 机器学习:人工智能的 12 大应用场景
  11. 服务器cp所以型号,云服务器cp
  12. VGG16网络结构复现(Pytorch版)
  13. 聊聊激光雷达原理之i-TOF
  14. html视频自动播放循环播放,HTML5 通过Vedio标签实现视频循环播放的示例代码
  15. 图像处理/opencv/C++:图像马赛克
  16. 第一个成功复制小米粉丝营销的屌丝案例
  17. Mysql复制原理以及流程
  18. 飞利浦Georg Jensen联名系列真无线耳机JT60重磅上市
  19. 生命是罐头,胆量是开罐器
  20. MySQL中 (GROUP BY 用法)和(ORDER BY用法)

热门文章

  1. css鼠标移入线条延中心伸长,jquery鼠标悬浮,显示动态延伸线条,如何在鼠标移开后依然让线条元素延伸到终点...
  2. hdc mfc 画扇形图_canvas画扇形、饼图
  3. java考前复习之Scanner 类
  4. oracle树子类遍历父类_不懂数据库索引的底层原理?那是因为你心里没点b树
  5. datagridview设置某一行选中_机关公文格式设置规范(最新版)
  6. python计算N维数据的笛卡尔积
  7. lc滤波电路电感电容值选择_电感器变压器选型与应用
  8. linux怎么同时运行多个程序吗,Linux配置多个tomcat同时运行
  9. JVM01---简介
  10. aspnetcore的中间件