2014 dxdy logo

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

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




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

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

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

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

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

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

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

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

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

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

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

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

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

 
 
 
 Re: Как функции, принимающей скалярные перем., скормить массив?
Сообщение28.03.2021, 14:32 
Используется синтаксис 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: Как функции, принимающей скалярные перем., скормить массив?
Сообщение28.03.2021, 15:38 
GAA в сообщении #1511833 писал(а):
На всякий случай.
Спасибо)
Но Вы, видимо, не обратили внимание, что вопрос этот был 4 года назад. Силюсь вспомнить, в связи с чем он возникал, и как я вышел из положения.
Сейчас, к великому сожалению, пользую не 2008 (срок лицензии вышел), а 2014. Он работает на порядок медленнее, и хелп хуже стал.

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

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


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