2014-02-16 61 views
0

進出口特林與eigval到的。減去對角線值和存儲在矩陣Diagonal新值:如果輸入表達式包含符號變量,請改用VPA函數?

CovarianceMatrix=[8 -3 1;2 1 0;3 4 5]; 
    Col=3; 
    Row=3; 
    store=1; 
    syms eigval; 

    for loop1= Col:-1:1 
    Rw=1; 
    syms eigval; 
    for loop2= 1:Row 
     if Rw==loop1 
      Diagonal= (CovarianceMatrix(Rw,loop1)-eigval); 
      Fix_Diagonal_2(loop2,store)=sym(Diagonal); 
     else 
      Diagonal= CovarianceMatrix(Rw,loop1); 
      Fix_Diagonal_2(loop2,store)=Diagonal; 
     end 

     Rw=Rw+1; 
     loop1=loop1-1; 

     if loop1==0 
      loop1=3; 
     end 

    end 
    store=store+1; 

end 

但因爲我使用的是一個象徵性的變量,它給出了一個錯誤:

 The following error occurred converting from sym to double: 
     Error using mupadmex 
     Error in MuPAD command: DOUBLE cannot convert the input expression into a double 
     array. 

     If the input expression contains a symbolic variable, use the VPA function  
     instead. 

如何我能解決這個問題嗎?我想將新的減價值複製到對角矩陣中。

+1

請使用正確的代碼縮進,這是非常困難的,而不讀碼。 – Daniel

+2

什麼是符號?你的代碼不可運行。提供一些簡單的輸入值來複制您的問題。併發布*整個錯誤消息*包括行號 - 代碼中的哪一行會引發錯誤? – horchler

回答

4

這裏是展現你同樣的錯誤,所以也許這將有助於澄清問題一個簡單的代碼位:

syms x;  % Create symbolic variable 
a1 = rand(2); % Floating point array 1 
a2 = rand(2); % Floating point array 2 
d = a1(1)-x; % This is now a symbolic expression 
a2(1) = d; % Error: you can't store a symbolic expression in a double array 

這R2013b(和R2015b)返回

The following error occurred converting from sym to double: 
Error using mupadmex 
Error in MuPAD command: DOUBLE cannot convert the input expression into a double 
array. 
If the input expression contains a symbolic variable, use the VPA function 
instead. 

vpa不能在這裏使用,因爲x是尚未限定,而不是一個符號值的符號變量(vpa(d)具有無關緊要的影響)。

爲您的代碼,該錯誤可能會出現在這條線:

Fix_Diagonal_2(loop2,store)=Diagonal; 

不能使用vpa因爲eigval是沒有價值的一個象徵性的變量。您可以通過鑄造Fix_Diagonal_2sym可能解決您的問題:

Fix_Diagonal_2 = sym(Fix_Diagonal_2); 

你可能想要做的for循環的那個之外。我也不明白爲什麼你要在外循環的每次迭代中重新定義eigval

+0

我已經試過,因爲你解釋,但它仍然錯誤!現在,我已經把我的程序更清晰了。這是我的程序中計算矩陣特徵值的一部分。並使用代碼保持第二個對角線(det = 1st diag- 2nd diag),然後將所有值相乘並相加。因此,用第一個診斷值減去獲得特徵值將會被使用。你可以幫我解決這個問題.. – user3303896

+0

@ user3303896:請重新閱讀我答案的第二部分。 「對角線」已經具有象徵意義,因此試圖重鑄它就沒有意義了。它是'Fix_Diagonal_2 = sym(Fix_Diagonal_2);'。由於您尚未指定'Fix_Diagonal_2',因此您的代碼仍然無法運行。也許你只需要預先分配它作爲零:像'Fix_Diagonal_2 =符號(零(大小(CovarianceMatrix)));'?而且你仍然在外循環的每一次迭代中重新定義'eigval'。 – horchler

相關問題