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

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

#1 Posted: 9/23/2010 2:31:15 AM
Antech

Antech

2 likes in 35 posts.

Group: 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 Posted: 9/23/2010 8:49:01 AM
Andrey Ivashov

Andrey Ivashov

2270 likes in 3734 posts.

Group: Super Administrator

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

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

С уважением, Андрей Ивашов.
#3 Posted: 9/25/2010 10:16:04 AM
build_your_web

build_your_web

4 likes in 127 posts.

Group: User

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

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

Quote

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

#4 Posted: 9/25/2010 1:15:58 PM
Antech

Antech

2 likes in 35 posts.

Group: User

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

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

Andrey Ivashov

2270 likes in 3734 posts.

Group: Super Administrator

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

Wrote

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


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

Wrote

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


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

С уважением, Андрей Ивашов.
1 users liked this post
Antech 9/26/2010 2:15:00 PM
  • New Posts New Posts
  • No New Posts No New Posts