1 страниц (5 вхождений)
Присвоение матрице с новыми переменными - Сообщения
#1 Опубликовано: 23.09.2010 02:31:15
Здравствуйте.
В моих расчетах часто используется конструкция вида (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?
В моих расчетах часто используется конструкция вида (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
Здравствуйте.
Честно говоря впервые слышу о такой конструкции. Можете пояснить, где её можно увидеть в действии, т.е. где её можно потестировать? И в каких ситуациях её целесообразно использовать?
С уважением, Андрей Ивашов.
Честно говоря впервые слышу о такой конструкции. Можете пояснить, где её можно увидеть в действии, т.е. где её можно потестировать? И в каких ситуациях её целесообразно использовать?
С уважением, Андрей Ивашов.
#3 Опубликовано: 25.09.2010 10:16:04
Очень стандартная конструкция для функциональных языков (Erlang, например).
http://en.wikipedia.org/wiki/Pattern_matching
Пример из того же 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
smath
где её можно потестировать?
Ну это не сложно. Сделайте простейшую функцию, возвращающую матрицу или вектор. Затем создайте матрицу или вектор соответствующей размерности и вставьте туда какие-нибудь новые переменные. Присвойте функцию матрице (или вектору) с новыми переменными - вуаля, ошибка в выражении - можно тестировать
.
в каких ситуациях её целесообразно использовать?
Почти в любых задачах с программированием (прог-блоками).
Не секрет, что подпрограмма берет и возвращает много (иногда очень много) значений (прикол из жизни: когда учился в институте, видел фрагмент старой DOS программы на Фортране для расчета ступени турбины, где аргументы подпрограммы занимали несколько строк
). Сейчас эта проблема решается структурами и классами. Но как быть с маткадоидами? Ведь в таких системах не то что классов, даже структур-то нет. Поэтому, в качестве workaround, применяются функции, берущие векторы и векторы векторов (или матрицы и матрицы матриц), и возвращающие результат также в подобном формате. Ну вот, я применяю эту классику в SMath и вижу, что конструкция такая не предусмотрена...
На чем конкретно всплыло: подготовка исходных данных для продувки топки котла. Там надо смешать испаренную влагу топлива (угля) с воздухом. Тупая функция-смеситель на несколько строк берет параметры двух газовых потоков и возвращает вектор результатов: расход G [кг/с], концентрации компонентов - это вектор - c[i] [кг/кг], и приближенную температуру t [*C]. Т.е. имеем вектор, включающий 2 скалара и 1 вектор. Функция должна задать значения новых переменных - вектора (G,c[],t), а оно не хотит...
где её можно потестировать?
Ну это не сложно. Сделайте простейшую функцию, возвращающую матрицу или вектор. Затем создайте матрицу или вектор соответствующей размерности и вставьте туда какие-нибудь новые переменные. Присвойте функцию матрице (или вектору) с новыми переменными - вуаля, ошибка в выражении - можно тестировать

в каких ситуациях её целесообразно использовать?
Почти в любых задачах с программированием (прог-блоками).
Не секрет, что подпрограмма берет и возвращает много (иногда очень много) значений (прикол из жизни: когда учился в институте, видел фрагмент старой DOS программы на Фортране для расчета ступени турбины, где аргументы подпрограммы занимали несколько строк

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

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