Matlab将符号变量转换为数组

Matlab converting symbolic variable into array

我想将根据符号变量 x 定义的函数转换为数组。我的 MWE 是:

syms x
f = x.^2;
x = linspace(-10,10,100);
f1 = double(f);

我尝试使用 double 命令,但出现错误

Error using symengine
Unable to convert expression into double array.

Error in sym/double (line 692)
        Xstr = mupadmex('symobj::double', S.s, 0);

我不确定这意味着什么以及如何解决它。

  • 在应用 double() 之前用它的给定值替换 x 使用 subs()
  • vpa()有类似的功能

  • double()相比,使用vpa()的优势在于您可以设置 小数精度自己做

代码如下

syms x
f = x.^2;
x = linspace(-10,10,10);
f1 = subs(f);
f2 = double(f1)
f3 = vpa(f1, 8)

  • double()输出:固定小数点后位数
f2 = [100.0000   60.4938   30.8642   11.1111    1.2346    1.2346   11.1111   
30.8642   60.4938  100.0000] 

  • vpa()输出:可调小数点后位数,这里精度调整为8
f3 =[ 100.0, 60.493827, 30.864198, 11.111111, 1.2345679, 1.2345679, 11.111111, 
30.864198, 60.493827, 100.0]

有几种方法可以做到这一点。从 symfun 开始:

syms x
f = symfun(x.^2, x);
xv = linspace(-10,10,100);
f1 = double(f(xv));

这相当于:

syms x       % or: syms f(x)
f(x) = x.^2;
xv = linspace(-10,10,100);
f1 = double(f(xv));

备选方案是使用 Adam 建议的 subs 方法。