检查符号计算

3
我需要进行一些计算,其中会涉及到长公式,主要包括变量系数的多项式导数。
不幸的是,像Mathematica或Maple这样的引擎得出的结果与我所需的结果非常不同,将结果重新排列成理想的形式需要太长时间(更不用提重新引入错误的风险)。
因此,我想知道是否有某种方法可以让我自己进行计算,然后让系统检查结果 - 即某种“方程检查器”:
我输入d / dx f(x)= g(x),其中我提供了BOTH两侧,并让系统评估为真或假。
4个回答

4
我建议您查看sym/isequaln。它是isequaln的重载版本,用于比较符号表达式。例如:
syms x
f(x) = 3*x^3-2*ln(x);
g(x) = 9*x^2 - 2/x;
isequaln(f,g)

ans =
    0

isequaln(diff(f), g)

ans = 
    1

请查看MathWorks文档中关于该函数的内容。它非常方便。


我相信符号版本是R2013a+。数值版本是R2012a+,但它只是替换了名字可怕的isequalwithequalnans - horchler

2
在Maple中,使用is(f=g)命令。如果结果为FAIL,则设置_EnvTry:= hard;并再次尝试is命令。

1
在较旧的Matlab版本(回到R2012a),可以使用isAlways作为测试符号方程的一种方式。该函数还可用于测试不等式。只需记住函数名称中的“A”要大写。借用@zachd1_618的示例:
syms x;
f = 3*x^3-2*log(x);
g = 9*x^2 - 2/x;
isAlways(f == g)

返回值为0,但是。
isAlways(diff(f,x) == g)

返回 1

在使用isequalnisAlways时,利用假设是个好主意。还有有趣的sym/logical:

syms x;
isAlways(1 == sin(x)^2+cos(x)^2)

返回 1,但是。
logical(1 == sin(x)^2+cos(x)^2)

返回 0 是因为在比较之前它没有简化表达式。


1
f = 3 x^3 - 2 Log[x];
g = 9 x^2 - 2/x;
PossibleZeroQ[f - g]
PossibleZeroQ[D[f, x] - g]
D[f, x] == g





通常情况下,您需要在直接相等测试中使用Simplify。 - agentp
我赞同George的建议,只使用PossibleZeroQ作为快速初步检查。你真正应该使用的是SimplifyFullSimplify。你会发现,由于你所做的隐含假设,这些函数经常无法确认看似正确的关系,这与Horcher在他的答案中使用Matlab符号工具箱所述类似。你可以使用Assumptions选项让Mathematica了解这些限制。 - Albert Retey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接