515872841 发表于 2010-5-29 10:47:51

关于函数引用的问题

我刚刚开始接触fish函数遇到一个问题
以下两组代码
def kaiwa
a=9.9-5.3*12.2/30
b=13-5.3*12.2/30
c=9.9-5.3*15/30
d=13-5.3*15/30
;a=7.745 b=10.845 c=7.25 d=10.35
end
kaiwa
model null range x 12.2 15 y 0 30 z a b
model null range x 15.0 17.8 y 0 30 z c d

model null range x 12.2 15 y 0 30 z 7.745 10.845
model null range x 15.0 17.8 y 0 30 z 7.25 10.35
图像如图所示

左边是第一组代码生成的 右边那个是第二组 怎么会不一样呢 差距还这么大

lookcity 发表于 2010-5-29 10:53:15

应该是数的精度问题, 导致定义的范围不同
print 一下 a b c d和第二个代码中的数值对比一下就明白了

515872841 发表于 2010-5-29 11:21:41

谢谢你的帮忙 我print了一下 只有b的值 a c d的怎么都没有呢 不知道怎么整的

sdustqh 发表于 2010-5-29 11:26:17

1# 515872841

看你的那几个式子中,除号后面30都是整数,这样计算的时候小数点后面的数可能就被去掉了。所以,你把30换成30.0试试。

按现在算的话,应该是a=7.9 b=11 c=7.9 d=11吧,呵呵,你可以print 一下,看看结果

515872841 发表于 2010-5-29 11:27:18

附件里是整个模型的两部分代码 模型和开挖的 有兴趣的就看一下吧 1

515872841 发表于 2010-5-29 11:35:53

上次没有成功上传成功 这次再试试

515872841 发表于 2010-5-29 11:41:49

不是 改成30.0 也不好使

linxingchao 发表于 2010-5-29 20:12:53

本帖最后由 linxingchao 于 2010-5-29 20:39 编辑

试验了一下,不知道这样的解释对不对。

换一下变量就可以了,其中a、c、d已经被命令流默认使用了,因此fish中对这些变量的操作是无效的。
print d 的结果是“Dynamic model not available”,意思是动力模型没开启,无法显示变量d。那么可以认为d是动力计算模块中一个默认的一个量,通过这点判断a、c也是同样情况,变量名已经被占用。

我将a、b、c、d改为a1、a2、a3、a4就可以得到正解。

将26个字母试了一遍,除了a、c、d外还有f、g、h、i、m、n、r、s、t、v、w、z是不能使用的。

总结一句,fish中变量命名最好两个或两个字符以上!:)

科技大虾 发表于 2010-5-29 22:51:02

几位大侠研究得真是透彻~

lookcity 发表于 2010-5-30 08:20:59

试验了一下,不知道这样的解释对不对。

换一下变量就可以了,其中a、c、d已经被命令流默认使用了,因此fish中对这些变量的操作是无效的。
print d 的结果是“Dynamic model not available”,意思是动力模型没开 ...
linxingchao 发表于 2010-5-29 20:12 http://forum.simwe.com/images/common/back.gif
哈哈 和我昨天的研究结果是一样的
我是将 a b c 改成了aabb cc 之后变量计算结果就正确了
能将26个字母试一遍确实很有耐心研究精神可嘉啊

515872841 发表于 2010-5-30 12:14:52

呵呵 你们都牛 我也试了一下 是那么回事呢 呵呵 谢谢大家了
页: [1]
查看完整版本: 关于函数引用的问题