MATLAB

出自Ubuntu中文

目錄

[編輯] MATLAB

原文出處:

原文作者:

授權許可:

翻譯人員:WeiTao ChengZhang gosman

校正人員:

貢獻人員:

適用版本: 文章狀態:等待翻譯



[編輯] Prerequisites

At a minimum, you don't need much to run MATLAB. It will run in the console without X just fine, though naturally missing some functionality such as graphing. Most users, however, use many of the bells and whistles. The Prerequisites section is made with that in mind.

為了使用 MATLAB 桌面,嚮導,Simulink ,和很完美的圖像,你需要安裝 Java ,並且在你的路徑內可以執行。如果你沒有,你必須從終端中運行,這個並不好。最快檢測你是否擁有 java 路徑的方法是在終端中運行 which java.。如果它返回了例如 /usr/local/bin ,那是正常的,否則你需要按照 Java How-To 的說明來配置。

You will get far better performance making complex graphs if you are using hardware rendered openGL. In other words, a videocard. Open up a terminal and run the following command. Template:Grep Driver /etc/X11/xorg.conf If you have a line that says either fglrx or nvidia, you're in good shape. If you get ati or nv, you need to install the proprietary drivers for your card. If you get vesa, i810, or something else, you probably don't have a video card, and will just have to accept lower performance.

如果有 openGL 渲染的顯卡,製作複雜的圖形會有更好的性能。打開一個終端,運行命令Template:Grep Driver /etc/X11/xorg.conf。如果結果包含 fglrx 或 nvidia,那再好不過了。如果結果有 ati 或 nv ,您需要安裝專有的顯卡驅動。如果結果是 vesa ,i810 或其他,您可能沒有安裝顯卡,將只有較低的性能。

[編輯] 安裝MATLAB

[編輯] 安裝MatlabR2008a

安裝MatlabR2008a

[編輯] 其它未知版本

MATLAB 的安裝腳本不會從一個加載的光驅上運行。Oddly, this is not due to default settings mounting cd-drives with -noexec, but some mystical and poorly understood voodoo. The cure is to copy the disk to your harddrive, and then run the install. To copy the disk, open a terminal and type the following

MATLAB 的安裝腳本不會從一個加載的光驅上運行。奇怪的是,這並不是掛載光驅時的默認選項 -noexec 造成的,而是其他令人捉摸不透的原因。解決辦法是複製光盤的內容到硬盤,然後運行安裝程式。要完成這個操作,請打開終端並運行以下命令:

sudo cp -R /media/cdrom0 /tmp/matlab

一旦複製完畢,在終端輸入

sudo sh /tmp/matlab/install_unix.sh

這將加載圖形化的安裝程式。For your root directory, enter /usr/local/matlab, and agree to make the directory. Then click the box labelled Create symbolic links to MATLAB and mex scripts, and select /usr/local/bin. Continue with the OK buttons until it starts to install. Once it is installed, running the command matlab will launch the MATLAB UI.

你可以使用附加的選項來啟動 MATLAB ,在 matlab -option 的格式里。這裡有一些常用的選項。

-nodesktop             在一个终端里启动 MATLAB 而没有图形界面 - 加载的非常迅速。
-nosplash              在启动 MATLAB 时不显示启动界面。
-nojvm                 不启动 Java 支持。这也导致 -nodesktop.
-r "command"           启动 MATLAB 并执行给定的命令。
-h                     显示更多选项。

一個例子: matlab -nojvm -nosplash -r "1+1"

[編輯] 丟失cellfun.mexglx (以及其它文件)

如果你在一個安裝有 Ubuntu (Breezy Badger) 的 x86 機器安裝 Matlab (版本 7.0.1.24704 (R14) Service Pack 1),有可能會遇到文件 /etc/libc.so.6 的權限問題。這一般是由於用戶沒有執行權限,而這又是一些腳本所需要的。當一些腳本(安裝和開始腳本)嘗試查詢libc文件的版本的時候,得到的返回值是empty strings。由於這個原因,一些meglx文件沒有被安裝;同時當matlab啟動時,腳本 ${matlab_dir}/bin/util/oscheck.sh的運行會報錯:

/opt/matlab/bin/util/oscheck.sh: line 134: /lib/libc.so.6: Permission denied

文件 ${matlab_dir}/toolbox/matlab/datatypes/cellfun.mexglx 沒有安裝,這將導致在執行簡單命令,比如 ls ,的時候出現問題,例如,

