Как вывести левую матрицу из вектора? - PullRequest
0 голосов
/ 05 мая 2020

Предположим, у меня есть следующий сценарий, который создает массив символов c, A_known и символ c вектор x и выполняет умножение матриц.

clc; clearvars
try
    pkg load symbolic
catch
    error('Symbolic package not available!');
end

syms V_l k s0 s_mean
N = 3;

% Generate left-hand-side square matrix
A_known = sym(zeros(N));
for hI = 1:N
    A_known(hI, 1:hI) = exp(-(hI:-1:1)*k);
end
A_known = A_known./V_l;

% Generate x vector
x = sym('x', [N 1]);
x(1) = x(1) + s0*V_l;
% Matrix multiplication to give b vector
b = A_known*x

Предположим A_known на самом деле было неизвестно . Есть ли способ вывести его из b и x? Если да, то как?

До сих пор у меня был только случай, когда x был неизвестен, который обычно может быть решен через x = b \ A.

1 Ответ

1 голос
/ 05 мая 2020

Математически возможно получить решение, но на самом деле оно имеет бесконечные решения .

Пример

A = magic(5);
x = (1:5)';
b = A*x;
A_sol = b*pinv(x);

который имеет

>> A
A =

   17   24    1    8   15
   23    5    7   14   16
    4    6   13   20   22
   10   12   19   21    3
   11   18   25    2    9

но решает A как A_sol как

>> A_sol
A_sol =

    3.1818    6.3636    9.5455   12.7273   15.9091
    3.4545    6.9091   10.3636   13.8182   17.2727
    4.4545    8.9091   13.3636   17.8182   22.2727
    3.4545    6.9091   10.3636   13.8182   17.2727
    3.1818    6.3636    9.5455   12.7273   15.9091
...