本文,学习一下用Mathematica处理循环和迭代的问题。不过,这次我要参照“苹果”制作的视频《迭代&扩展的24点程序》,所以有点“PiaoQie”的嫌疑!希望“苹果”不要责怪!
工具/原料
电脑
Mathematica
循环
1、我们逐吴哉姆可以用Table来列出前10个整数的立方:Table[i^3,{i,10}]这其实是给出了前10个整数的立方的列表,还可以求出50到100之间所有3的倍数的沐戾垛纾立方、500到1000之间所有55的倍数的平方:Table[i^3,{i,51,100,3}]//Column
2、用Do给出前10个整数的平方:Do[Print[n^2],{n,10}]//TraditionalForm注意:Do自己是不会返回任何结果给你的,需要结合Print才行!而且,返回的结果不是列表。再试试:Do[Print[n^10],{n,10}]
3、用For求出0到10这10个数的5次方:For[i=0,i<11,i++,Print[i^5]]这个For的用法,与C语言的用法差不多。
4、类似地,用While给出1到10这10个数的6次方:n=1;While[n<11,Print[n^6];n++]这里,先运行Print[n^6],再运行n++,然后循环。
5、用Map给出前10个数的平方:Map[#^2&,Range[10]]注意:Map可以用/@代替;#^2&是纯函数。你还可以试试——Sqrt[#]&/@Range[10]//Column//N
迭代
1、计算2的100次方,可以直接输入——2^100,运行即可。但是,也可以麻烦点,用Nest(迭代、嵌套)来计算:(Nest[#*2&,x,100]//TraditionalForm)/.x->1
2、用NestList看以看到迭代的每个步骤:NestList[#*y&,x,100]//TraditionalForm运行结果是:{x,xy,xy^2,xy^3,后面的就不去一一列举了}
3、给出一个连分数:Nest[1+1//#&,x,20]//simplify式子化简之后,得到一个分式——(6765+10946x)/(4181+6765x),它的图像如下图。
4、有条件限制的迭代:NestWhile。求大于1099瀵鸦铙邮6的最小素数:NestWhile[#+1&,吭稿荔徊10996,!PrimeQ[#]&]!PrimeQ表示非素数,代码的执行过程是——当迭代的值不是素数的话,进行下一次迭代,否则停止迭代,并返回最终结果(本例是11003,英语读作eleventhousand,three)!那么,11003是第几个素数呢?在下面第六部能看到答案!
5、求大于10996的最小的一对孪生素数:鲍伊酷雪NestWhile[#+1&,10996,!PrimeQ[#1]||!PrimeQ[#3]&锾攒揉敫amp;,3】代码的执行过程——每当进行三次迭代,迭代值的第一个数和第三个数不都是素数的时候,进行下一次迭代,否则停止迭代,并返回孪生素数里面较少的素数(11059,说明:大于10996的最小的一对孪生素数是11059,11061)!
6、判断小于1廴类锾渭0996的最大的Fibonacci数是第几个Fibonacci数:NestWhile缪梨痤刻[[(#+1)&,1,Fibonacci[#]<=10996&]]答案:小于10996的最大的Fibonacci数是第22个Fibonacci数——17711=89*199。而且,第四步的问题,11003是第1136个素数。
7、看看具体的迭代步骤:NestWhileList[(#+1)&,1,Fibonacci[#]<=10996&】