Решить собственную систему 2x+y=5, x−y=1

Учебные задачи

Источник коэффициентов, расчёт и обратная подстановка приведены полностью, без обращения к себестоимости конфигурации.

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

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

Подготовка

  1. Свой серверный общий модуль. Основной блок — тело ВыполнитьПример() Экспорт; дополнительную функцию разместите отдельно в том же модуле.

  2. Все коэффициенты собственной невырожденной системы заданы в памяти. Номера 0 / 1 — собственные ключи уравнений и переменных, не индексы результата.

Данные = СвоиКоэффициентыДвухУравнений();
Расчет = Новый РасчетСистемЛинейныхУравнений;
Расчет.ИсточникДанныхУзлов = Данные.Узлы;
Расчет.ИсточникДанныхСвязей = Данные.Связи;
Расчет.КолонкаУравненияВУзлах = "Номер";
Расчет.КолонкаУравненияВСвязях = "Номер";
Расчет.КолонкаПеременныеВСвязях = "Переменная";
Описание = Расчет.ОписанияСистем.Добавить();
Описание.КолонкаКоэффициентовВУзлах = "B";
Описание.КолонкаКоэффициентовВСвязях = "A";
Расчет.ТребуемаяТочность = 0.000001;
Расчет.ИспользованиеВычислительныхРесурсов = 1;
Решения = Расчет.РассчитатьСистемыЛинейныхУравнений(Истина);
X = Решения.Найти(0, "НомерУзла").Решение1;
Y = Решения.Найти(1, "НомерУзла").Решение1;
Сообщить("x=" + Строка(X) + ", y=" + Строка(Y));
Невязка0 = 2 * X + Y - 5;
Невязка1 = X - Y - 1;
Сообщить("Первое уравнение: " + Строка(Макс(Невязка0, -Невязка0) < 0.00001));
Сообщить("Второе уравнение: " + Строка(Макс(Невязка1, -Невязка1) < 0.00001));
Тот же модуль: полный собственный источник коэффициентов
Функция СвоиКоэффициентыДвухУравнений()
    Узлы = Новый ТаблицаЗначений;
    Узлы.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число"));
    Узлы.Колонки.Добавить("B", Новый ОписаниеТипов("Число"));
    Первая = Узлы.Добавить();
    Первая.Номер = 0;
    Первая.B = 5;
    Вторая = Узлы.Добавить();
    Вторая.Номер = 1;
    Вторая.B = 1;
    Связи = Новый ТаблицаЗначений;
    Связи.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число"));
    Связи.Колонки.Добавить("Переменная", Новый ОписаниеТипов("Число"));
    Связи.Колонки.Добавить("A", Новый ОписаниеТипов("Число"));
    Строки = Новый Массив;
    Строки.Добавить(Новый Структура("Номер,Переменная,A", 0, 0, 2));
    Строки.Добавить(Новый Структура("Номер,Переменная,A", 0, 1, 1));
    Строки.Добавить(Новый Структура("Номер,Переменная,A", 1, 0, 1));
    Строки.Добавить(Новый Структура("Номер,Переменная,A", 1, 1, -1));
    Для Каждого Коэффициенты Из Строки Цикл
        ЗаполнитьЗначенияСвойств(Связи.Добавить(), Коэффициенты);
    КонецЦикла;
    Возврат Новый Структура("Узлы,Связи", Узлы, Связи);
КонецФункции

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

  1. Постройте две собственные таблицы коэффициентов.

  2. Создайте описание и вычислите результат.

  3. Найдите переменные по ключу и подставьте в исходные уравнения.

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

  1. Ожидается x около 2, y около 1 и две невязки в допуске. Номер решения определяется единственным описанием системы.

  2. Это числовая учебная задача, не запуск закрытия месяца. BSL и вычисления 1С при сборке HTML не выполнялись.

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

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

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

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

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

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

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

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

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