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


слэш (косая черта)

(/) правое деление и обратная связь

Syntax

X = A / B // при этом A = X * B
X = A ./ B // при этом A = X .* B
X = A ./. B // при этом A = X .*. B
S = G /. K
// комментарий в строке
/* блок многострочных комментариев */

Описание

Правое деление. X=A/B является решением X*B=A.

Операторы слэш (правое деление) и обратный слэш (левое деление) связаны следующим выражением: B/A=(A'\B')'.

В случае, когда A - квадратная матрица, решение X может быть вычислено либо через LU-разложение, либо через программу линейного решения по методу наименьших квадратов. Если число обусловленности матрицы A меньше, чем 1/(10*%eps) (то есть, если A хорошо обусловлена), то используется LU-разложение с перестановками строк матрицы. Если нет (то есть, если A плохо обусловлена), то X является решением с минимальной нормой, которое минимизирует ||A*X-B|| используя полное ортогональное разложение A (то есть X - это решение линейной задачи по методу наименьших квадратов).

A ./ B является матрицей с элементами A(i,j)/ B(i,j). Если B - скаляр (матрица размером 1 на 1), то эта операция то же самое, что и A ./ B * ones(A). Аналогично, если скаляром является A.

Обратный слэш ставят для левого деления.

Обратная связь системы. S = G /. K вычисляет S = G*(eye() + K*G)^(-1) и этот оператор избегает проблему упрощения.

Заметьте, что 123./B интерпретируется как (123)./B. В таких случаях точка является частью оператора, а не числа.

In the opposite, Заметьте, что G/.5 интерпретируется как G/(.5). В таких случаях точка интерпретируется как часть числа, а не оператора, while it is not the case in G/. 5

Комментарий // комментирует строку, т. е. строки, которые начинаются с //, игнорируются интерпретатором.

Это то же самое, что /*, с которого начинается комментирование блока кода, и */, которым заканчивается комментирование этого блока.

Примеры

a = [3.,-24.,30.];
B = [
   9.   -36.    30.
  -36.   192.  -180.
   30.  -180.   180.
];
x = a / B
x*B-a // близко к нулю

a = 4 / 2;        // Должно быть 2
a = 2 ./ [2,4];   //  [1. 0.5]

Kronecker right division :

A = [1 100 ; 10 1000], B = [1 2 4],
P = A .*. B
P ./. B
--> A = [1 100 ; 10 1000], B = [1 2 4],
 A  =
   1.    100.
   10.   1000.

 B  =
   1.   2.   4.

--> P = A .*. B
 P  =
   1.    2.    4.    100.    200.    400.
   10.   20.   40.   1000.   2000.   4000.

--> P ./. B
 ans  =
   1.   100.
   10.  1000.

// Комментарии - это хорошо. Они помогают понять код
a = 1;  // Комментарий после некоторых инструкций в начале строки
/* Даже длинные, то есть на множестве строк,
комментарии полезны */

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

  • inv — matrix inverse
  • backslash — (\) левое матричное деление: точное решение или решение по методу наименьших квадратов
  • kron ./. — Kronecker left and right divisions
  • комментарии — (// или /*...*/) комментирование
  • перегрузка — возможности перегрузки отображения, функций и операторов

История

ВерсияОписание
5.4.1 Пороговый уровень для обусловливания в слэше увеличен.
6.0.0 1./B теперь означает 1 ./ B, больше не интерпретируется как 1. / B
Report an issue
<< точка с запятой Ключевые слова Scilab звёздочка >>

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:
Tue Oct 24 14:37:04 CEST 2023