Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 Как функции, принимающей скалярные перем., скормить массив?
Есть функция f (m-файл), принимающая на входе $n$ переменных (скалярных).
(Это менять нельзя)
Есть массив x из $n$ элементов.
Требуется элементы этого массива подать на вход указанной функции.
Писать f(x(1), x(2), x(3),...) очень геморно.
Есть ли возможность сделать это компактнее и «красивее»?
Или иными словами, есть ли в матлабе функция, превращающая массив в набор скаляров?

 Re: Как функции, принимающей скалярные перем., скормить массив?
В матлабе cell array можно преобразовать в список аргументов: https://de.mathworks.com/help/matlab/ma ... br2js35-13
Так что можно преобразовать массив в cell array и взять все его элементы как список. f(num2cell(x){:}) вроде должно cработать.

 Re: Как функции, принимающей скалярные перем., скормить массив?
Спасибо, но не сработало, в т.ч. и после исправления синтаксической ошибки

 Re: Как функции, принимающей скалярные перем., скормить массив?
Аватара пользователя
Странно, у меня работает, и синтаксической ошибки нет. У Вас какая версия Matlab?

 Re: Как функции, принимающей скалярные перем., скормить массив?
R2008a

 Re: Как функции, принимающей скалярные перем., скормить массив?
Аватара пользователя
А какая синтаксическая ошибка?

 Re: Как функции, принимающей скалярные перем., скормить массив?
В примере Karan'а уже редактор подсвечивает первую фигурную скобку

 Re: Как функции, принимающей скалярные перем., скормить массив?
Аватара пользователя
А если cell = num2cell(x); f(cell{:})?

 Re: Как функции, принимающей скалярные перем., скормить массив?
Diusha в сообщении #1222006 писал(а):
уже редактор подсвечивает первую фигурную скобку
Вот в Mathematica одной из версий редактор подсвечивает изредка вполне корректный код — не может ли в Matlab такое же быть?

Т. е. вдруг можно выполнить код всё равно?

 Re: Как функции, принимающей скалярные перем., скормить массив?
arseniiv, естественно, я пытался выполнить )
Пока ни разу не замечал, чтобы матлаб подсвечивал ошибочно

 Re: Как функции, принимающей скалярные перем., скормить массив?
Diusha в сообщении #1222063 писал(а):
естественно, я пытался выполнить )
И он просто подсветил и всё? Ну, в принципе, не то чтобы мне не доводилось видеть непонятные сообщения об ошибках от программ… Сочувствую.

 Re: Как функции, принимающей скалярные перем., скормить массив?
Редактор подсветил. Если на подсвечивание навести мышу, показывает "Cannot call or index into a temorary array"
При выполнении –
"()-indexing must appear last in an index expression."
Ну видимо, мой старый матлаб не знает такого синтаксиса.
Не проблема, я просто хотел украшательства.
Спасибо всем неравнодушным!

 Re: Как функции, принимающей скалярные перем., скормить массив?
Используется синтаксис Matlab M
function y = ff(x1, x2)
 y = x1+x2;
end

Matlab 6.5 2002 года (более ранняя версия по сравнению с 2008)
Используется синтаксис Matlab M
>> X = [1, 2]; ff(num2cell(X){:})
??? Error: () Indexing must appear last in an index expression.

Но предложенный Xaositect в Matlab 6.5 работает
Используется синтаксис Matlab M
>> X = [1, 2]; C = num2cell(X); ff(C{:})
ans = 3

Так что даже достаточно старые версии знают такой синтаксис вызова.
На всякий случай. В Octave 4.4 и первый вариант работает. Более ранних версий под рукой нет.

 Re: Как функции, принимающей скалярные перем., скормить массив?
GAA в сообщении #1511833 писал(а):
На всякий случай.
Спасибо)
Но Вы, видимо, не обратили внимание, что вопрос этот был 4 года назад. Силюсь вспомнить, в связи с чем он возникал, и как я вышел из положения.
Сейчас, к великому сожалению, пользую не 2008 (срок лицензии вышел), а 2014. Он работает на порядок медленнее, и хелп хуже стал.

 i  GAA:
Обратил. Но тема не была закрыта. Теперь вроде всё ясно. Закрыл.

 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group