首页 > 解决方案 > 如何找到 norm(a,2)==c 的唯一解;当 c 是标量且 a=[x abs(1/x);x+1 1/x]

问题描述

我正在尝试使用 Matlab 找到以下方程的唯一解

               norm(a,2)=0.11

whenx是一个变量并且a=[x abs(1/x);x+1 1/x]. b是 的确切公式norm(a,2),我得到了:

syms x
a=[x abs(1/x);x+1 1/x];
b = norm(a,2)

b = max(abs(2*x + x*abs(x)^2 + 2*x*abs(x)^4 + abs(x)^4 + x^2*abs(x)^2 - (4*x*abs(x)^5 + 2*x*abs(x)^6 + 4*x*abs(x)^8 + abs(x)^8 + 8*x^2*abs(x)^3 + x^2*abs(x)^4 + 4*x^3*abs(x)^3 + 2*x^3*abs(x)^4 + 6*x^2*abs(x)^6 + x^4*abs(x)^4 + 4*x^3*abs(x)^6 + 4*x^2*abs(x)^8 + 4*x^2)^(1/2))/(2*abs(x)^3), abs(2*x + x*abs(x)^2 + 2*x*abs(x)^4 + abs(x)^4 + x^2*abs(x)^2 + (4*x*abs(x)^5 + 2*x*abs(x)^6 + 4*x*abs(x)^8 + abs(x)^8 + 8*x^2*abs(x)^3 + x^2*abs(x)^4 + 4*x^3*abs(x)^3 + 2*x^3*abs(x)^4 + 6*x^2*abs(x)^6 + x^4*abs(x)^4 + 4*x^3*abs(x)^6 + 4*x^2*abs(x)^8 + 4*x^2)^(1/2))/(2*abs(x)^3))^(1/2)

我试过solve()了,结果如下:

solve(b==0.11,x) 
Warning: Cannot find explicit solution.

ans = 空符号:0×1

任何有关解决上述方程的合适方法的帮助将不胜感激。

标签: matlabequation-solving

解决方案


我所知道的

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函数的图:

在此处输入图像描述

更新

正如我们在上面看到的,求解器切换到数值求解器并只找到了一个解决方案,尽管该图向我们展示了至少两个可能的解决方案。

要找到所有解决方案(实际上可能有两个以上),我将直接使用数值求解器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

推荐阅读