【问题标题】:Using unspecified constants in matlab在 matlab 中使用未指定的常量
【发布时间】:2012-02-14 17:27:22
【问题描述】:

我正在尝试求解 s 域中的方程组。所以以矩阵形式建立这个方程组:

a=[.4*s+s+5 -5; -5 .5*s+5]  
c=[3/s; 3/(2*s)]  
(1/s)*a*b=c

我只是得到 s 未定义的错误。 如何根据 s 求解 b?

【问题讨论】:

    标签: matlab linear-algebra symbolic-math


    【解决方案1】:

    Matlab 不(自然)进行符号计算 --- 这是您的代码试图做的。 Matlab的变量需要是具体的数字,或者数组,或者结构体等,不能只是任意数字的占位符。

    (除非:您将 symbolic computing toolbox 用于 Matlab。我没有真正使用过这个,因为我更喜欢在 Maple 或 Mathematica 等环境中进行符号计算。您甚至可以在 Wolfram Alpha 网站上解决您的问题)

    但是如果你选择一个特定的 s 值,计算你想要的就很容易了:

    s = 5;
    a=[.4*s+s+5 -5; -5 .5*s+5];
    c=[3/s; 3/(2*s)];
    b = s*(a\c);
    

    我使用backslash operator 进行线性反演。

    你现在应该有那个

    (1/s)*a*b-c
    

    是零向量。

    编辑:我查看了符号工具箱。看起来这就是您想要的(但您需要获得符号工具箱的许可并安装它才能工作):

    syms s;
    a=[.4*s+s+5 -5; -5 .5*s+5];
    c=[3/s; 3/(2*s)];
    b = simple(s*(a\c))
    

    【讨论】:

      【解决方案2】:

      使用符号运算符执行计算的代码是:

      syms s;                           %This defines 's' as a symbolic token
      a=[.4*s+s+5 -5; -5 .5*s+5];       %a and c inherit the symbolic properties from s
      c=[3/s; 3/(2*s)];                 
      result = solve('(1/s)*a*b=c','b') %Solve is the general symbolic toolbox algebraic solver.
      

      这会产生

      result =
      (c*s)/a
      

      一般来说,Matlab 作为数值工具箱表现最好。因此,根据您的应用程序,我会采用另一种方法,例如 Ian Hincks 在另一个答案中所展示的方法。但有时情况需要一个象征性的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-19
        • 2022-01-03
        • 2011-05-20
        • 1970-01-01
        • 2018-12-06
        • 1970-01-01
        相关资源
        最近更新 更多