如何从Matlab函数返回符号形式的答案

如何从Matlab函数返回符号形式的答案

问题描述:

我想从符号变量的形式返回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

你初始化使用

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

而不是使用

K = zeros(2,2); 

然后试图将一个象征性的变量分配到每台数字元素的数值矩阵,使用初始化K作为一个象征性的2×2矩阵sym(请参阅文档here)。

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

现在的K每个元素是一个象征性的变量,你不会有任何问题,分配每一个到一个现有的符号变量。