2014-10-06 20 views
1

產生的。當我運行下面的Matlab代碼的函數:如何使用向量參數由matlabFunction

x=sym('x',[2 1])  
func=x.'*x  
f=matlabFunction(func)  
x=rand(2,1)  
f(x(1),x(2))  % this works  
f(x)    % but this gives an error 

我得到一個錯誤:

Error using symengine>makeFhandle/@(x1,x2)x1.^2+x2.^2 
Not enough input arguments. 

我想使代碼更普遍對於一個n向量,在代碼中確定n。
因此,我不能列出所有n個變量,如f(x(1), x(2), ..., x(n))
有沒有辦法將n矢量轉換成n個要傳遞給函數的組件列表?

回答

3

有一個技巧,你可以使用num2cell。你會做的是將每個參數轉換成它自己的單個單元格,然後使用:來處理參數。換句話說,你可以這樣做:

x = rand(2,1); 
c = num2cell(x); 
f(c{:}) 

重複你的代碼之上,並使用我已經定義是什麼,這就是我得到:

%// Your code 
x=sym('x',[2 1]);  
func=x.'*x;  
f=matlabFunction(func);  
x=rand(2,1); 

%// My code 
c = num2cell(x); 

%// Display what x is 
x 

%// Display what the output is 
out = f(c{:}) 

我也顯示什麼x是什麼最終的答案是。這就是我得到:

x = 

    0.1270 
    0.9134 

out = 

    0.8504 

這也是一樣的:

out = f(x(1), x(2)) 

out = 

    0.8504 

在一般情況下,你可以用任何你想要的二維矢量做到這一點,前提是你的函數你」重新定義可以處理很多輸入/維度。

1

爲了解決這個問題,可以使用vars參數:

f=matlabFunction(func,'vars',{x}) 
p=rand(2,1) 
f(p)