在苹果机上装了Windows

2007/02/27 - 5 条留言

到了新地方后,换了一个机器。新买了一台MacBook Pro。本来想买个台式的Mac Pro来着,可是现在的地方比较狭窄,想了想还是用笔记本当台式机用吧。于是就选了个最快最大的,17寸,然后把内存也加到上限,3G。这样感觉也不次于一般的台式机了。可是新机器也是有些烦恼。

主要就是因为Intel的CPU造成的“代沟”。很多软件都迅速的变成Universal的来对应IntelCPU。可不知为啥,我最常用的Matlab却还未对应Intel-based Mac。开始不知道,买来最新的R2006b却装不上,仔细一看说明书,才知道这个无奈的事实。上Mathworks的主页一查,据说对Intel-based Mac的支持将从R2007a版本开始,计划于今年3月份推出。在那之前怎么办呢?我想到的唯一的方案就是把这个Matlab装到Windows上。

于是,在苹果网站下载了Boot Camp beta,找来Windows XP的安装盘(因为最新的Vista恐怕也会和以前的软件有“代沟”,所以还是用XP比较安全),根据提供的说明书,非常简单,昨天晚上的时间就全部搞定了。先是刻录一张Machitosh driver CD;然后为Windows划出分区,按照FAT格式化可以使其在Mac下也可读;接下来就是安装Windows了;最后把驱动程序的CD放进去执行,不管出现多少警告都继续下去;再重新启动,就大功告成了。开机时按住option键就会出现启动选项,可以进入任何一个。在Mac下可以看到Windows所在分区的内容,但反过来不行,所以有点儿后悔分给Windows的空间有点儿小了。

今天在这个WindowsXP下安装了Matlab以及其他一些软件,一切正常,没有因为这是个Mac而出现错误。唯一有些不便的是触摸板和键盘的用法有些别扭,需要稍微适应一段时间。

Matlab on Powerbook

2005/07/07 - 9 条留言

Matlab是我使用的主要编程工具,新的Powerbook上自然也要安装,正巧也有网友留言问到,今天做一个简单的评价。

实验室有MatlabR14的正版,可以同时支持两个用户,Matlab买来就是两套光盘,一套是针对Windows,另一套是针对Unix和MacOS。在MacOS上安装Matlab需要X11的支持,而Tiger默认并没有安装。所以要先找出Tiger的光盘选择option安装,把80多兆的X11装上。据说有了这个,基本上Unix上可以跑的程序就都可以在Mac上跑了。然后就是安装Matlab,配制license文件等操作,今天早上分别在两台机器上运行了一下。

测试环境:

1,DELL工作站(两三年前买的老机器了),Optiplex-SX260,P4-2.4GHz / 512MB / Windows2000-SP4英文版。

2,Apple-Powerbook笔记本,M9677J/A,PowerG4-1.67GHz / 512MB / MacOSX-10.4.1

运行程序前两台机器均关闭了其他程序。程序并不是什么专业的测试,就是我自己写的一个弱智程序,对分段定义的微分方程进行数值求解,然后显示相轨迹和波形,为了使运算时间加大以便看出差距,让其计算1000个周期。结果如下:

Dell运算了100秒完成;Powerbook运算了109秒完成。

以上数据还用我说什么么?一个2.4G的工作站比一个1.67G的笔记本只快了10%左右,应该是Powerbook胜出了。这种快不知道是因为PowerG4的CPU?还是因为操作系统优秀?还是乔布斯喜欢微分方程?如果是CPU强,那以后苹果采用Intel的芯之后还会有次性能么?

结论:苹果非常有营养!!

[注] 此文中的测试虽然并无编造,全为事实,但并不专业,也不权威,纯属个人体会。

[另] 针对MacOS的盗版Matlab恐怕没有,望用户权衡成本后选购。

SciLab学习笔记(1)

2004/09/27 - 11 条留言

