Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab将符号变量转换为数组_Matlab_Symbols_Symbolic Math - Fatal编程技术网

Matlab将符号变量转换为数组

Matlab将符号变量转换为数组,matlab,symbols,symbolic-math,Matlab,Symbols,Symbolic Math,我想将用符号变量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::doub

我想将用符号变量
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()
    输出:小数点后的固定位数

  • vpa()
    输出:小数点后可调整的位数,此处精度调整为8

有几种方法可以做到这一点。首先是:

这相当于:

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

另一种方法是使用所建议的
subs
方法

试试f1=double(f(x))?我不能在这里测试它,但试试syms f(x);f1=double(f(linspace(-10,10100))?我得到一个错误:
使用symengine时出错。无法将表达式转换为双数组。sym/double错误(第692行)。Xstr=mupadmex('symobj::double',S.S,0)
f3 =[ 100.0, 60.493827, 30.864198, 11.111111, 1.2345679, 1.2345679, 11.111111, 
30.864198, 60.493827, 100.0]
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));