liangbch 发表于 2017-12-11 20:29:23

Mathematica赋值语句不工作

我写了一段代码,求不同精度下Log函数的值,结果发现,在循环体外,赋值语句不工作,总是显示“tag Times in `xxxxis Protected. >>” , xxxx是要赋的值。
经过多次试验发现,仅仅循环外的第1条语句不工作。而且令人奇怪的是,在赋值语句之前插入一条一个Print语句,就可以正常工作了。下面是我的代码Print["Mathematica:",$VersionNumber];

digArr={20,30,40,50,60,70,80,90,100,125,158,199,251,316,398,501,630,794,
1000,1258,1584,1995,2511,3162,3981,5011,6309,7943,10000,17782,31622,56234,100000};

testTimes=7;
For ,i++,
prec=digArr[];
n=IntegerPart]];
x=N-1,prec];
y=N,prec];

j=n;
For [totalTime=0.0, totalTime<0.5, j*=2,
        n=j;
    totalTime=(Timing,{n}]][]-AbsoluteTiming][]);
   (* Print["n=",n];
    Print["totalTime=",totalTime];*)
]

For [minT=10^9; maxT=-10^9; timeSum=0.0;j=1,
    j<= testTimes,j++,
    (*totalTime=Timing,{n}]][]-Timing][];*)
    totalTime=AbsoluteTiming,{n}]][]-AbsoluteTiming][];
        (* AbsoluteTiming get more higher time resolution ratio *)
    totalTime*=1000;
    (*Print["totalTime is ",totalTime, "ms"];*)
    timeSum += totalTime;
    minT=Min;
    maxT=Max;
]
Print[""];
t=(timeSum-(minT+maxT))/(testTimes-2);
Print;
]



liangbch 发表于 2017-12-11 20:35:52

关于程序的解释。
1. 程序求各种不同精度下的Log函数的耗时。
2. 每个精度下,测试7次,去掉一个最大值,去掉一个最小值,求其余5次测试的值。
3. 对于每次调用Log函数,首先做一个测试,求出一个合适的n值,使得重复调用n次Log函数所花费的时间大于0.5秒。
4. 在我的运行环境,如果去掉倒数第三行那个Print语句,其后的赋值语句不工作。与Print的内容无关,也与赋值语句等号左边和等号右边的内容无关。

liangbch 发表于 2017-12-12 16:08:17

各位 Mathematica 资深用户,能否帮我看看?,到底是什么问题,是我的环境的问题? 还是Mathematica的问题?还是我不了解Mathematica的某些特性而写的代码有问题?

hujunhua 发表于 2017-12-13 09:44:11

我试了一下,没有任何问题

gxqcn 发表于 2017-12-13 11:17:57

我在 WinXPSP3 & Mathematica9.0.1.0 下测试(原谅我还在用这么古老的系统),
即便注释掉第一行Print语句,运行也是正常的。

chyanog 发表于 2017-12-13 12:00:21

出现“tag Times in `xxxxis Protected. >>” 应该是For后面没有加分号的原因;
第一个For改用Do更好,Do

liangbch 发表于 2017-12-14 09:02:38

gxqcn 发表于 2017-12-13 11:17
我在 WinXPSP3 & Mathematica9.0.1.0 下测试(原谅我还在用这么古老的系统),
即便注释掉第一行Print语句 ...

确实够老的,不过,我也挺保守的。如果没有发现什么问题,总不愿意用新的。

liangbch 发表于 2017-12-14 09:05:52

chyanog 发表于 2017-12-13 12:00
出现“tag Times in `xxxxis Protected. >>” 应该是For后面没有加分号的原因;
第一个For改用Do更好,D ...

chyanog 和 hujunhua所言极是。增加一个分号,问题就解决了。
这是我的第一个Mathematica程序,带有明显的C语言风格。

wayne 发表于 2017-12-14 09:56:44

liangbch 发表于 2017-12-14 09:02
确实够老的,不过,我也挺保守的。如果没有发现什么问题,总不愿意用新的。

哈哈哈,我依然还是严重的更新党. 
琢磨了下,之所以喜欢更新,主要还是因为习惯从软件开发者的视角看,更新就是更加的新,^_^
页: [1]
查看完整版本: Mathematica赋值语句不工作