>> ls
??? Attempt to execute SCRIPT cellfun as a function.
Error in ==> iscellstr at 13
res = cellfun('isclass',s,'char');
Error in ==> ls at 16
if iscellstr(varargin)

解決這個問題的辦法之一是修改腳本 ${matlab_dir}/bin/util/oscheck.sh 和腳本 ${matlab_install_cd}/install 的兩行。

${matlab_install_cd}/install 的697行

ver=`strings /lib/libc.so.6 | head -n 1 | sed -e "s/<sup>[</sup>0-9]*//" -e "s/[ ,].*$//"`

${matlab_dir}/bin/util/oscheck.sh 的134行

ver=`/lib/libc.so.6 | head -n 1 | sed -e "s/<sup>[</sup>0-9]*//" -e "s/[ ,].*$//"`

應當使用下列行來替代

ver=`strings /lib/libc.so.6 | grep "GNU C Library" | sed -e "s/<sup>[</sup>0-9]*//" -e "s/[ ,].*$//"`

對於一個 64 位機器,你應當必須編輯 install 的 713 行和 oscheck.sh 腳本的 150 行, respectively. 這些改變和上面描述的是相同的。

The need to edit an install script will necessitate copying the CD to the hard disk as described in a previous section. A more detailed explanation can be found here. This could help explain other problems with other missing or improperly linked .mexglx files.

[編輯] 符號工具不工作

To see if you're affected by this, either look at your MATLAB box and see if it says R13, or run the command vpa(pi,64). If it gives you the following error message

Unable to load mex file: /usr/local/matlab/toolbox/symbolic/maplemex.mexglx.
/usr/local/matlab/bin/glnx86/libmaple.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
??? Invalid MEX-file

You have the infamamously annoying NPTL bug. First, open up your text editor to the script which launches MATLAB. A good way to do that is

sudo gedit `which matlab`

