Насколько я знаю,
norm(a) = max(svd(a))
max
является проблемой в этом уравнении, поэтому я бы нашел и решил символические уравнения для обоих svd
результатов отдельно:
syms x
a=[x abs(1/x);x+1 1/x];
s = svd(a);
% svd 1
solve(s(1)==0.11,x)
% svd 2
solve(s(2)==0.11,x)
Возвращаемое значение для SVD 1:
Warning: Cannot solve symbolically. Returning a numeric approximation instead.
ans = -12.84595601211006224344551434882
Возвращаемое значение для SVD 2:
Warning: Cannot find explicit solution.
ans = Empty sym: 0-by-1
Таким образом, ответ будет
ans = -12.84595601211006224344551434882
Если мыбыло решение для каждой части SVD, мы могли бы найти max () из них.
Вот график обеих функций svd
:
![enter image description here](https://i.stack.imgur.com/AKbj8.png)
ОБНОВЛЕНИЕ
Как мы могли видеть выше, решатель переключился на числовой решатель и нашел только одно решение, хотя график показывает нам как минимум два возможных решения.
Чтобы найти все решение (на самом деле их может быть больше двух), я бы напрямую использовал числовой решатель vpasolve
и либо вводил начальное предположение, либо разрешал решателю находить решения случайным образом:
vpasolve(s(1)==0.11,x,2) % input initial guess as 2
Возвращает второе решение:
ans = 2.2626424161863046178372248086765
Или использует случайное предположение:
for n = 1:10
vpasolve(s(1)==0.11,x,'Random',true) % use random guess
end
Возвращает всенайденное решение:
ans = -12.84595601211006224344551434882
ans = -12.84595601211006224344551434882
ans = -12.84595601211006224344551434882
ans = -12.84595601211006224344551434882
ans = 2.2626424161863046178372248086765 %!!!
ans = -12.84595601211006224344551434882
ans = -12.84595601211006224344551434882
ans = -12.84595601211006224344551434882
ans = -12.84595601211006224344551434882
ans = -12.84595601211006224344551434882