Matlab преобразует символическую переменную в массив - PullRequest
1 голос
/ 02 июля 2019

Я хочу преобразовать функцию, определенную в терминах символической переменной 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);

Я не уверен, что это значит и как решить.

Ответы [ 2 ]

2 голосов
/ 02 июля 2019
  • Заменить x на заданные значения перед применением double() с использованием subs()
  • vpa() имеет аналогичную функцию

  • Преимущество использования vpa() по сравнению с double() заключается в том, что вы можете установить десятичную точность самостоятельно

Код выглядит следующим образом

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]
1 голос
/ 02 июля 2019

Есть несколько способов сделать это.Начиная с 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));

Альтернативой является использование подхода subs, предложенного Адамом..

...