You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab符号工具箱中指定获取正平方根?

解决MATLAB符号工具箱中指定正平方根的问题

问题场景

你在使用MATLAB符号工具箱时遇到了这个问题:

syms c;         assume(c,'real');       assumeAlso(c > 0);      
syms d;         assume(d,'real');       assumeAlso(d > 0);      
N = (d^2 + 8*c)^0.5 - d
isAlways(N > 0)

虽然直觉上因为d²+8c > d²,N应该恒大于0,但MATLAB返回的结果不符合预期——这是因为符号运算中,平方根默认包含正负两个分支(比如100的平方根是±10),导致表达式存在不确定性。

通用解决方案

对于已知为正的符号表达式a,要获取其正平方根,可以采用以下两种可靠方式:

  • 直接使用abs(sqrt(a)):利用绝对值强制保留平方根的非负分支,明确指定取正根。
  • 先给表达式添加正性假设再调用sqrt:通过assume(a > 0)约束表达式的范围,此时sqrt(a)会默认取主分支(正根)。

修改后的示例代码

syms c d
assume(c > 0 & d > 0)

% 方式1:用abs(sqrt(...))明确取正根
N1 = abs(sqrt(d^2 + 8*c)) - d
isAlways(N1 > 0)  % 返回逻辑值true

% 方式2:对目标表达式添加正假设后调用sqrt
a = d^2 + 8*c;
assume(a > 0)
N2 = sqrt(a) - d
isAlways(N2 > 0)  % 返回逻辑值true

原理说明

当明确指定取正平方根后,d²+8c的正平方根必然大于d(因为正数的正平方根随底数增大而单调递增,且d²+8c > d²),因此N恒大于0,isAlways会正确返回true。

内容的提问来源于stack exchange,提问作者BKay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:50:16