2017-10-17 153 views
0

我想從符號變量的形式返回Matlab的答案。我創建了下面的代碼和功能來說明我接收到錯誤:如何從Matlab函數返回符號形式的答案

clc 
clear all 
syms L real; 
% L = 1 % The code works when I uncomment this line 
k1 = [ L, -L; 
     -L, 2*L] 
k2 = [4*L^2, -L; 
     0,  L] 
K = GlobalStiffnessMatrix(k1,k2) 

M檔GlobalStiffnessMatrix.m如下所示:

function K = GlobalStiffnessMatrix(k12,k23) 
    K = zeros(2,2); 
    K(1,1) = k12(1,1); 
    K(1,2) = k12(1,2); 
    K(2,1) = K(1,2); 
    K(2,2) = k12(2,2) + k23(1,1); 
end 

我收到以下錯誤:

The following error occurred converting from sym to double: Error using symengine (line 59) DOUBLE cannot convert the input expression into a double array. If the input expression contains a symbolic variable, use VPA.

我試圖在函數本身和模擬代碼中使用VPA,但仍然收到相同的錯誤。當然,當我取消註釋行設置L = 1該功能正常工作,並按預期。

我該如何使這個函數返回K作爲一個符號變量?

+3

您正在使用'零(2,2)'初始化輸出'K'作爲雙重矩陣。然後你試圖爲這些元素之一分配一個符號變量,並得到一個類型不匹配。相反,嘗試使用像'K = sym('K',[2,2])'' – Wolfie

+0

'sym'來初始化你的輸出!感謝解決它! – PatStarks

+1

不用擔心,我已將我的評論添加爲完整答案。考慮接受它,以便這個問題關閉。謝謝 – Wolfie

回答

1

你初始化使用

K(1,1) = k12(1,1); 

而不是使用

K = zeros(2,2); 

然後試圖將一個象徵性的變量分配到每臺數字元素的數值矩陣,使用初始化K作爲一個象徵性的2×2矩陣sym(請參閱文檔here)。

K = sym('K', [2,2]); 

現在的K每個元素是一個象徵性的變量,你不會有任何問題,分配每一個到一個現有的符號變量。