СпособПолученияКомпонентСвязностиРасчетаСистемЛинейныхУравнений.КомпонентыСильнойСвязностиБезТребованияСвязиВнутриКомпонент

Свойства · StronglyConnectedComponentsWithNoInnerConnectionRequired

Расчет компонент связности, наиболее оптимальных для анализа и отладки механизма решения систем линейных уравнений. Возвращаются такие компоненты (подграфы), у которых для любой вершины из одной компоненты не существует пути в любую другую вершину любой другой компоненты.

Полное описание, параметры и ограничения

СпособПолученияКомпонентСвязностиРасчетаСистемЛинейныхУравнений.КомпонентыСильнойСвязностиБезТребованияСвязиВнутриКомпонент (ConnectedComponentsOfSystemOfLinearEquationsCalculationGettingMethod.StronglyConnectedComponentsWithNoInnerConnectionRequired)

СпособПолученияКомпонентСвязностиРасчетаСистемЛинейныхУравнений (ConnectedComponentsOfSystemOfLinearEquationsCalculationGettingMethod)

КомпонентыСильнойСвязностиБезТребованияСвязиВнутриКомпонент (StronglyConnectedComponentsWithNoInnerConnectionRequired)

Доступен, начиная с версии 8.3.15.

Описание:
Расчет компонент связности, наиболее оптимальных для анализа и отладки механизма решения систем линейных уравнений.
Возвращаются такие компоненты (подграфы), у которых для любой вершины из одной компоненты не существует пути в любую другую вершину любой другой компоненты.
Использование в версии:

Доступен, начиная с версии 8.3.15.

Методическая информация

Практические примеры

Разобрать граф своих работ: КомпонентыСильнойСвязностиБезТребованияСвязиВнутриКомпонент

Реальный граф из пяти собственных вершин передаётся расчёту связности, а не численному решателю без свободных членов.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Тело серверной команды своей обработки, дополнительная функция в том же модуле. Источник — только свой граф в памяти.

  2. Вершины 0 / 1 / 2 связаны в обе стороны, 3 / 4 тоже; между блоками есть одна направленная связь 2 → 3. Свободные члены и ИсточникДанныхУзлов для этого графового метода не задаются.

Расчет = Новый РасчетСистемЛинейныхУравнений;
Расчет.ИсточникДанныхСвязей = СвоиСвязиКнижныхРабот();
Расчет.КолонкаУравненияВСвязях = "Уравнение";
Расчет.КолонкаПеременныеВСвязях = "Переменная";
Описание = Расчет.ОписанияСистем.Добавить();
Описание.КолонкаКоэффициентовВСвязях = "Вес";
Компоненты = Расчет.ПолучитьКомпонентыСвязности(СпособПолученияКомпонентСвязностиРасчетаСистемЛинейныхУравнений.КомпонентыСильнойСвязностиБезТребованияСвязиВнутриКомпонент);
Для Каждого СтрокаКомпоненты Из Компоненты Цикл
    Сообщить("Узел " + Строка(СтрокаКомпоненты[0]) + ", компонента " + Строка(СтрокаКомпоненты[1]));
КонецЦикла;
Тот же модуль: семь направленных связей пяти своих работ
Функция СвоиСвязиКнижныхРабот()
    Связи = Новый ТаблицаЗначений;
    Связи.Колонки.Добавить("Уравнение", Новый ОписаниеТипов("Число"));
    Связи.Колонки.Добавить("Переменная", Новый ОписаниеТипов("Число"));
    Связи.Колонки.Добавить("Вес", Новый ОписаниеТипов("Число"));
    Ребра = Новый Массив;
    Ребра.Добавить(Новый Структура("Уравнение,Переменная,Вес", 0, 1, 1));
    Ребра.Добавить(Новый Структура("Уравнение,Переменная,Вес", 1, 0, 1));
    Ребра.Добавить(Новый Структура("Уравнение,Переменная,Вес", 1, 2, 1));
    Ребра.Добавить(Новый Структура("Уравнение,Переменная,Вес", 2, 1, 1));
    Ребра.Добавить(Новый Структура("Уравнение,Переменная,Вес", 3, 4, 1));
    Ребра.Добавить(Новый Структура("Уравнение,Переменная,Вес", 4, 3, 1));
    Ребра.Добавить(Новый Структура("Уравнение,Переменная,Вес", 2, 3, 1));
    Для Каждого Ребро Из Ребра Цикл
        ЗаполнитьЗначенияСвойств(Связи.Добавить(), Ребро);
    КонецЦикла;
    Возврат Связи;
КонецФункции

Разбор по шагам

  1. Соберите собственные связи и одно описание с колонкой Вес.

  2. Передайте вариант компоненты явно.

  3. Сравните принадлежность узлов, не фиксируя номера компонент.

Как проверить результат

  1. КомпонентыСлабойСвязности не различает направление для принадлежности; КомпонентыСильнойСвязности требует взаимной достижимости. Специальный третий вариант предназначен для анализа механизма решения и имеет собственный контракт — это не синоним обычных сильных компонент.

  2. Первая колонка результата — номер узла, вторая — номер компоненты. Конкретные номера компонент не считаются постоянными. BSL при сборке HTML не выполнялся.

Ожидаемый результат

Показан реальный графовый расчёт с явным методом и полностью заданным источником.

На что обратить внимание

  1. Не вызывайте численное решение для этого графа, у которого не заданы правые части уравнений.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.