adsl club

Справочник

Форум

Программы

Фильмы

Ресурсы

Файлообмен

Хостинг

Ростелеком
Интересное наблюдение в Mathcad
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ
Автор Сообщение
AlexRock
Гуру
СообщениеДобавлено: Вс 26-04-09 : 19-54    Заголовок сообщения: Интересное наблюдение в Mathcad Ответить с цитатой

Вобщем, есть такое правило (по крайней мере, Маткад выдаёт ошибку при попытке использовать это), что в Маткаде нельзя переопределить фукцию, изменив в ней только число параметров, чтобы обе реализации при этом работали. Т. е. нельзя сделать, например, вот так:



- вариант фукнции а с одним параметром "затенён". Поэтому, недопустим, также, более сложный вариант использования функции а сразу в двух её реализациях:



Но, можно обойти эту проблему, введя дополнительную функцию с, которая использует реализацию функции а с одним параметром. Тогда отдельно функцию а с одним параметром использовать по-прежнему нельзя, но в составе другой функции - можно(!):




Сдаётся мне, что это возможно из-за т. н. "стека вызова функций", который позволяет отыскивать функции b вариант функции а с одним параметром, через функцию с. Конечно, можно не париться и поступить проще, не объявляя "вспомогательную" функцию с:



- это на целую строчку меньше и, казалось бы, понятнее. Но, здесь есть одно существенное "Но!" - на этом простом примере не видно выгоды моего вариант со вспомогательной функцией с, но в некоторых практических применениях та функция, которая играет роль "вспомогательной" функции с, является вовсе не вспомогательной, а отдельной важной функцией. Более того, для удобства понимания смысла математических выражений, одинаковым именем функции (хоть и с разным количеством параметров) нужно подчеркнуть, что функции а с разным числом параметров обладают одинаковым внутренним устройством (набором и расположением всех операторов - сложения, вычитания, умножения, возведения в степень и пр.), т. е. являются, по сути, одной и той же функцией, где, в одном варианте, один из параметров просто принят за ранее определённую константу. Вобщем, в моём практическом примере это выглядело так:



Тут не надо разбираться в самих формулах Smile , только обратите внимание, что роль функции а с несколькими параметрами тут играет функция А1 (к ней в конце концов и приводят оба пути, обозначенные стрелками), роль функции b играет функция Sc, а роль функции с играет функция а. Два предполагаемых пути в стеке вызова функций я обозначил двумя цветами - красный для варианта функции А1 с двумя параметрами, и синий - для варианта функции А1 с одним параметром. Также заметьте, что функция а, использующая другой вариант функции А1 (с одним параметром) не является "вспомогательной" и ненужной, как в более простом примере вначале, а является важной величиной, исключить которую нельзя, как мы это сделали в более простом примере в случае с функцией с. Также следует обратить внимание, что функция А1 в обоих своих реализациях вычисляется однообразно - через тангенс - поэтому, для понимания смысла математических выражений, не желательно бы было называть разные реализации этой функции разными именами.



Если кто-то раньше знал о такой возможности преодолеть упомянутое ограничение Маткада, то напишите, пожалуйста, правильно ли я понимаю механизм работы Маткада (я насчёт стека вызова функций) и действительно ли во всех подобных случаях можно использовать этот приём без ущерба для правильности расчётов (а то, вдруг, в каком-то случае это не сработает)?
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Показать сообщения:   
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ Часовой пояс: GMT + 7
Страница 1 из 1

 

 
Аватары: Вкл|Выкл   ЮзерИнфо: Вкл|Выкл   Подписи: Вкл|Выкл
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы