2014 dxdy logo

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

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




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.
 
 Как функции, принимающей скалярные перем., скормить массив?
Сообщение04.06.2017, 09:42 


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

 Профиль  
                  
 
 Re: Как функции, принимающей скалярные перем., скормить массив?
Сообщение04.06.2017, 09:59 
Модератор


19/10/15
1196
В матлабе cell array можно преобразовать в список аргументов: https://de.mathworks.com/help/matlab/ma ... br2js35-13
Так что можно преобразовать массив в cell array и взять все его элементы как список. f(num2cell(x){:}) вроде должно cработать.

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


07/01/12
69
Спасибо, но не сработало, в т.ч. и после исправления синтаксической ошибки

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


06/10/08
6422
Странно, у меня работает, и синтаксической ошибки нет. У Вас какая версия Matlab?

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


07/01/12
69
R2008a

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


06/10/08
6422
А какая синтаксическая ошибка?

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


07/01/12
69
В примере Karan'а уже редактор подсвечивает первую фигурную скобку

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


06/10/08
6422
А если cell = num2cell(x); f(cell{:})?

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


27/04/09
28128
Diusha в сообщении #1222006 писал(а):
уже редактор подсвечивает первую фигурную скобку
Вот в Mathematica одной из версий редактор подсвечивает изредка вполне корректный код — не может ли в Matlab такое же быть?

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

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


07/01/12
69
arseniiv, естественно, я пытался выполнить )
Пока ни разу не замечал, чтобы матлаб подсвечивал ошибочно

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


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

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


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

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


12/07/07
4438
Используется синтаксис 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 


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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 14 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group