linux 下使用 matlab 的几个小提示
嗯,对的,MATLAB 有 linux 版本的,而且 mathematica、maple 等软件都有,而且在 linux 下这些软件利用资源的效率更高。
在 linux 下安装这些软件没有太大的问题,写这篇文章的目的是记录在安装使用 matlab 时遇到的一些问题和解决的版本。
安装
大部分都是直接使用桌面版本来安装 matlab 的。所以先说说这种方法。
安装无外乎以下几步:
- 下载到 iso 镜像:这个不用多说,自己找资源。
- 挂载或者解压:挂载使用
mount
命令即可。 - 使用命令行安装:运行目录里面的
install
脚本后就会出来图形界面,接下来的安装过程与 windows 下的安装过程没有什么区别了。 - 激活:参考资源内的说明文档。
如果需要在没有桌面的 linux 中安装 matlab,则需要编辑压缩包里面的 installer_input.txt
和 activate.ini
这两个文件,具体的安装过程请参考这篇文章。
终端使用 matlab
一般启动 MATLAB 使用如下命令:
matlab -nodesktop -nodisplay
跟启动相关的命令主要有如下几个:
-nodesktop: 启动 jvm (Jave Virtual Machine),不启动 desktop, 但 help 界面,preferences 界面等仍可通过 cmdline 调出,即 jvm 启动但不启动 desktop,可以启动其他显示; 但是 matlab 不会在 cmd history 记录本次执行的命令。
-nodisplay: 启动 jvm,不启动 desktop,不启动任何显示相关,忽略任何 DISPLAY 环境变量; 即 jvm 启动但不能显示。
-nojvm: 不启动 jvm,则与之相关的一切活动将无法进行,包括图形界面显示,help 界面,preferences界面等,即 jvm 不启动故不能显示。
-nosplash: 只是不显示启动时的log画面,jvm,desktop等正常启动
如果想在让在终端中实现画图,一般需要做以下两步:
- 使用
matlab -nodesktop
来启动 matlab; - 在脚本中添加
figure('Visible','off');
这样的句子来抑制画图窗口的弹出。 - 可以使用 print 来保存图片。例如如下的命令:
print(['pic/q01/q010',num2str(i)],'-dpng');
print(['pic/q01/q010',num2str(i)],'-depsc');
记得要提前使用 mkdir
创建好在上级目录,图片名称的次级目录如果不存在,matlab 会自动创建。
matlab 使用 gpu
matlab 里面对 gpu 的使用做了封装,如果需要使用 NVIDIA 的 gpu , 一般需要安装 Bumblebee, 然后使用 optirun
来运行。具体可以参考如下几个链接:
1.https://wiki.archlinux.org/index.php/NVIDIA_Optimus
2.https://wiki.archlinux.org/index.php/Bumblebee
matlab 里面可以通过 opengl info
来查看使用了什么 gpu。
几个常见问题
下面的几个问题常常与 matlab 自带的几个动态链接库有关。一般把这些库备份后,将系统中安装的对应包链接到 matlab 里面就可以了。具体的问题见下面的详细解释
帮助系统没有 CSS 渲染效果
字体问题常常与 libfreetype.so
这个动态链接库有关。所以解决办法无非以下几步:
sudo mv /usr/local/MATLAB/R2017b/bin/glnxa64/libfreetype.so.6 /usr/local/MATLAB/R2017b/bin/glnxa64/libfreetype.so.6.BAK # 备份
sudo ln -sf /usr/lib64/libfreetype.so.6 /usr/local/MATLAB/R2017b/bin/glnxa64/libfreetype.so.6 # 链接
libGL error for MATLAB
解决办法:
ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /opt/MATLAB/XXXXX(R2014b)/sys/os/glnxa64/libstdc++.so.6
# 或者执行
cd MATLAB_ROOT/sys/os/glnxa64/
sudo mv libstdc++.so.6 libstdc++.so.6.old
无法使用并行工具箱
解决办法同上,链接系统的 libstdc++.so.6
这个动态库。
matlab 无法使用系统中文字体
参考: https://bbs.archlinux.org/viewtopic.php?id=231299
cd /usr/local/MATLAB/R2017b # Matlab directory
cd bin/glnxa64
mkdir exclude
mv libfreetype* exclude
cd ../../sys/os/glnxa64
mkdir exclude
mv libstdc++.so.6* exclude
或者跟上面的解决方法类似,备份文件后做链接。