На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Однородная СЛАУ
    А как численно решаются однородные СЛАУ, когда есть одно ненулевое решение?
      Я правильно понимаю, что хочется к имеющемуся x1: A*x1 = 0 найти все остальные x2,...,xk : L=Span<x1,...,xk> и A*L=0, A*(L\{0})≠0 ?
        Наколько помню, чтобы найти все решения надо найти так называемое нулевое пространство (или оно как-то по-другому, но похоже, называется). Это набор линейно независимых (обычно ищутся даже ортогональные) векторов, при умножении матрицы на которые получается нулевой вектор. Соответствующий алгоритм существует. Пространство натянутое на эти вектора и составляет все решения однородной системы. Если требуемых векторов нет, тогда однородная система имеет единственное, тривиальное решение.
        Для существования нетривиальных решений необходимо, чтобы ранг матрицы был меньше числа столбцов (числа переменных).

        Если не ошибаюсь, нулевое пространство можно найти, например, методом ортогонализации.

        Добавлено
        В библиотеке питона sympy класс матрицы имеет метод nullspace, вычисляющий список этих векторов
          Цитата amk @
          Если не ошибаюсь, нулевое пространство можно найти, например, методом ортогонализации.
          Весьма сомнительное утверждение. Ибо:
          1.Если матрица A такова:
          0 0 0 0 0 ...
          0 * * * * ...
          0 * * * * ...
          ...
          * - нечто
          2.Нетривиальное=ненулевое решение известно и равно x1 = (1,0,0,...)
          3.Остальные найти - сведение проблемы к n-1-мерному случаю, а там ничегошеньки не известно. Обломс. :yes-sad:
            Цитата Славян @
            Я правильно понимаю, что хочется к имеющемуся x1: A*x1 = 0 найти все остальные x2,...,xk : L=Span<x1,...,xk> и A*L=0, A*(L\{0})≠0 ?

            Нет. Имеется ввиду однородная СЛАУ, ранг матрицы которой меньше на единицу порядка самой матрицы. Т.е. помимо нулевого решения есть одно линейно независимое ненулевое, которое можно доумножать на любой коэффициент и получать бесконечное количество решений.
              Цитата Славян @
              Весьма сомнительное утверждение. Ибо:
              Ты прав. Но только утверждение это не сомнительное - неверное. Методом ортогонализации можно найти не само нулевое пространство, а ортогональное к нему. Хотя возможно проще не заниматься сразу ортогонализацией, а сперва привести матрицу к каноническому лестничному виду.
                Цитата Суровый @
                Нет. Имеется ввиду однородная СЛАУ, ранг матрицы которой меньше на единицу порядка самой матрицы. Т.е. помимо нулевого решения есть одно линейно независимое ненулевое, которое можно доумножать на любой коэффициент и получать бесконечное количество решений.
                Тьфу! Богатый русский язык!!! :wall: Под вашим "есть одно" я понял, что "уже найдено=задано одно", а надо было "существует, но ещё не найдено то одно". :blush:
                  Быть может можно тяжёлым методом как amk предложил:
                  1.
                  Цитата amk @
                  сперва привести матрицу к каноническому лестничному виду.
                  A =
                  1 2 3
                  0 2 2
                  0 0 0
                  Опосля создаёте из неё этакую:
                  ~A:
                  1 0 0 ... 0 a
                  0 1 0 ... 0 b
                  ...
                  0 0 0 ... 1 z
                  0 0 0 ... 0 0
                  Правый "мусорный" столбец даст почти искомый собственный вектор: x1=(-a,-b,...,-z,1); A*x1 = 0.
                  Ну и, небось, надо обратно прошагать.
                  В итоге, O(N3), дороговато. :oops:
                    В общем уже не надо. Решил другим путем пойти, и не связываться с однородными СЛАУ.
                      Цитата Суровый @
                      В общем уже не надо.
                      Хор.

                      Цитата Славян @
                      небось, надо обратно прошагать.
                      Анализ показал, что не надо:
                      Если матрица A приводится к "красивому" виду B так: A = T1*....*Ts*B, где B*x = 0, то и A*x = 0. :good:

                      Так, при исходной A=
                      0 2 2
                      1 2 3
                      0 1 1
                      1.привели её к лесенке:
                      1 2 3
                      0 2 2
                      0 0 0
                      2.привели к красоте B=:
                      1 0 1
                      0 1 1
                      0 0 0
                      3.нашли собственный x=(-1,-1,1); B*x = 0
                      И ужо: A*x = 0 тоже.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0284 ]   [ 15 queries used ]   [ Generated: 24.04.24, 23:04 GMT ]