2011-04-20 64 views
0

假設函數g採用函數f作爲參數,並在g內我們有類似於 x = t * feval(f,u);然而,f可以是標量值或矢量值。如果它是向量值,我們也希望x也是一個向量,即feval語句返回由f返回的整個向量。我們如何爲標量和向量情況做這項工作?Matlab - 如何使這個工作的標量和矢量

回答

0

據我所知,你問的是matlab中的默認行爲。 這意味着如果f返回一個標量,x將是一個標量,如果它返回一個向量x將是一個向量。

在你的例子中,只要t也是一個標量 - 否則結果將取決於如何評估t * [輸出f]。

function o1 = f(N) 
o1 = zeros(1,N); 
end 

這裏˚F返回標如果N = 1和N> 1的向量。 調用你的代碼給

x=feval('f', 1); % Returns x = 0 

x=feval('f', 4); % Returns x = [0 0 0 0] 
+0

不,它不適用於我:function [o1 o2] = f(t,y) o1 = y(2); o2 = -sin(y(1)); end然後我打電話> x = feval('f',1,[1 1]) x = 任何想法?被卡在這一個 – Glup 2011-04-20 19:28:23

+1

我想我知道了,我應該有函數x = f(t,y)作爲方法簽名,即x而不是[01,02] – Glup 2011-04-20 19:32:55

+0

@glup:實際上,對於第一個函數定義,x會簡單地給予o1的價值 - 但這個問題已經回答[這裏](http://stackoverflow.com/questions/5734858/matlab-bug-with-multiple-inputs)。 – jmetz 2011-04-20 20:04:20

0

如果feval(f,u)輸出可以是標量或矢量,而你想要的結果x是相同的(即標量或相同的長度和尺寸的向量) ,那麼它將取決於什麼t是:

  • 如果t是一個標量,那麼你有什麼好。您可以使用運算符*.*中的任一個來執行乘法。
  • 如果t是與feval(f,u)的結果具有相同長度和尺寸的矢量,則使用.*運算符執行元素方式乘法。
  • 如果t是相同長度的矢量,但與不同尺寸從feval(f,u)的結果(即,一個是一個行向量,一個是列矢量),則必須通過轉一個使尺寸匹配或另一個與.'運營商。
  • 如果tfeval(f,u)的結果長度不同,則不能進行元素方式的乘法運算。