在SageMath中定义符号表达式的条件表达式

2 投票
2 回答
1506 浏览
提问于 2025-04-17 05:04

在SageMath(版本4.7)中,我在笔记本里这样做:

var("x y")
dens(x, y) = 2 if y <= x else 0

这样做没有报错。但是,之后:

  • dens(1, 1) 返回 0
  • dens(1, 0.5) 返回 0
  • 还有其他类似的情况!

实际上,我找不到任何方法能得到答案 2

我到底哪里做错了呢?

2 个回答

0

piecewise 函数通常很有用:

你可以在这里查看相关信息:https://doc.sagemath.org/html/en/reference/functions/sage/functions/piecewise.html

另外,还有一个稍微不同的用法 from sympy import Piecewise,它可以处理符号条件。

不过,我觉得 sympy(它是 sage 的一部分)应该有符号的“if”表达式,但我在网上搜索“sympy symbolic if”时找不到相关内容。

4

你正在使用Sage的函数声明语法,比如说 f(x,y) = 某个东西,但在等号右边你放的却是一个Python表达式,而不是Sage表达式。这段代码在声明的时候就会被计算出来。我的意思是:

sage: var("x y")
(x, y)
sage: bool(y <= x)
False
sage: dens = 2 if y <= x else 0
sage: dens
0
sage: dens(x,y) = 2 if y <= x else 0
sage: dens
(x, y) |--> 0

如果你只是关心这个函数的值(比如说,你想画图),那么你可以直接使用Python函数。如果你想对它进行求导等操作,那就会比较复杂了,我很抱歉。

撰写回答