【问题标题】:How to find the unique solution to norm(a,2)==c; when c is a scalar and a=[x abs(1/x);x+1 1/x]如何找到 norm(a,2)==c 的唯一解;当 c 是标量且 a=[x abs(1/x);x+1 1/x]
【发布时间】:2019-03-05 09:52:58
【问题描述】:

我正在尝试使用 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 = 空符号:0×1

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

【问题讨论】:

  • 顺便说一句:norm(a,2) 等同于norm(a)2 是多余的。
  • 请出示minimal reproducible example - 可能没有解决方案?
  • 你想要fminsearchfmincon。您需要将其作为一种最小化方法来解决它
  • 你有没有用数字检查过是否有解决方案?

标签: matlab equation-solving


【解决方案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 两个函数的图:

更新

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多