开始学习数学软件Scilab
By 苏剑林 | 2012-09-28 | 40077位读者 | 引用其实很早之前我就想学习一款数学软件的使用,以前很感兴趣的是mathematica,也玩弄过一阵子,但毕竟在高中没有多大需要,也就没有坚持下来。更重要的是,这些软件都是要收费的。上了大学后,听了师兄姐对数学建模的讲述,发现他们基本上也是用mathematica或者matlab的,但这两个软件都是要收费的,我不大想用破解版本。既然我都已经用上了ubuntu了,那么我就该好好利用它。据说命令跟matlab很相似的软件是scilab,还有octave,不同的是这些都是开源免费的。
出于熟悉代码操作和数学软件编程的目的,我选择了学习scilab。虽然网上说octave与matlab的相似程度更高,但是我感觉scilab比octave用的更广一些,所以就用它。所谓“一理通百理明”,先专心学好一个。
下面是我编写的第一个scialb程序,利用威尔逊方法来进行素性测试。这个代码的主要目的是练习条件语句和循环语句,以及一些输出输入的技巧而已。程序本身比较丑陋。
//我的第一个scilab程序
//完成于2012.09.27
label1=['p:';]; //定义标签
B=x_mdialog(['本程序使用威尔逊方法判断进行素数测试。';'请输入要判断的数'],label1,['127';]); //输入框
p=evstr(B(1)); //提取输入框里边的数字进行赋值
i=1;
j=1;
q=p-1;
while i<q
j=j*i;
j=modulo(j,p);//这个是模函数。
i=i+1;
end
if j==1
messagebox(['这是一个素数';],['测试结果']); //输出,其中后边的“测试结果”是输入框的标题
else
messagebox(['这是一个合数';],['测试结果']);
end
昨天在上“科学计算软件”课时,讲到了一个“抢15”游戏(Pick15),就是在1~9这9个数字中,双方轮流选一个数字,不可重复,谁的数字中有三个数字的和为15的,谁就是赢家。
这是个简单的游戏,属于博弈论范畴。在博弈论中有一个著名的“策梅洛定理”(Zermelo's theorem),它指出在二人的有限游戏中,如果双方皆拥有完全的资讯,并且运气因素并不牵涉在游戏中,那先行或后行者当一必有一方有必胜/必不败的策略。比如中国象棋就属于这一类游戏,它告诉我们对于其中一方必有一种必不败策略(有可能和棋,有可能胜,反正不会输)。当然,策梅洛定理只是告诉我们其存在性,并没有告诉我们怎么发现这个策略,甚至连哪一方有这种最优策略都没有给出判别方法。这是幸运的,因为如果真有一天发现了这种策略,那么像象棋这类博弈就失去了意义了。
上述的抢15游戏当然也属于这类游戏。不同于象棋的千变万化,它的变化比较简单,而且很容易看出它对先手有着明显的优势。下面我们来分析一下。
一个人的数学建模:碎纸复原
By 苏剑林 | 2013-09-22 | 39462位读者 | 引用Mathieu方程
在文章《有质动力:倒立单摆的稳定性》中,我们分析了通过高频低幅振荡来使得倒立单摆稳定的可能性,并且得出了运动方程
$$l\ddot{\theta}+[h_0 \omega^2 \cos(\omega t)-g]\sin\theta=0$$
由此对单摆频率的下限提出了要求$\omega \gg \sqrt{\frac{g}{h_0}}$。然而,那个下限只不过是必要的,却不是充分的。如果要完整地分析该单摆的运动方程,最理想的方法当然是写出上述常微分方程的解析解。不过很遗憾,我们并没有办法做到这一点。我们只能够采取各种近似方法来求解。近似方法一般指数值计算方法,然后笔者偏爱的是解析方法,也就是说,即使是近似解,也希望能够求出近似的解析解。
最近评论