- 积分
- 24
- 注册时间
- 2004-5-27
- 仿真币
-
- 最后登录
- 1970-1-1
|
Mathematica软件功能强大,虽然现在已有中文的帮助文档,要把帮助文档全部吃透是很难的,有时候如果一些细节问题没有搞清楚,虽然M可以给出结果,但不一定是正确的,有些时候直接无法计算信息。因此还有很多细节的问题要自己摸索,现把本人在使用M的过程中的心得与大家共享。
也希望大家能多发表些使用心得的贴子,这对于对M的学习非常有帮助。计算分析常常一个符号,一个数字决定着结果的成败。
1 因为for循环在程序中应用很多。以下为常遇到的问题。在For循环中,即For[i=1,i<n,i++,body]最后一次计算,当i循环到第n次,即i=>n时,则此时计算中止,所以在for循环中,此时在test即程序中(i<n)后面的出现的i值为第n-1次加1时的值即i=n-1,而在for循环外,所有语名中包含i的值为i第n次加1即i=n时的值,这一点非常重要。总之,循环结束时,循环内与循环外的i 值是不同的。可利用下式进行试算。vv[8],vv[3],ff[10],分析输出结果。
vv[n_] := (For[i = 1, i < n, i++, If[(i - 8) > 0, Break[]]];
If[ i > 8, Print[i + bb], Print[i + aa]]; i)
2 对于利用for定义的函数,返回值为最后一个;后面的表达式的i(如下例i),而不是print结果.但执行的定义的函数时,相当于执行所定义的语句,可以输出print的结果及返回值。
ttt[x_] :=
Module[{tt1}, (For[i = 1; tt1[0] = b, i < x, i++,
tt1 = m tt1[i - 1]; Print[i + c]]; Print[i + d]; tt1)]
3 如下式:
ttt1[x_] := Module[{tt1}, (For[i = 1; tt1[0] = b, i < x, i++, tt1[i_] := tt1 = m tt1[i - 1]; Print[i + c]]; Print[i + d]; tt1)]
ttt2[x_] := Module[{tt1}, (For[i = 1; tt1[i_] := tt1 = m tt1[i - 1]; tt1[0] = b, i < x, i++, Print[i + c]]; Print[i + d]; tt1)]
ttt3[x_] := Module[{tt1}, (For[i = 1; tt1[0] = b; tt1[i_] := tt1 = m tt1[i - 1], i < x, i++, Print[i + c]]; Print[i + d]; tt1)]
当x=1时,ttt1运行到test时不满足条件,中断,因此此过程tt1[]函数仍未定义,所以tt1[x]未知,当x=2时,则整个过程执行了一遍,tt1得到了定义,所以tt1[x]也可以算出,因此,ttt1[1]未能算,而ttt1[2],ttt1[3],.....,则可以计算。这时再算ttt1[1]则可以计算,因为执行ttt1[x],x>1时,tt1[x]函数已被定义,并被计算机所记录,所以可以计算,若tt1为局部函数,则当退出函数时,tt1[x]函数仍为未知。因此定义函数最好使用module函数,否则可能会定义在不同的函数内部的函数相互交差。
|
评分
-
2
查看全部评分
-
|