Октав.Способ отображения числовых массивов и массивов символов рядом друг с другом? - PullRequest
0 голосов
/ 19 января 2019

Я хочу отобразить матрицы Yn (5x5), Un (5x1), Jn (5x1) в формате: Yn * Un = Jn, например:

multiply_sign = [ nan; nan; '*'; nan; nan ];
equals_sign = [ nan; nan; '='; nan; nan ];
YnUnJn = [Yn, multiply_sign, Un, equals_sign, Jn]

Я получаю ошибку, чтовекторы '*' и '=' являются массивами символов, а Yn, Un, Jn являются числовыми массивами.Возможно, есть способ обойти это?

В Matlab можно использовать uitable, но он не реализован в Octave.

Входными данными являются матрицы Yn, Un, Jn с размерами, указанными выше.

Выходными данными является матрица YnUnJn или что-либо похожее на указанный формат: матрица Yn, затем знак «*», затем Un, затем знак «=», затем матрица Jn.

Как это: https://imgur.com/wUEKbyU

1 Ответ

0 голосов
/ 19 января 2019

Вот базовая реализация в Octave. Обратите внимание, что функция disp в октаве возвращает строку.

Yn = rand(5)-.5;
Un = rand(5,1)-.5;
Jn = rand(5,1)-.5;
b = blanks(size(Yn ,1));

dsp=@(x)char(strsplit(disp(x),'\n'));

multiply_sign = strjust(['*' b],'center').';
equals_sign   = strjust(['=' b],'center').';

disp([dsp(Yn) multiply_sign dsp(Un) equals_sign dsp(Jn)])


   0.1610588   0.1244556  -0.2046512  -0.1799725  -0.3302048    0.364565    0.167053
  -0.1774412   0.3618586   0.4974047   0.4349322  -0.4689669   -0.013163   -0.442009
   0.1016794  -0.0991844   0.4728800   0.2046589  -0.2876299*   0.091990=   0.405725
  -0.2048010  -0.4256928  -0.0517186   0.2915129  -0.3435698   -0.376725    0.342397
  -0.2740378  -0.0907411   0.0090493   0.4677547  -0.2294902   -0.136846    0.096984

.

В MATLAB вам может понадобиться evalc('disp(Yn)').

...