2011-09-09 96 views
0

我一般的問題是由下面的例子說明:向量化的函數陣列在Matlab

[email protected](x,y) cos(x.*y); 
Yvalues = linspace(0,1,50); 
W = @(x) f(x,Yvalues); 

如果我只是想在一個時間來評估W上的一個點,工作正常。例如:

norm(W(pi/3)-f(pi/3,Yvalues)) 
ans = 

     0 

但是我該如何去評估W在任何點上?

在此先感謝。

+0

在第二代碼片段,我相信你mea當你寫'x'時nt'Yvalues'?此外,矢量的標準是定義標量(它是矢量的「長度」),所以第二個代碼片段返回期望值。請注意,W(pi/3)-f(pi/3,Yvalues)'返回一行50個零。只要「W」的輸入與「Yvalues」的長度相同,「W」就返回一個向量。 –

+0

更正。謝謝。 – alext87

回答

1

如果更改

[email protected](x,y) cos(x.*y); 

[email protected](x,y) cos(x'*y); 

可以執行 W([1 2 3])

例如,

>> f = @(x,y) cos(x'*y); 
>> yv = linspace(0,1,5); 
>> W = @(x) f(x,yv); 
>> W(1) 
ans = 
    1.0000 0.9689 0.8776 0.7317 0.5403 
>> W(2) 
ans = 
    1.0000 0.8776 0.5403 0.0707 -0.4161 
>> W(3) 
ans = 
    1.0000 0.7317 0.0707 -0.6282 -0.9900 
>> W([1 2 3]) 
ans = 
    1.0000 0.9689 0.8776 0.7317 0.5403 
    1.0000 0.8776 0.5403 0.0707 -0.4161 
    1.0000 0.7317 0.0707 -0.6282 -0.9900 
+0

'cos(x'* y)'給你的東西完全不同於'cos(x。* y)' - 取決於size(x'* y)'你會得到一個標量,一個向量或者一個矩陣; 'cos(x。* y)'是'x'和'y'的逐元素乘法,所以這個操作返回一個長度爲x的向量(順便說一下,長度與y相同)。所以我想這取決於OP想要的東西;只是說這裏定義的'f(x,y)'將根據輸入大小返回可變大小的矩陣。 –