2016-01-06 42 views
0

我有一個矩陣,A乘以微分算子符號函數來創建衍生物

A=[ x.^2 + y , 0; 
    0 , x.^2 + y ] 

我也有一個算子矩陣,D

D = [d/dx , 0; 
    0 , d/dy ] 

我希望能夠繁殖D*A並最終得到如下矩陣:

B = [ diff(A(1,1),x) , 0 ; 
     0 , diff(A(2,2),y) ] 

顯然我不能用diff()函數來做這件事,因爲那個函數不是一個可以通過函數相乘的運算符。那麼我怎麼能用符號運算符來解決這個問題呢?實際上,我的矩陣很大,所以在沒有運算符乘法的情況下執行是不可取的。

而且,可以說我找到一種方法來產生上述B矩陣,它看起來像:

B = 
[ 2*x, 0 
    0, 1] 

我怎樣才能在評估B,例如,x=2, y=1;

我嘗試:

subs(B,x,2,y,1) 

但是,這顯然是對sym.subs函數不正確的參數

我也試過:

subs(B,2,1) 

,但這並沒有工作,要麼,所以我的其他問題我該如何替換B矩陣中的xy

+0

你可以編輯你的問題更具體的*爲什麼*你想要這個?請讓我更具體地瞭解您的實際矩陣的樣子。你是否想要計算雅可比行列式或類似的東西? – horchler

回答

0

對於第二個問題:對於符號變量代多個值的語法是

subs(B, {x,y}, {2,1}) 

(和在Matlab命令提示輸入help subs將使本示例)。

第一:通過向量化他們來加速符號衍生物計算的想法是行不通的。向量化對於可以由用於處理數組的一些現有C++庫批量執行的低級操作有意義。符號區分是非常不同的:每個表達式都有一個複雜的算法。無論有多少個,使用for循環來查找多個符號衍生物都是適當的。如果花費很長時間,那是因爲購買大量的符號衍生產品需要很長時間。

我期待的一種可能的優化是找到矩陣B中函數之間的共同元素,以便它們可以區分一次。但是這需要處理矩陣中包含哪些函數的細節。