【问题标题】:How to return answers from Matlab function in form of Symbols如何以符号的形式从 Matlab 函数返回答案
【发布时间】:2017-10-17 15:06:20
【问题描述】:

我正在尝试以符号变量的形式从 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 作为符号变量?

【问题讨论】:

  • 您正在使用zeros(2,2) 将输出K 初始化为双矩阵。然后,您尝试将符号变量分配给这些元素之一并获得类型不匹配。而是尝试使用 sym 初始化输出,例如 K = sym('K', [2,2])
  • 漂亮!谢谢解决!
  • 不用担心,我已将我的评论添加为完整答案。考虑接受它,以便关闭这个问题。谢谢

标签: matlab symbolic-math


【解决方案1】:

您正在使用

初始化一个数值矩阵
K = zeros(2,2);

然后尝试为每个数字元素分配一个符号变量

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

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

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

现在K 的每个元素都是一个符号变量,您可以毫无问题地将每个元素分配给现有的符号变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2015-08-25
    • 2020-10-04
    相关资源
    最近更新 更多