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

时间:2017-10-17 15:06:21

标签: matlab symbolic-math

我试图以符号变量的形式从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

我收到以下错误:

  

从sym转换为double时发生以下错误:   使用symengine时出错(第59行)   DOUBLE无法将输入表达式转换为双数组。   如果输入表达式包含符号变量,请使用VPA。

我尝试在函数本身和模拟代码中使用VPA,但仍然收到相同的错误。当然,当我取消注释行设置L = 1时,该功能正常工作并且符合预期。

如何使此函数返回K作为符号变量?

1 个答案:

答案 0 :(得分:1)

您正在使用

初始化数字矩阵
K = zeros(2,2);

然后尝试使用

为每个数字元素分配一个符号变量
K(1,1) = k12(1,1);

相反,使用Ksym初始化为符号2x2矩阵(请参阅文档here)。

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

现在K的每个元素都是一个符号变量,并且您不会将每个元素分配给现有的符号变量。