我试图使用Matlab找到以下方程的唯一解
norm(a,2)=0.11
当x
是变量和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 =空sym:0-by-1
关于解决上述等式的合适方法的任何帮助将被理解。
我所知道的
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
函数的图:
UPDATE
正如我们在上面所看到的,求解器切换到数值求解器并且只找到一个解,尽管该图显示了至少两种可能的解。
要找到所有解决方案(实际上可能有两个以上),我会直接使用数值解算器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