Присвоение матрице с новыми переменными

Присвоение матрице с новыми переменными - Сообщения

#1 Опубликовано: 23.09.2010 02:31:15
Antech

Antech

2 сообщений из 35 понравились пользователям.

Группа: User

Здравствуйте.
В моих расчетах часто используется конструкция вида (A,B,C)=F(X,Y,Z). Здесь F - функция, которая возвращает матрицу-строку в формате (R1,R2,R3), а матрица (A,B,C) содержит новые переменные A, B и C, которые должны быть созданы (определены) программой в данной строке. Вот. Если я пишу M=F(X,Y,Z), то все нормально. А вот (A,B,C)=F(X,Y,Z) - "ошибка в выражении". Any workarounds?
#2 Опубликовано: 23.09.2010 08:49:01
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Здравствуйте.

Честно говоря впервые слышу о такой конструкции. Можете пояснить, где её можно увидеть в действии, т.е. где её можно потестировать? И в каких ситуациях её целесообразно использовать?

С уважением, Андрей Ивашов.
#3 Опубликовано: 25.09.2010 10:16:04
build_your_web

build_your_web

4 сообщений из 127 понравились пользователям.

Группа: User

Очень стандартная конструкция для функциональных языков (Erlang, например).
http://en.wikipedia.org/wiki/Pattern_matching

Пример из того же Erlang:

Цитата

43> {X, Y} = {paris, {f, 28}}.
{paris,{f,28}}
44> X.
paris
45> Y.
{f,28}

#4 Опубликовано: 25.09.2010 13:15:58
Antech

Antech

2 сообщений из 35 понравились пользователям.

Группа: User

smath
где её можно потестировать?
Ну это не сложно. Сделайте простейшую функцию, возвращающую матрицу или вектор. Затем создайте матрицу или вектор соответствующей размерности и вставьте туда какие-нибудь новые переменные. Присвойте функцию матрице (или вектору) с новыми переменными - вуаля, ошибка в выражении - можно тестировать .

в каких ситуациях её целесообразно использовать?
Почти в любых задачах с программированием (прог-блоками).
Не секрет, что подпрограмма берет и возвращает много (иногда очень много) значений (прикол из жизни: когда учился в институте, видел фрагмент старой DOS программы на Фортране для расчета ступени турбины, где аргументы подпрограммы занимали несколько строк ). Сейчас эта проблема решается структурами и классами. Но как быть с маткадоидами? Ведь в таких системах не то что классов, даже структур-то нет. Поэтому, в качестве workaround, применяются функции, берущие векторы и векторы векторов (или матрицы и матрицы матриц), и возвращающие результат также в подобном формате. Ну вот, я применяю эту классику в SMath и вижу, что конструкция такая не предусмотрена...
На чем конкретно всплыло: подготовка исходных данных для продувки топки котла. Там надо смешать испаренную влагу топлива (угля) с воздухом. Тупая функция-смеситель на несколько строк берет параметры двух газовых потоков и возвращает вектор результатов: расход G [кг/с], концентрации компонентов - это вектор - c[i] [кг/кг], и приближенную температуру t [*C]. Т.е. имеем вектор, включающий 2 скалара и 1 вектор. Функция должна задать значения новых переменных - вектора (G,c[],t), а оно не хотит...
#5 Опубликовано: 25.09.2010 13:49:51
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

build_your_web, спасибо, теперь понял какая функциональность ожидается.

Wrote

...ошибка в выражении - можно тестировать .


Тут уже скорее не тестировать, а отлаживать придётся. А учитывая, что я изначально просто не понял, как оно должно работать, я и отлаживать не понял бы что

Wrote

...а оно не хотит...


Займусь этим вопросом, спасибо!

С уважением, Андрей Ивашов.
1 пользователям понравился этот пост
Antech 26.09.2010 14:15:00
  • Новые сообщения Новые сообщения
  • Нет новых сообщений Нет новых сообщений