/ / Як передавати змінну вектора Matlab до функції MuPAD? - Matlab, статистика, символічна математика, mupad

Як передавати векторну змінну Matlab у функцію MuPAD? - MATLAB, статистика, символіка-математика, мупада

Я хочу використовувати 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 для відповіді № 1

MuPAD не є 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 "])"])