2013-05-27 90 views
2

如何在MATLAB中的大符號矩陣操作中預分配存儲器。如何在MATLAB中的大符號矩陣操作中預分配存儲器

例如:在下面的代碼中,每次迭代中變量「Toc」和「Tnw」的大小增加。我曾嘗試通過Toc = zeros(0,50)進行預分配,但出現錯誤「從sym轉換爲雙時發生錯誤」。那麼什麼是預分配語法的符號版本?

syms c z 
Tnw = 1; 
for i = 1:9 
    Toc(c, z) = [(1-c)*z c-c*z ; -c+c*z (1+c)*z]; 
    f = collect(Toc(c,z)); 
    Tnw = Tnw*f; 
end 

那麼在大型符號操作中用於預分配的最佳實踐是什麼?

在此先感謝

+0

也許這會讓你開始:[創建對象數組](http://www.mathworks.com/help/matlab/matlab_oop/creating-object-array.html) – Schorsch

+0

或者看看[這個問題/答案](http://stackoverflow.com/questions/16201050/matlab-convert-output-from-symbolic-math-to-float/16201051#16201051) – Schorsch

回答

2

首先,zeros(0,50)是不會分配任何東西。它不是一個空載體。它也是double類型的向量,這就是爲什麼當你嘗試在其中存儲符號值時出現錯誤的原因。我不確定「最佳實踐」,但這是我如何分配符號數組。

Toc = sym(zeros(1,50)); 

雙數組被分配,然後重新標記爲符號。 更新:在較新版本的Matlab中,您可以使用zeros(1,50,'sym')zeros(1,50,'like',Y),其中Y是任何大小的符號變量。

但是,在您的示例中,TnwToc陣列的維度在您聲明時不會每次迭代增長。增長的是Tnw的每個元素中字符串的長度。我認爲這可能是你真正想問的,我不認爲這是你可以預先分配的東西。您必須將其留給符號引擎。

最後,您似乎無需使用符號函數(symfun)而不是通用符號數組Toc。這兩行將是相同的:

Toc = [(1-c)*z c-c*z ; -c+c*z (1+c)*z]; 
f = collect(Toc);