2014-10-09 46 views
0

我不明白什麼是錯我的代碼在這裏MATLAB:繪製在MATLAB兩大功能組成

syms t 
x=[1 2 3]; 
g=t*t; 
f=sin(x); 
y=compose(g,f); 
plot(x,y,'o') 

這段代碼我寫的繪製Y = SIN(X)^ 2。正如我不在我的電腦中沒有matlab,所以在Octave在線編譯器上運行它,它給出錯誤'syms' undefined near line 1 column 1

如果有人可以幫忙解釋我在代碼中錯在哪裏?

+0

簡單的檢查:你有符號數學工具箱? – 2014-10-09 17:01:10

+0

@ Benoit_11如何檢查它.. – coool 2014-10-09 17:01:55

+1

在命令窗口中鍵入'ver',您將看到計算機上安裝了哪些工具箱 – 2014-10-09 17:02:33

回答

1

它看起來像你沒有安裝符號數學工具箱,所以你不能使用compose。儘管如此,還是有辦法的。請記住,致電compose(f,g)時,這兩個功能的組成是這樣的,我們返回f(g(y))f = f(x)g = g(y)

你可以做的就是用數字來表示,而不依賴於syms。聲明一個數字時間向量,說...從t = 0t = 5,步長爲0.01。之後,聲明你自己的函數句柄來計算每個函數。函數句柄或匿名函數是小的單線函數,通常是數學或計算語句,可以接受任意大小的輸入,無論是單個值,矢量還是矩陣,並將該計算語句應用於輸入中的每個值。您用@符號表示匿名函數,然後在圓括號內指定將組成您要計算的語句的變量。在這種情況下,只有一個變量,我們將其稱爲t,但它可以是任何變量。

因此,我定義了一個函數g,它對我們輸入的每個元素執行t^2。請注意,我必須執行逐個元素的操作。如果我們只是做了t*t,我應該提供一個向量還是一個矩陣,這將被解釋爲矩陣乘法,這不是你想要的。同樣,我們定義一個匿名函數f,使得它產生sin(t)作爲輸出。

有了這些定義,你真正需要做的是:

t = 0 : 0.01 : 5; 
g = @(t) t.*t; 
f = @(t) sin(t); 
y = g(f(t)); %// Composition of the two functions (compose(g,f)); 
plot(t, y, 'o'); 
+0

感謝你的方法,但你能解釋一下嗎? @(t)表示在g = @(t)t。* t; – coool 2014-10-10 04:39:52

+0

@coool - 當然。讓我加入我的帖子,但你基本上創建了一個匿名函數'g',在其中輸入值並計算't^2'。因此,在函數中加入你想要的任何時間值......它可以是一個單一的值,一個矩陣或一個向量,它將't^2'應用於矩陣中的每個元素。 – rayryeng 2014-10-10 05:06:53

+0

感謝您的澄清... – coool 2014-10-10 05:20:18