如何找到规范的独特解决方案(a,2)== c;当c是标量且a = [x abs(1 / x); x + 1 1 / x]

问题描述 投票:4回答:1

我试图使用Matlab找到以下方程的唯一解

               norm(a,2)=0.11

x是变量和a=[x abs(1/x);x+1 1/x]bnorm(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

关于解决上述等式的合适方法的任何帮助将被理解。

matlab equation-solving
1个回答
2
投票

我所知道的

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

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
© www.soinside.com 2019 - 2024. All rights reserved.