23

Komut satırı bağımsız değişkenlerini Linux/UNIX üzerinde çalışan bağımsız bir MATLAB yürütülebilir 'a nasıl aktarabilirim?Komut satırı bağımsız değişkenlerini Linux/Unix üzerinde çalışan bağımsız bir MATLAB çalıştırıcısına nasıl aktarabilirim?

MATLAB komutumun MATLAB olmadan bir makinede çalıştırılabilen bağımsız bir dosya olarak derlenmesi gerekiyor.

Komut satırında: Bu aşağıdakileri yapmanız C'ler argv[] benzer bir şekilde, çalışabilecek olması gerekiyor

argüman 1 ve 2 giriş ve çıkış dosyalardır
myfile argument1.txt argument2.txt 

.

Kesin sözdizimi önemli değil, ancak argv[] gibi çalışmalıdır. Bunu yapabilecek bir işlev nedir?


Demek Bilgisayarımda MATLAB var, ama bu bilgisayarlarda (yalnızca bir düğüm üzerinde MATLAB sahip olduğunu, bir küme var üzerinde MATLAB OLMADAN Unix sistemleri üzerinde çalışabilir bir bağımsız çalıştırılabilir yapmak gerektiğidir). Program çalıştıran bilgisayarda MATLAB yüklü olmadan varargin işlevini yapmak için bir yol bulmalıyım. MATLAB kitaplığına her bir yürütülebilir dosyaya MATLAB kitaplığı koyabiliyorsam, bu tamam, tek başına bir paket olduğu sürece sorun değil.

cevap

2

MATLAB'ı bir bilgisayarda MATLAB olmadan çalıştıramazsınız. Yüklemek için ücretsiz olan MCR'yi (MATLAB Component Runtime) kurabilir ve MATLAB programlarını çalıştırabilirsiniz. 'Bağımsız' bir yürütülebilir dosya oluşturmak için MATLAB derleyicisine de ihtiyacınız olacak. Bunlara sahip olduğunuzda, bir kere buna sahip olursunuz. MATLAB, komut satırı argümanlarını ihtiyaç duyduğunuz şekilde işlemek için ihtiyaç duyduğunuz tüm özelliklere sahiptir.

20

MATLAB web sitesinde, basit bir uygulamanın nasıl derleneceği ve başka bir bilgisayarda nasıl dağıtılacağı hakkında yönergeler bulunan bir worked-through example vardır. Özünde, uygulamanızla birlikte MATLAB Derleyici Çalışma Zamanı'nı yüklemeniz gerekir; çalışma zamanı için yükleyicisinin MATLAB derleyicinizde kurulumunda bulunması gerekir.

yürütülebilir bir tek MATLAB fonksiyonunu tanımlayan, MATLAB yürütülebilir komut satırı argümanları için: işlevine argümanlar emir hattı parametrelerine alınır (ilk komut satırı parametresi ilk parametre , ve bunun gibi).

Örneğin, aşağıdaki içeriği ile bir dosya echo.m oluşturun:

function exitcode = echo(a, b) 

display(a); 
display(b); 

exitcode = 0; 

Daha sonra bu dosyayı derlemek ve echo 1 2 3 ile çalıştırın ve a=1 b=2 yazdırılır olabilir. Eğer str2num işlevini kullanarak sayılara dönüştürmeniz gerekir böylece argümanları komut satırından alınır,

Not, bunlar dizeleri olarak işleve iletilen bulunmaktadır.Örneğin:

function rc = display_product(a, b) 

a = str2num(a); 
b = str2num(b); 

display(a*b); 

rc = 0; 
+0

İade edilen değerden ne haber? – guilhermecgs

1

Ben aynı sorunu vardı ve bir komut, argümanlar dizeleri olarak geçirilen sorununa genel bir çözüm aradık, ancak skalerler veya vektörler olarak gerekli. Eğer belki

myfunc(1, [1 2 3], 'optional1', 2) 

ve bunu derlemek ki

myfunc('1', '[1 2 3]', 'optional1', '2') 

yüzden de böyle

ve kullanım gibi adlandırmak mümkün istiyorum

function myfunc(arg1, arg2, varargs) 
end 

ve aşağıdaki işlevi olduğunu varsayalım komut satırında

012 Böyle myfunc yılında inputParser kullanmak mümkün Sonra

function r=evalArguments(parser, arguments) 
    % Evaluates parsed arguments' values. 
    % Given a parser containing parsed arguments, all string values of the 
    % arguments specified by parameter "arguments" are evaluated 
    % and the complete results is returned in a new struct. 

    r = parser.Results; 
    for j=1:length(arguments) 
     argValue = r.(arguments{j}); 
     if ischar(argValue) 
      r.(arguments{j}) = eval(argValue); 
     end 
    end 
end 

:

p = inputParser; 
p.addRequired('arg1'); 
p.addRequired('arg2'); 
p.addParameter('optional1', 0); 
p.parse(arg1, arg2, varargin{:}); 
nonStringArguments = {'arg1', 'arg2', 'optional1'}; 
args = evalArguments(p, nonStringArguments); 
... 
x = args.arg1; 
y = args.arg2; 
z = args.optional1; 

Ben bir out-of-the-bulamadık gibi Bunun için

, aşağıdaki fonksiyon yazdım Bunu yapmak için kutu yolu, bu çözümü buraya gönderiyorum ve başkalarına da faydalı olabileceğini umuyorum. Bunu başarmanın daha iyi bir yolu varsa lütfen bana bildirin.

İlgili konular