向量和矩阵是数值分析的基本构建模块 ,创建一个新的矩阵并将其存储在变量中,以便你可以日后参考它
octave:1> A = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ]
Octave会打印出一个严格列对齐的矩阵。Octave使用逗号或空格分隔行中的条目,和一个分号或回车分隔下一行。用分号结束命令,告诉程序不打印命令的结果。
octave:2> B = rand (3, 2);
将创建一个3行2列的矩阵,每个元素设置为零和一之间的一个随机值。
要显示变量的值,只需在提示符下键入变量的名称。例如,要显示存储的值矩阵中的'B',键入以下命令
octave:3> B
1.2.3 矩阵运算
Octave使用标准的数学表示法与低级语言的优势,这些优势可能是它们的运算符对标量、向量、矩阵或N-维数组的操作。例如,与矩阵'A'相乘,请键入命令
octave:4> 2 * A
‘A’和‘B’相乘,键入以下命令
octave:5> A * B
矩阵‘A’与其转置矩阵(A)'相乘,键入以下命令
octave:6> A' * A
1.2.4 解线性系统方程
数值分析中的线性方程组是无处不在。解决线性方程AX=b,使用除法运算符,‘\’
X = A \ b
这是概念上等同于 ‘inv (A) * b’但避免直接逆矩阵的计算。
如果系数矩阵奇异,八度音阶会打印一个警告消息,并计算最小范数解。
(未验证)。
一个简单的例子来自于化学和化学平衡方程。考虑燃烧氢和氧的化学反应。
H2 + O2 --> H2O
上面的公式是不准确的。 根据质量守恒定律,平衡方程两边,每种类型的微粒的数量是相等的。编写方程:
x1*H2 + x2*O2 --> H2O
H: 2*x1 + 0*x2 --> 2
O: 0*x1 + 2*x2 --> 1
Octave中的解决方案只需三个步骤:
octave:1> A = [ 2, 0; 0, 2 ];
octave:2> b = [ 2; 1 ];
octave:2> b = [ 2; 1 ];
1.2.5 结合微分方程
Octave具有内置函数用于求解非线性微分方程
dx
-- = f (x, t)
dt
已知初始条件
x(t = t0) = x0
对于Octave,为了整合像这样形式的方程,您必须先提供一个定义的函数'f(x,t)'。可通过命令行直接输入函数体来完成。例如,下面的命令定义了右侧一个有趣的非线性微分方程的方法,请注意,虽然您正在进入一个函数,Octave有不同的提示作出响应,以表明它正在等待你完成你的输入。
octave:1> function xdot = f (x, t)
>
> r = 0.25;
> k = 1.4;
> a = 1.5;
> b = 0.16;
> c = 0.9;
> d = 0.8;
>
> xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
> xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
>
> endfunction
给定初始条件
octave:2> x0 = [1; 2];
和输出时间为一个列向量的设置(注意,第一个输出时间对应于上述初始状态)
octave:3> t = linspace (0, 50, 200)';
很容易整合微分方程组
octave:4> x = lsode ("f", x0, t);
方法'lsode'使用利弗莫尔求解常微分方程
1.2.6 图像输出
以图形方式显示解决前面的示例,请使用以下命令
octave:1> plot (t, x)
Octave将自动创建一个单独的窗口来显示
需要保存屏幕上的图像,用以下命令
print -dpdf foo.pdf
将创建一个文件名为'foo.pdf',包含可移植文档格式的电流图的渲染。
help print 会获得更多关于print的信息。