Octave と MATLAB で同じようにうまく動作するコードを書く必要があります。問題は、MATLAB と Octave がまったく異なる方法で処理するいくつかの GUI 処理を行う必要があることです。
正しい関数を呼び出すために、MATLAB または Octave を実行しているかどうかを検出できる方法はありますか?
Octave と MATLAB で同じようにうまく動作するコードを書く必要があります。問題は、MATLAB と Octave がまったく異なる方法で処理するいくつかの GUI 処理を行う必要があることです。
正しい関数を呼び出すために、MATLAB または Octave を実行しているかどうかを検出できる方法はありますか?
次のテストを使用して、Octave と MATLAB を区別できます。
isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
公式 octave.org Web サイトの wiki にもヒントがあります。彼らは次のことを提案しています。
編集: Matlab のすべてのバージョンがコメントに「#」をサポートしているわけではないため、代わりに「%」を使用するように例を変更しました。Matlab R2018 (Linux) および Octave 4.2.2 で動作します
function foo
%% fancy code that works in both
if (is_octave)
%% use octave super_powers
else
%% do it matlab way
end
%% fancy code that works in both
end
%% subfunction that checks if we are in octave
function r = is_octave ()
persistent x;
if (isempty (x))
x = exist ('OCTAVE_VERSION', 'builtin');
end
r = x;
end
たとえば、ver コマンドを使用すると、次の結果が得られます。
MATLAB で:
MATLAB バージョン 7.7.0.471 (R2008b) オペレーティング システム: Linux 2.6.31-20-generic #57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686 Java VM バージョン: Java 1.6.0_04 with Sun Microsystems Inc. Java HotSpot (TM) クライアント VM 混合モード
オクターブで:
GNU Octave バージョン 3.0.5 GNU Octave ライセンス: GNU General Public License オペレーティング システム: Linux 2.6.31-20-generic #57-Ubuntu SMP Mon Feb 8 09:05:19 UTC 2010 i686
もう 1 つの可能性は、ライセンス機能を使用することです。
マトラブでは:
>> exist octave_config_info
ans =
0
オクターブで:
octave:3> exist octave_config_info
ans = 5