Я хочу використовувати stats::swGOFT
функція в MuPAD. Я називаю числовий вектор r
. я використав
feval(symengine, "stats::swGOFT", r);
Помилка була
Помилка використання mupadengine / feval (рядок 157)
Помилка MuPAD: Помилка: деякі дані мають неправильний тип.
Тому я спробував більш прямий шлях, який працював:
feval(symengine, "stats::swGOFT", 1,2,3,4);
Але це не спрацювало:
feval(symengine, "stats::swGOFT", [1,2,3,4]);
Моя змінна r
являє собою подвійний вектор 1146-by-1. Очевидно, я не можу вручну вводити всі цифри. Отже, як передати векторну змінну r
функції MuPAD stats::swGOFT
?
Відповіді:
1 для відповіді № 1MuPAD не є Matlab. З поточної версії документації на stats::swGOFT
, видається, що ця функція вимагає a список, на відміну від масив (що використовує Matlab). Багато MuPAD функціонує автоматично coerce
входи до потрібного формату, але це не таквиникають у цьому випадку. У вас є кілька варіантів, якщо ви хочете викликати цю функцію з Matlab, використовуючи числові значення - тут простий, який буде працювати як з плаваючою точкою, так і з символьними числовими значеннями:
r = randn(1146,1);
rStr = char(sym(r(:)."));
feval(symengine, "stats::swGOFT", rStr(9:end-2))
Це потрібно швидше виконувати перетворення рядків для великих наборів даних з плаваючою точкою sprintf
:
r = randn(1146,1);
rStr = ["[" sprintf("%.17g", r(1)) sprintf(",%.17g", r(2:end)) "]"];
feval(symengine, "stats::swGOFT", rStr)
Оскільки ви перетворюєтеся на рядок самостійно, ви можете перетворити його вище evalin
безпосередньо:
r = randn(1146,1);
rStr = [ sprintf("%.17g", r(1)) sprintf(",%.17g", r(2:end)) ];
evalin(symengine, ["stats::swGOFT([" rStr "])"])