2015-10-14 79 views
0
的數組元素

(*我不知道在Matlab進行編程。這是差不多Matlab語言的一般問題。*)商店公式爲在Matlab

在Excel中,我們可以存儲一個公式中細胞。例如,如果A2包含公式= A1+10,當A1的值爲20時,A2的重新評估返回30

我的問題是,在matlab中是否有類似的機制?也就是說,我們可以在Matlab中的數組元素中指定formula,以便我們可以在以後重新評估數組嗎?

編輯1: 繼@rayryeng的我儘量讓一個例子來說明這個概念的評論......其實,這正是電子表格的語言,如Excel可以做。

所以我的問題是,有沒有一種機制,允許在Matlab中以下內容? (請注意,下面的語法只是象徵性的)

>> B = [1 2; B{1,1}+2 4] // store some values and a formula in the array 

B = 

    1  2 
    3  4 

>> B{1,1} = 10 // change the value of one cell 

B = 

    10  2 
    3  4 

>> EVAL(B) // there is a re-evaluation command to re-calculate all the cells 

ans = 

    10  2 
    13  4 
+0

不,這不是真的如何編程語言的作品。在MATLAB中你有[功能](http://www.mathworks.com/help/matlab/function-basics.html)和[腳本](http://www.mathworks.com/help/matlab/scripts.html )。 – excaza

回答

4

希望我明白你想要什麼,但答案的確是肯定的。您可以將「公式」存儲在單元格數組中,其中每個元素都是句柄或匿名函數。

也許你的意思是這樣:

formulae = {@(x) x+10, @sin, @cos, @(x) x/3}; 

語法@表示功能手柄和(x)表示,這是與輸入變量x匿名函數。第一個單元格元素提供了一個函數,可以將每個值加上10,第二個和第三個參數是sincos的句柄,所以這些函數就像那些三角函數一樣。最後手柄分爲每一個進入它由3

爲了演示,讓我們創建一個小陣,然後通過每個公式和他們每個人都適用於小數組值:

>> formulae = {@(x) x+10, @sin, @cos, @(x) x/3}; 
>> A = [1 2; 3 4] 

A = 

    1  2 
    3  4 

>> formulae{1}(A) 

ans = 

    11 12 
    13 14 

>> formulae{2}(A) 

ans = 

    0.8415 0.9093 
    0.1411 -0.7568 

>> formulae{3}(A) 

ans = 

    0.5403 -0.4161 
    -0.9900 -0.6536 

>> formulae{4}(A) 

ans = 

    0.3333 0.6667 
    1.0000 1.3333 

我們先創建公式,然後創建一個[1 2; 3 4]的小2×2矩陣。之後,我們訪問每個公式的單元格,然後將輸入A放入函數中,我們得到您所看到的內容。


但是,當你開始,開始用功能的腳本實際上聲明函數....不要使用這種編程風格的實際應用。它使你的代碼不易讀。例如,做sin(A)formula{2}(A)更可讀。閱讀代碼的人必須記住陣列中的哪個位置與您要應用於輸入中每個元素的公式相對應。

+0

感謝您的詳細評論...我更新了我的OP。你表明我們可以在數組中存儲公式(即'formulae'),以便回答我的問題(回答「是」)。但我只是意識到,它仍然不同於我們在Excel中可以做的事情:似乎我們無法在公式中指定單元格。例如,每一個公式都必須與常數或變量「x」相關,它不能與另一個公式(我們不能在公式中寫'= B {1,1} + 2')相關。我對麼? – SoftTimur

+0

@SoftTimur你不能那樣做,所以你是對的。 – rayryeng

+0

@rayryeng你其實可以做到這一點我認爲,看到我的答案的底部在這裏:http://stackoverflow.com/a/33144578/1011724。然而,這可能不是在Matlab中最常用的做法,OP最喜歡將代碼重構爲更簡單的等效解決方案 – Dan