обрабатывать неизвестное количество переменных в Matlab или Mathematica - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть алгоритм для получения матрицы n на n для любого заданного n.Моя цель - найти все решения однородной системы линейных уравнений A x = 0 , используя Matlab или Mathematica.Сначала я пробую Matlab.

Попытка 1: я не могу использовать "linsolve", так как A, вероятно, будет единственным.Я хочу все решения.

Попытка 2: Используйте solve(eqns, vars, 'ReturnConditions', true).Однако, как мне превратить Axe в форму уравнения?Кажется, мне нужен цикл for, чтобы поместить уравнения в «уравнения», но как я могу определить символические переменные x1, x2, ..., xn?Сначала я не знаю значения n.Вот мой псевдокод:

read (n);    
for i=1:n %% i_th equation
       eq=[];
       for j=1:n
         eq=eq+A[i,j]*x[j]; %% keep adding terms
       end
       eq=eq+['==0']; %% add '==0' to make it an equation
       eqns=eqns+eq %% add the ith equation to the equation list
 end
 vars=[];
 for i=1:n 
     vars=vars+x[i];
 end
 solve(eqns, vars, 'ReturnConditions', true)

Можете ли вы помочь сделать его настоящим кодом Matlab или Mathematica?

1 Ответ

0 голосов
/ 07 декабря 2018

Matlab создан для линейной алгебры, поэтому A*x=0 - это уравнение с одним, множеством или отсутствием вектора x в качестве решения.

Проблема с Matlab состоит в том, что у него очень много способовдать вам одно решение, но не дать все решения.Решение линейной системы Ax=b обычно получается с помощью x = b\A (где x будет иметь наименьшую норму L0 среди всех решений, то есть наименьших ненулевых компонентов) или x=pinv(A)*b (где x будет иметь наименьшую норму L2среди всех решений).См. pinv документация .

Но в этом конкретном случае, когда b=0, оба дадут тривиальное решение x=0

Теперь ищемзначения x такие, что A*x=0 не что иное, как поиск ядра матрицы A.И Matlab null функция, которая делает именно это.

...