2013-11-19 2 views
4

У меня есть код, который мне нужно запускать как в MATLAB, так и в Freemat, используя различные служебные функции в каждом случае. Чтобы все это переносилось, мне нужно найти способ определить, какие функции вызывать в начале моего кода, в зависимости от того, в какой среде я нахожусь.Как сказать MATLAB от Freemat программно?

Как это сделать?

Я думал об использовании команды , но не слишком уверен, действительно ли это действительно надежное.

ответ

3

Использование verstring в контексте try \ catch, выход в MATLAB будет ошибка в то время как в Freemat это будет что-то вроде «Freemat 4,0», например:

try 
    txt=verstring; 
    output='Freemat'; 
catch err 
    output='Matlab'; 
end 
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