2017-10-17 18 views
0

Matlabからの返答を記号変数の形で返そうとしています。私が受信していエラーを説明するために、次のコードと関数を作成:Symbolの形式で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) 

メートルファイル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 

Iは、次のエラー受信午前:

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

出力 'K'を' 0(2) 'を使って二重行列として初期化しています。次に、これらの要素の1つにシンボリック変数を割り当て、型の不一致を取得しようとしています。代わりに 'K = sym( 'K'、[2,2])' – Wolfie

+0

のような 'sym'を使って出力を初期化してみてください!それを解決してくれてありがとう! – PatStarks

+1

心配しないで、私は完全な答えとして私のコメントを追加しました。この問題が解決されるように、それを受け入れることを検討してください。ありがとう – Wolfie

答えて

1

あなたが次に使用して、シンボリック2x2の行列としてKを初期化、代わりに

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

を使用して、これらの数値の各要素へのシンボリック変数を割り当てるしようとしている

K = zeros(2,2); 

を用いた数値行列を初期化していますsym(ドキュメントhereを参照してください)。

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

Kの各要素は、シンボリック変数であり、あなたは、既存のシンボリック変数にそれぞれ1を割り当てる何の問題を持っていないでしょう。

関連する問題