Note the ` is not '. 找到不是#開頭的第一行(大概在 136行左右)。 在這行前面加上一行代碼: export LD_ASSUME_KERNEL=2.4.1, 之後你的文件形式應該如下:

#<u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u><u></u>__
#
export LD_ASSUME_KERNEL=2.4.1
arg0_=$0
#
# Temporary file that hold MATLABPATH code from .matlab6rc.sh file.
#
temp_file=/tmp/$$a
#
trap "rm -f $temp_file; exit 1" 1 2 3

保存並關閉編輯器, 再嘗試一次前面的操作。 If you want to double check that it worked, at the MATLAB command prompt run getenv('LD_ASSUME_KERNEL'), if it says 2.4.1 you're set.

[編輯] OpenGL 和 MATLAB

If you are having problems with openGL doing stupid things like rendering surface patches in the wrong order, or getting errors saying that OpenGL not available, using ZBuffer, and are using a version older than R14SP2, then you might have to do a bit of work to get things running right. The source for most of the thinking in this part is MathWorks

Once you've gotten the MATLAB desktop up and running, at the prompt enter the opengl info command, as in the following example:

>> opengl info
Version        = 2.0.0 NVIDIA 76.64
Vendor         = NVIDIA Corporation
Renderer       = GeForce FX 5200/PCI/SSE2
MaxTextureSize = 4096
Extensions     = GL_ARB_depth_texture GL_ARB_fragment_program GL_ARB_fragment_program_shadow ...

你的結果應當是和上面不一樣的,但最重要的部分是 Renderer 這一行。在我的例子中,它顯示了使用的顯卡的名稱。如果你使用了軟體渲染,那一行就會顯示 Mesa X11 。如果你有一個顯卡,但沒有得到硬件加速,你也許會需要使用 manufacturers 驅動,這個問題已經有很多相關文件了。

如果它不是你的顯卡的驅動,那麼打開一個終端輸入下列命令:

ldd /usr/local/matlab/bin/glnx86/glren.so

命令的輸出將展示你 openGL 的庫文件是否都在合適的位置。這裡是一個工作配置的輸出示例。

$ldd /usr/local/matlab/bin/glnx86/glren.so
libmx.so => not found
libut.so => not found
libmwudd.so => not found
libmwservices.so => not found
libGL.so => /usr/lib/libGL.so (0xb7f45000)
libGLU.so => /usr/X11R6/lib/libGLU.so (0xb7ecf000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0xb7ec2000)
libXp.so.6 => /usr/X11R6/lib/libXp.so.6 (0xb7eba000)
libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0xb7e6a000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0xb7da5000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7c78000)
libGLcore.so.1 => /usr/lib/libGLcore.so.1 (0xb750f000)
libnvidia-tls.so.1 => /usr/lib/tls/libnvidia-tls.so.1 (0xb750d000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb74ec000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb74e8000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0xb742e000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7423000)
libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0xb741a000)
libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0xb7402000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

如果你丟失了這個清單中的一個重要的庫,但它是安裝好的,那麼你需要為它創建一個鏈接。讓我們看這一行,libGL.so => not found。在一個終端中你要運行下列命令:

cd /usr/local/matlab/sys/opengl/lib/glnx86
dpkg -S libGL.so
ln -s /usr/lib/libGL.so libGL.so

The odds of you having this problem is fairly low if you are using the proper drivers for your videocard. If you cannot find the missing library, try to find and install it using apt-cache search <term>, where <term> is something like libXt.

If things still aren't working well, but do work kinda, the problem is probably MATLAB being silly and not using the right XVisual. We test this by opening up the MATLAB desktop and running the following code

hf=figure;
set(hf,'renderer','opengl');
get(hf,'xvisual')

這將返回一個字符串,例如 0x21 (TrueColor, depth 24, RGB mask 0xff0000 0xff00 0x00ff).。我們使用它來檢查 glxinfo,為了確認 MATLAB 不笨。

glxinfo | grep 0x21 | awk '{print $15}'

如果它返回了 24 (和 MATLAB 給出的深度相匹配),那麼一切都是正常的。如果它是 0 ,你需要為 XVisual 找另外一個值。最簡單的方法是使用 glxinfo 。

glxinfo | grep tc | grep y

選擇一個最後一列不是 Slow 的行 - 可能是 None ,並且在第 15 列是 24 的行。這是一個示例輸出。

0x21 24 tc  0 32  0 r  y  .  8  8  8  0  4 24  0 16 16 16 16  0 0 None
0x23 24 tc  0 32  0 r  y  .  8  8  8  8  4 24  0 16 16 16 16  0 0 None
0x26 24 tc  0 32  0 r  y  .  8  8  8  0  4 24  8 16 16 16 16  0 0 None
0x27 24 tc  0 32  0 r  y  .  8  8  8  8  4 24  8 16 16 16 16  0 0 None
0x2a 24 tc  0 32  0 r  y  .  8  8  8  0  4 16  0 16 16 16 16  0 0 None
0x2b 24 tc  0 32  0 r  y  .  8  8  8  8  4 16  0 16 16 16 16  0 0 None
0x2e 24 tc  0 32  0 r  y  .  8  8  8  0  4  0  0 16 16 16 16  0 0 None
0x2f 24 tc  0 32  0 r  y  .  8  8  8  8  4  0  0 16 16 16 16  0 0 None
0x32 24 tc  0 32  0 r  y  .  8  8  8  0  4 24  0 16 16 16 16  2 1 Ncon
0x33 24 tc  0 32  0 r  y  .  8  8  8  8  4 24  0 16 16 16 16  2 1 Ncon
0x34 24 tc  0 32  0 r  y  .  8  8  8  0  4 24  0 16 16 16 16  4 1 Ncon
0x35 24 tc  0 32  0 r  y  .  8  8  8  8  4 24  0 16 16 16 16  4 1 Ncon
0x3a 24 tc  0 32  0 r  y  .  8  8  8  0  4 24  8 16 16 16 16  2 1 Ncon
0x3b 24 tc  0 32  0 r  y  .  8  8  8  8  4 24  8 16 16 16 16  2 1 Ncon
0x3c 24 tc  0 32  0 r  y  .  8  8  8  0  4 24  8 16 16 16 16  4 1 Ncon
0x3d 24 tc  0 32  0 r  y  .  8  8  8  8  4 24  8 16 16 16 16  4 1 Ncon
0x42 24 tc  0 32  0 r  y  .  8  8  8  0  4 16  0 16 16 16 16  2 1 Ncon
0x43 24 tc  0 32  0 r  y  .  8  8  8  8  4 16  0 16 16 16 16  2 1 Ncon
0x44 24 tc  0 32  0 r  y  .  8  8  8  0  4 16  0 16 16 16 16  4 1 Ncon
0x45 24 tc  0 32  0 r  y  .  8  8  8  8  4 16  0 16 16 16 16  4 1 Ncon

如果我們選擇 0x26 來為 XVisual 使用。在 MATLAB 里設定,只需要運行

set(0,'defaultfigurexvisual','0x26');

添加到你的 startup.m 文件里,你將得到一個全新的 openGL 圖像。