Octave: representing a matrix composed of symbolic types and scalars.

octave symbolic-computation

Suppose you want to create a matrix (or vector) that has some scalars and some symbolic types, in Octave. (Short post about Octave’s symbolic computation package: here.)

An example:

syms a b c

M0 = [a 0 0; 0 b 0; 0 0 c];

M1 = [a 0 0; 0 b 0; 0 0 1];

The expected output would be:

M0 = (sym 3×3 matrix)

  ⎡a  0  0⎤
  ⎢       ⎥
  ⎢0  b  0⎥
  ⎢       ⎥
  ⎣0  0  c⎦


M1 = (sym 3×3 matrix)

  ⎡a  0  0⎤
  ⎢       ⎥
  ⎢0  b  0⎥
  ⎢       ⎥
  ⎣0  0  1⎦

but NO – executing M1 will give you

error: octave_base_value::map_value(): wrong type argument 'scalar'

It turns out this is a known bug, relevant SO post.

the workaround is to enclose the rows that are all scalars with brackets, like

M1 = [a 0 0; 0 b 0; [0 0 1]];

and then we get the desired output:

M1 = (sym 3×3 matrix)

  ⎡a  0  0⎤
  ⎢       ⎥
  ⎢0  b  0⎥
  ⎢       ⎥
  ⎣0  0  1⎦

© Amy Tabb 2018 - 2023. All rights reserved. The contents of this site reflect my personal perspectives and not those of any other entity.