batch

用ruby写很方便

以前用matlab,但那样还得每次打开matlab环境才行,很麻烦

昨天找了半天,不知道怎么在ruby里面执行dos command,今天不小心找到了,用system函数

比如

system("dir")

system("dir xx") 

 

Advertisements

matlab的一些语法之三

匿名函数,以及函数对象

sqr = @(x) x.^2;

fhandle = @functionname

python中的lambda语句似乎就相当于matlab中的匿名函数。看来这东西在脚本语言里还挺流行的。下面是一个例子:

fplot(@(x) a*x.^2 + b*x + c, [-25 25])

fplot接受一个函数对象,打印这个函数的曲线。没有匿名函数似乎真的很麻烦。

下面是另外一个例子,同时还包括嵌套函数:

function fhandle = makeParabola(a, b, c)
% MAKEPARABOLA returns a function handle with parabola
% coefficients.

fhandle = @parabola;       % @ is the function handle constructor

   function y = parabola(x)
   y = a*x.^2 + b*x + c;
   end
end

用的时候,相当于给定三个参数生成一个函数对象,然后使用这个函数对象进行操作,比如:

h = makeParabola(1.3, .2, 30);

h(25)
ans =
  847.5000

Java里面可以这么做:第一种方式:定义一个类Parabola,三个成员变量a, b, c。然后调用成员函数。第二种方式:对于多种函数,定义一个接口。然后让Parabola实现这个接口。对于前面的fPlot。定义一个接口为interface F{double f(double x);}。这是面向对象的方式,好处不少。就是有时没那么简洁。

matlab的一些语法之二

bills = [patient.billing]
bills =
  127.0000   28.5000  504.7000

patient是一个结构数组,对应于c可以这么看:

struct PatientElem {
double billing
} PatientElem;
PatientElem patient[N];

matlab中的[patient.billing]就相当于[patient[1].billing patient[2].billing … patient[N].billing]。然后就可以做这样的操作:

total = sum ([patient.billing]);

matlab的结构类型

//虽然N年前就开始接触matlab,但今天才第一次好好看了一下帮助文档的编程介绍

MATLAB automatically builds the structure as you go along.
似乎没有必要定义什么struct的类型。似乎也无法定义。因为变量的类型在运行时是可以变化的。比如

a.b = 1

那么a就是个struct变量。它包含b这个成员变量。接着可以这么写:

a.c = 2

现在,a的成员变量又多了一项,就是c。再接着写:

a(2).b = 3

现在,a的类型是个结构数组。再接着写:

a(2).d = 4

现在,a这个数组中的结构类型有三个成员变量:b, c, d。a(1)中之前没赋值的成员变量自动定义为空。接着写:

a(3).b.e = 5

现在,结构类型又变化了,原先的成员变量b不再是数值型,而是一个含有成员变量e的结构类型。

//真是有意思