277283904 发表于 2024-5-4 11:31

参数管理器中的表达式怎么编写:当50小于多少时20等于多少?

或当50大于多少时20等于多少?

大西瓜 发表于 2024-5-7 23:20

277283904 发表于 2024-5-7 16:48
像这样的怎么写:当d1≤20时,d2不能少于2或等于3

返回结果这样表达有点不妥,返回的必须是具体的值,不能是大于等于2的区间。
d2不能少于2或等于3,可以理解成(不能少于2)或等于3,也可以理解成 不能(少于2或等于3)
一个是表示大于等于2,另一个表示大于等于2且不等于3

大西瓜 发表于 2024-5-6 18:55

嵌套的sign函数语句往往是可以化简的

d1<=50时为30,否则回20:
d2 =10*sign(1-sign(d1 - 50))+ 20

d1>=50时为30,否则回20:
d2 =10*sign(1+sign(d1 - 50))+ 20

d1=50时为30,否则回20:
d2 = 10 * (1 - abs(sign(d1 - 50))) + 20

277283904 发表于 2024-5-6 17:31

大西瓜 发表于 2024-5-5 20:12
d2=sign(sign(d1-50)+1)*20+(sign(50-d1)+1)*30
修正一下,这才是完整的表达式。谢谢!这段代码还是不太理解,sign函是怎么用,有例子说明吗?官方说明是符号函数(-1,0,1)。

大西瓜 发表于 2024-5-5 19:47

依据d1的值,返回d2的值吧?

大西瓜 发表于 2024-5-5 20:00

举个例子,当d1>=50时,d2=20;否则返回30
表达式是可以实现数值型分段函数的,有很强的技巧
d2=sign(sign(d1-50)+1)*20+30

大西瓜 发表于 2024-5-5 20:12

d2=sign(sign(d1-50)+1)*20+(sign(50-d1)+1)*30
修正一下,这才是完整的表达式。

277283904 发表于 2024-5-6 11:24

本帖最后由 277283904 于 2024-5-6 11:37 编辑

大西瓜 发表于 2024-5-5 20:12
d2=sign(sign(d1-50)+1)*20+(sign(50-d1)+1)*30
修正一下,这才是完整的表达式。
输入这段代码时出现错误

YueFeng 发表于 2024-5-6 14:50

d2=sign(sign(d1-50)+1)*20+(sign(50-d1)+1)*30
输入“=”后面的内容

277283904 发表于 2024-5-6 17:33

YueFeng 发表于 2024-5-6 14:50
d2=sign(sign(d1-50)+1)*20+(sign(50-d1)+1)*30
输入“=”后面的内容

谢谢!这段代码还是不太理解,sign函是怎么用,有例子说明吗?官方说明是符号函数(-1,0,1)。

大西瓜 发表于 2024-5-6 18:53

sign是符号函数,常见于信号分析中,也是所有编程语言具有的基本函数之一。非常有意思的构造函数,可以实现数值比较代替if数值返回或者分段函数sign(x)=x/ABS(x)=ABS(x)/x
页: [1] 2
查看完整版本: 参数管理器中的表达式怎么编写:当50小于多少时20等于多少?