Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.1.0 - Русский


blockdiag

Создаёт блочную диагональную матрицу из указанных массивов. Соединение диагональной системы блоков.

Синтаксис

r = blockdiag(a1,a2,...,an)

Аргументы

ai

Матрицы логических значений, чисел, полиномов, рациональных или строковых значений любого размера. Принимаются разрежённые матрицы.

Подсистемы (т.е. коэффициенты усиления, или линейные системы в пространстве состояний или передаточной форме).

r

Матрица с a1, a2, a3, ... по диагонали. r является разрежённой, хотя бы одна из входных ai разрёжённая.

Описание

Подав на вход A, B and C, на выходе эти матрицы будут расставлены по диагонали:

\begin{bmatrix} A \ \ 0 \ \ 0 \\ 0 \ \ B \ \ 0 \\ 0 \ \ 0 \ \ C \end{bmatrix}
.

Если все входные матрицы квадратные, то выходная матрицы известна как блочная диагональная матрица block diagonal matrix.

Если указаны подсистемы, то blockdiag(..) выдаёт блочно- диагональную систему, сделанную из подсистем, располженых на главной диагонали. Это может быть использовано в частности для соединений системы.

blockdiag() может быть перегружена.

Примеры

С числами:

A = [1 0 ; 0 1]
B = [3 4 5 ; 6 7 8]
C = 7
D = blockdiag(A, B, C)
--> D = blockdiag(A, B, C)
 D  =
   1.   0.   0.   0.   0.   0.
   0.   1.   0.   0.   0.   0.
   0.   0.   3.   4.   5.   0.
   0.   0.   6.   7.   8.   0.
   0.   0.   0.   0.   0.   7.

С логическими значениями:

blockdiag([%T %T %T], [%T ; %F], [%T %F])
--> blockdiag([%T %T %T], [%T ; %F], [%T %F])
 ans  =
  T T T F F F
  F F F T F F
  F F F F F F
  F F F F T F

С полиномами:

s = %s;
blockdiag(s, [s^2 ; s^3], [1+s, 1-s^2 ; 4 s^4])
--> b = blockdiag(s, [s^2 ; s^3], [1+s, 1-s^2 ; 4 s^4])
 b  =

   s    0    0      0
         2
   0    s    0      0
         3
   0    s    0      0
                        2
   0    0    1 +s   1 -s
                     4
   0    0    4      s

С рациональными значениями:

s = %s;
blockdiag([1/s 2*s/(4*s+3)], 1/(s-1)^2)
--> blockdiag([1/s 2*s/(4*s+3)], 1/(s-1)^2)
 ans  =

   1     2s     0
   --  -------  --
   s   3 + 4s   1

   0   0            1
   --  --       -----------
                          2
   1   1        1 - 2s + s

С некоторыми разрежёнными матрицами на входе:

S = blockdiag([1 2], sparse([0 3 ; 4 0]), 5)
full(S)
--> S = blockdiag([1 2], sparse([0 3 ; 4 0]), 5)
 S  =
(  4,  5) sparse matrix
(  1,  1)     1.
(  1,  2)     2.
(  2,  4)     3.
(  3,  3)     4.
(  4,  5)     5.

--> full(S)
 ans  =
   1.   2.   0.   0.   0.
   0.   0.   0.   3.   0.
   0.   0.   4.   0.   0.
   0.   0.   0.   0.   5.

С текстом:

blockdiag(["Scilab" "is"],"a",["scientific" ; "software"])
--> blockdiag(["Scilab" "is"], "a", ["scientific" ; "software"])
 ans  =
!Scilab  is                 !
!            a              !
!               scientific  !
!               software    !

Со смешанными конкатенируемыми типами данных (см. справку по квадратным скобкам []):

blockdiag([%T %F], [-1 3], (1-%z)^2)
--> blockdiag([%T %F], [-1 3], (1-%z)^2)
 ans  =

   1    0    0    0    0

   0    0   -1    3    0
                               2
   0    0    0    0    1 -2z +z

С линейной системой:

s = poly(0,'s')
blockdiag(rand(2,2), 1/(s+1), [1/(s-1);1/((s-2)*(s-3))])
blockdiag(tf2ss(1/s), 1/(s+1), [1/(s-1);1/((s-2)*(s-3))])

Смотрите также

  • diag — включение или исключение диагонали
  • bdiag — блоковая диагонализация, обобщённые собственные векторы
  • repmat — дублирование массива и его мозаичное размещение
  • brackets — Конкатенация. Получатели присвоения. Результаты функции.
  • feedback — feedback operation

История

ВерсияОписание
6.1.0 Введена blockdiag().
Report an issue
<< random Элементарные матрицы diag >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Jun 17 17:55:05 CEST 2024