刚刚读了一点筑波大学的樱井铁也写的《通过MATLAB/Scilab来理解数值计算》(日文)。将要点整理于此,供感兴趣的同学及自己参考。

  1. 在Matlab中,如果一个变量有赋值,比如t=20,那么可以写“2t”就为40。而Scilab里面直接写“2t”不可以,要加上*,即为“2*t”。(多谢D.D.留言订正!2004/09/28)
  2. Matlab的注释是用“%”引导;在Scilab里面是“//”。
  3. 一些预设的变量的表示方法不同。比如圆周率pai在Matlab里面就是“pi”,而在Scilab里面要加上“%”,也就是说,调用圆周率的时候要写“%pi”。类似的还有:虚数在Matlab里可以是“i”或者“j”;而在Scilab里面为“%i”(“%j”好像不可以)。例外的是默认变量“ans”,两者都不需要加百分号。
  4. 操作符的用法如:加减乘除,大于小于等大多一样。唯一例外是“不等于”,在Matlab里是“a ~= b”;在Scilab里是“a <> b”或者“a != b”。
  5. 程序的编辑与执行的不同。Matlab中如果编辑sample.m文件,敲入:edit sample即可。执行时也就是输入:sample。而在Scilab里要复杂些。启动编辑器为“scipad();”,执行保存后的文件如sample.sci要输入“exec('sample.sci');”。
  6. 两者在矩阵的定义与矩阵元素的调用上都差不多。唯一不同的是对矩阵的最后一个元素的调用。在Matlab里,“最后”这个不定变量为“end”,而在Scilab中为“$”。例:矩阵u=[1,2,3];。要调用最后一个3时命令为:u(end)——Matlab;u($)——Scilab。
  7. 在矩阵的运算上也大多相同。不同点在length和sum命令上。Matlab中length输出矩阵行或者列中元素较多的一个的元素个数,sum输出各个列相加的和;在Scilab中length为整个矩阵的元素数,sum输出全部元素的和。在Scilab中如果要输出各列或者各行的元素和要在sum命令里加上参数,如:sum(A,'r');或者sum(A,'c');
  8. 方阵的构造在Matlab中是要一个参数,如:zeros(2);是一个二乘二的零矩阵,eye(3);是三乘三的单位矩阵。在Scilab里需要将两个维都写出来,即:zeros(2,2);eye(3,3);

SciLab

2004/09/27 - 6 条留言

前几天在研究Matlab的时候顺便发现了一个软件叫:Scilab。现在已经出到了3.0。这个软件最大的特点就是:免费!

Scilab是由法国的国立研究机构INRIA(Institut Nationale de Recherche en Informatique et en Automatique)开发并发行。在其主页上可以免费下载。和Matlab一样,内置了大量的数学计算函数,可以很方便的对结果进行可视化处理,语言上和Matlab的格式有很多相似之处,并提供了一些互相转换的功能。

下载的尺寸很小,十几兆。安装后因为还不太会用,所以四处寻找资料,Scilab提供的参考也有不少,但是英文和法文的居多,汉语的非常之少。同时我也找到了些日文的资料,还到图书馆借到了一本对比Matlab和Scilab来讲解数值计算的书。打算研究研究,并会不定期将有用的东西写下来,与有兴趣的同学们一同研究研究。

eval命令中的单引号

2004/06/30 - 1 条留言

在MATLAB的字符串中,对于单引号的使用有点儿乱。

但是基本上是一个大原则:字符串中的单引号,用两个单引号来定义(不是一个双引号)

例如:disp('M')可以在窗口输出一个M。那么如果我要输出一个'M'的话,就需要用如下命令:

disp(' ''M'' ');

这时,如果使用eval命令的字符串里面有单引号,就更麻烦了。

eval(‘disp(”””M”””)’);%%注意:每两个引号中间不可以象disp那样有空格!

输出’M’。同样的功能还可以写成如下格式:

eval([‘disp(‘,””,””’M””’,””,’)’]);

利用结构来实现赋值

2004/06/29 - Comments Off on 利用结构来实现赋值

需要解决的问题是:针对不同的系统,想要为不同的系统参数来进行赋值,而每个系统的参数的名称可能不同,比如对于电路可能有C, L, R等,对于其他的系统可能会变成密度或者人口之类的其他名字。那么怎么能够将这个名称以及名称所对应的数值一次传递呢?

这里面我选择了结构(structure)来实现。也不知道好不好,但是功能上应该是没有问题了。

结构可以按照field name来组织不同类型的数据,那么可以用如下命令来定义一个10uF的电容和33mH的电感:

parameter = struct(‘C’, 10e-6, ‘L’, 33e-3);

C和L就是field name。可以用如下命令来取得field name:

names = fieldnames(parameter);

这里的names的类型是cell,cell类似于一般矩阵,但是每个元素可以是很复杂的其他类型的数据。这里就是要注意的一点,为了提取每个参数的名字的字符串(char),不能用names(1);这样的指令,这样取得的还是一个cell。提取cell中的元素为他本来的格式需要用“{}”而不是“[]”。

因此,我们就可以只传递一个parameter的结构,然后用如下代码:

names = fieldnames(parameter);
for i = 1:length(names),
   eval([names{i}, ‘= parameter.’, names{i}]);
end

就可以得到类似于:C=10e-6; L=33e-3; 一样的赋值效果。但是这样的好处是(1)方便传递参数,(2)方便不同的系统的通用性,(3)不必具体考虑参数的名字与数值之间的对应关系,(4)可以方便地实现大量参数的多次赋值。