# 10 分钟 (wx)Maxima 教程

欢迎来到 wxMaxima 的世界！本教程将引导你
学习 wxMaxima 和 Maxima 的基础知识。 Maxima 是一款计算机代数系统(CAS)软件，
类似Mathematica、Maple及其它软件。
不过 Maxima 是一个命令行应用程序，
相较同类软件入门较难，
于是 wxMaxima 应运而生—— 它是添加了
图形界面（GUI）的 Maxima ，简单易用。

先从简单的计算示例开始吧！ 下面是
一个简单的加法输入单元。 光标放在那一行，
同时按下 SHIFT-ENTER 进行计算。

1 + 1;

一般情况下，Maxima 不会收到错误信息。
如果出现错误，应检查 wxMaxima 的配置，或访问 wxMaxima 网站（http://wxmaxima.sourceforge.net/），
查看正确设置 wxMaxima 和 Maxima 的说明！

我们再做一些计算，再次将光标放在下面的输入单元中，
然后同时按下 SHIFT-ENTER ！

5!;
% * 10;
%o1 * 100;
1 / 3;
1.0 / 3.0;

上面的输入单元中，共有5行。 各行
须以 ; 或 $ 结尾。以;结尾时，Maxima
将显示该行的结果; 而用$作结束，则本行被
压制，转入下一行。多行运算时，$可派上用场。
另外要注意，1/3 和 1.0/3.0 的结果不同。
因 Maxima 与数值矩阵软件(如 Matlab) 不同，
为保证计算准确，默认没有估算，会输出如 1/3 或 sqrt(2) 这样的表达式。
特别要求下，如计算 1.0/3.0 时输出为浮点数。

不过，我们可以告诉 Maxima 输出带浮点的近似值。
估算下面的单元并观察结果。

sqrt(2 * %pi);
float(%);

在 “float(%);” 这一行， 我们使用了符号％ 。 符号%总是输出本行最后估算的结果。 编号％o1、％o2......为对应输入单元的输出结果。
变量不仅能存储数字，还能存储表达式。
使用“variable_name:value;”(注意冒号和分号为半角格式)， 将值(value)存储到“variable_name”中。
估算下面的单元，并观察结果。

radius: 10 $
height: 100 $
area: %pi * radius^2;
volume: area * height;

估算数值结果：

float(%);

目前为止，我们只是将 Maxima 当作一个计算器。 现在让我们试试普通计算器无法胜任的任务，
求解定积分和不定积分：

integrate( sin(x), x);
integrate( sin(x), x, 0, %pi);

我们来定义一个函数，并进行积分！

f(x) := x^2 + a$
f(5);
f(5), a = -5;
integrate( f(var), var );

有时Maxima需要额外信息来计算，它会进一步向我们提问， 此时出现一个自动指示光标。如果光标未出现，请在单元下方输入应答，
并按下SHIFT-ENTER确认。
注意：如果回答为正数(positive)，只需输入p; 反之，负数(negative)只需输入n。
 
下面是一道积分题：

integrate( 1 / (x^2 + a), x);

Maxima 可以使用函数 assume 来预设，取消预设时，使用函数 forget 。
注意：要获得任何函数的帮助，只需选取函数名，按下F1即可。

assume(a > 0)$
integrate( 1 / (x^2 + a), x);
forget(a > 0)$

你已学会了基础知识，是时候了解一些通用的数学例子啦！
 记住：想进一步了解某个函数，选取后按F1 。

使用函数 solve 解方程:

solve(a*x^2 + b*x + c = 0, x);

线性代数：使用函数matrix 创建矩阵。 使用函数invert来计算逆矩阵，点号(.)用于矩阵乘法。

A: matrix([1,-1],
          [1,sin(c)]);
B: invert(A);

A.B;
ratsimp(A.B);

上式最后一行，使用 ratsimp 来化简“A.B”。
Maxima 有很多不同的化简函数，若对此不太了解，可直接使用 ratsimp 。

绘制二维平面及三维立体图形：

wxplot2d([sin(x), cos(x)], [x,0, 2*%pi]);
wxplot3d( exp(-x^2 - y^2), [x,-2,2],[y,-2,2]);

使用函数 diff  进行微分计算：

f(x) := x^2 $
diff(f(x), x);
g(y) := sin(y)$
g(f(x));
diff( g(f(x)) , x);

是呀, Maxima 会运算链式法则QAQ 。

最后，我们来计算一个二阶常微分方程(ODE):
y''(t) + omega^2 * y(t) = 0

assume(omega > 0);
ode2( 'diff(y, t, 2) + omega^2 * y = 0, y, t );

ic2(%, t = 0, y = amp, 'diff(y,t) = 0 );

你可以自行探索 (wx)Maxima啦。再次提醒：如果需要帮助，请按F1。

恭喜你，已完成Maxima/wxMaxima入门教程！