【问题标题】:Solving equations with logical expressions in Maxima在 Maxima 中用逻辑表达式求解方程
【发布时间】:2015-05-01 20:48:15
【问题描述】:

我正在尝试找到包含逻辑表达式的函数的解决方案,但到目前为止没有成功。

首先,我定义了几个函数:

isPlant(x) := is ((x = "tree") or (x = "grass"));
isAnimal(x) := is ((x = "cat") or (x = "dog"));
isLiving(x) := is (isAnimal(x) or isPlant(x));

接下来,我试图找到具有这些函数的方程的所有解,但没有得到任何解:

solve([Living(x) = true], [x]); //this returns an empty list instead of [x = "cat", x = "dog", x = "tree", x = "grass"]

在 Maxima 中是否有可能获得这些函数的解?

【问题讨论】:

  • Maxima 没有内置任何东西来处理这样的方程。我想也许Prolog 更合适。

标签: maxima clp


【解决方案1】:

求解函数假定域是一组数字。如果我们先指定域

(%i) domain : {"tree","grass","cat","dog"};
(%o)                     {cat, dog, grass, tree}

那么我们可以使用subset 函数来求方程的解。

(%i) subset(domain,lambda([x], is(isPlant(x)=true)));
(%o)                          {grass, tree}

您定义的函数是谓词,因此返回值true 和false,这意味着方程predicate(x)=true 等价于predicate(x)。例如,IsLiving(x)=true 当且仅当IsLiving(x)。因此,与其寻找方程predicate(x)=true的解的域元素,不如找到满足谓词的域元素,这样更简洁。

(%i) subset(domain,isLiving);
(%o)                     {cat, dog, grass, tree}
(%i) subset(domain,isPlant);
(%o)                          {grass, tree}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2014-12-08
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2017-06-08
    相关资源
    最近更新 更多