Matalb符号矩阵输入BUG

原创 2015年07月08日 22:35:56

最近有位童鞋问笔者下面两段Matlab代码执行结果为啥不一样

代码1

x=sym('[0 1;-1 0]')
y=sym('[1 -1;-2 1]')
x*y
代码2

syms x y
subs(x*y,{x,y},{[0 1;-1 0],[1 -1;-2 1]})

代码1执行结果

x =
 
[  0, 1]
[ -1, 0]
 
 
y =
 
[  0, 0]
[ -2, 1]
 
 
ans =
 
[ -2, 1]
[  0, 0]

代码2执行结果

ans =

     0    -1
     2     0
笔者的解释是第一个是符号矩阵的乘法,符合高等数学高等代数中的矩阵乘法运算,第二个是属于数组运算,即矩阵对应位置做乘法

但是问题了来了,第一个真的是矩阵乘法的结果吗,笔者又写了一个代码来验证

代码3

A=[0 1;-1 0]
B=[1 -1;-2 1]
A*B
A.*B
代码3执行结果

A =

     0     1
    -1     0


B =

     1    -1
    -2     1


ans =

    -2     1
    -1     1


ans =

     0    -1
     2     0
仔细一看,符号矩阵运算的结果与实际不符,再仔细查查,可以看到代码1中的矩阵存储的时候居然变化了。。。。

经过测试,符号矩阵转换的时候优先识别成表达式了,不足的列自动补0,列数与最后一行的列数有关,为了不使符号函数误解成表达式,应尽量避免用空格分割行元素,建议采用逗号分割

下面的代码是做测试的

代码4

syms a11 a12 a13 a21 a22 a23
x=sym('[1 -a12;-2 1]')
y=sym('[1 -a12;-2 -a22]')
z=sym('[1 -a12 -a13;-2 -a22 -a23]')
z2=sym('[1 -a12 -a13;-2 -a22 a23]')
z3=sym('[1 -a12 -a13;-2 a22 a23]')
z4=sym('[1 -a12 a13;-2 a22 a23]')
sym('[1 -3;-2 -6]')
代码4执行结果
x =
 
[ 1 - a12, 0]
[      -2, 1]
 
 
y =
 
   1 - a12
 - a22 - 2
 
 
z =
 
   1 - a13 - a12
 - a22 - a23 - 2
 
 
z2 =
 
[ 1 - a13 - a12,   0]
[     - a22 - 2, a23]
 
 
z3 =
 
[ 1 - a13 - a12,   0,   0]
[            -2, a22, a23]
 
 
z4 =
 
[ 1 - a12, a13,   0]
[      -2, a22, a23]
 
 
ans =
 
 -2
 -8
下面代码将代码1中的空格改成逗号,就能得到正确的结果了

代码5

x=sym('[0,1;-1,0]')
y=sym('[1,-1;-2,1]')
x*y
代码5执行结果

x =
 
[  0, 1]
[ -1, 0]
 
 
y =
 
[  1, -1]
[ -2,  1]
 
 
ans =
 
[ -2, 1]
[ -1, 1]
由于数值矩阵的空格在matlab中不会引起误解,所以也可以先定义数值矩阵,然后转成符号矩阵

代码6

A=[0 1;-1 0]
B=[1 -1;-2 1]
x=sym(A)
y=sym(B)
x*y
代码6执行结果

A =

     0     1
    -1     0


B =

     1    -1
    -2     1

 
x =
 
[  0, 1]
[ -1, 0]
 
 
y =
 
[  1, -1]
[ -2,  1]
 
 
ans =
 
[ -2, 1]
[ -1, 1]



Matalb中特殊矩阵

1、幻方矩阵 >> m = magic(10) m = 92 99 1 8 15 67 74 51 58 40 98 ...
  • you23hai45
  • you23hai45
  • 2013年10月06日 22:26
  • 1324

MATALB中数组、矩阵、向量、行列式的关系

MATALB中数组、矩阵、向量、行列式的关系正如matlab(矩阵实验室)这个名字一样,matlab的数据结构只有数组(array)一种形式: 单个的数就是1*1的矩阵 向量(vector):特指1*...
  • sinat_27554409
  • sinat_27554409
  • 2017年05月17日 00:08
  • 291

【matlab学习笔记】矩阵的表示和常用符号

今天在看一段matlab代码的时候发现matlab的风格和C
  • zjccoder
  • zjccoder
  • 2014年07月16日 09:22
  • 2134

MATLAB学习笔记(五):符号计算(符号矩阵+代数方程组求解)

2.6 .1 符号矩阵分析 常用的矩阵分析指令如下: det(A) 行列式A diag(A) 取对角元素构成向量,或根据向量构成对角矩阵 [V,D]=eig(A) 特征值分解,使 AV=VD (没看懂...
  • qq_16255321
  • qq_16255321
  • 2015年02月08日 15:31
  • 3194

在Word、PPT中用什么方法可以插入矩阵

工科学生或者老师在写论文时最头痛的就是编辑公式,因为word自带的公式编辑器往往满足不了专业的公式需求,MathType就很好的解决了这个问题。在进行公式编辑时,难免会遇到输入矩阵的情况,那么怎么输入...
  • EducationSoft
  • EducationSoft
  • 2016年07月08日 10:00
  • 1720

漫步线性代数四——矩阵符号和矩阵乘法

对于3×33\times 3的例子,我们能够写出所有的公式。可以列出消去步骤,一个方程减去另一个方程的倍数达到三角矩阵的形式。对于一个大的系统,这种跟踪消去的步骤太长了,所以我们需要更加简洁的记录方式...
  • u010182633
  • u010182633
  • 2016年08月17日 19:24
  • 1996

MathJax基础(2):矩阵

MathJax下的矩阵画法。
  • Mage_EE
  • Mage_EE
  • 2017年07月18日 18:48
  • 550

matlab和FPGA中无符号数和有符号数的转化(转)

在FPGA 设计过程中经常会遇到关于数表示之间的转化问题,最常见的是无符号数和有符号数之间的转化问题。 (1)在FPGA设计过程中,能够很直接的看出数字的位宽,但经常以无符号数的形式输出,在后继的处...
  • avrmcu1
  • avrmcu1
  • 2014年03月13日 09:08
  • 1537

正定矩阵(Positive-definite Matrix)

转载自http://blog.csdn.net/wangxiaojun911/article/details/7864153 http://blog.csdn.net/po5889/article/d...
  • qq_27245709
  • qq_27245709
  • 2016年11月22日 16:46
  • 1426

Python基础之矩阵输入

Python里面简单的矩阵输入笔记
  • thither_shore
  • thither_shore
  • 2016年08月27日 11:15
  • 6464
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Matalb符号矩阵输入BUG
举报原因:
原因补充:

(最多只允许输入30个字)