4

それぞれ異なるサービス関数を使用して、MATLAB と Freemat の両方で実行する必要があるコードがいくつかあります。全体を移植可能にするには、現在の環境に応じて、コードの開始時に呼び出す関数を決定する方法を見つける必要があります。

どうやってそれを行うのですか?

versionコマンドを使用することを考えていましたが、これが本当に堅牢かどうかはわかりません。

4

2 に答える 2

3

\verstringのコンテキストで使用すると、matlab の出力はエラーになりますが、Freemat では「freemat 4.0」のようなものになります。次に例を示します。trycatch

try
    txt=verstring;
    output='Freemat';
catch err
    output='Matlab';
end
于 2013-11-19T21:35:15.317 に答える
2

それぞれを特定しようとし、不明な場合はエラーを出すか、そのような場合はユーザーに手動で特定するように依頼します。

% try to identify if it is freeMat
isDefinatelyFreeMat = false;
try
    versionIdentifier=verstring;
    if (strcmpi(versionIdentifier(1:7), 'FreeMat'))
        isDefinatelyFreeMat = true;
    end
catch e
end

% try to identify if it is Matlab
isDefinatelyMatlab = false;
try
    versionIdentifier=ver;
    if (strcmpi(versionIdentifier.Name, 'Matlab'))
        isDefinatelyMatlab = true;
    end
catch e
end

% if identification was not successful
if ((isDefinatelyFreeMat && isDefinatelyMatlab) || (~isDefinatelyFreeMat && ~isDefinatelyMatlab))
    error('Was unable to identify software.');
    % TODO: Ask user to identify software manually
end
于 2013-11-20T08:00:09.380 に答える