Автор |
Сообщение |
AlexRock Гуру |
|
Вобщем, есть такое правило (по крайней мере, Маткад выдаёт ошибку при попытке использовать это), что в Маткаде нельзя переопределить фукцию, изменив в ней только число параметров, чтобы обе реализации при этом работали. Т. е. нельзя сделать, например, вот так:
- вариант фукнции а с одним параметром "затенён". Поэтому, недопустим, также, более сложный вариант использования функции а сразу в двух её реализациях:
Но, можно обойти эту проблему, введя дополнительную функцию с, которая использует реализацию функции а с одним параметром. Тогда отдельно функцию а с одним параметром использовать по-прежнему нельзя, но в составе другой функции - можно(!):
Сдаётся мне, что это возможно из-за т. н. "стека вызова функций", который позволяет отыскивать функции b вариант функции а с одним параметром, через функцию с. Конечно, можно не париться и поступить проще, не объявляя "вспомогательную" функцию с:
- это на целую строчку меньше и, казалось бы, понятнее. Но, здесь есть одно существенное "Но!" - на этом простом примере не видно выгоды моего вариант со вспомогательной функцией с, но в некоторых практических применениях та функция, которая играет роль "вспомогательной" функции с, является вовсе не вспомогательной, а отдельной важной функцией. Более того, для удобства понимания смысла математических выражений, одинаковым именем функции (хоть и с разным количеством параметров) нужно подчеркнуть, что функции а с разным числом параметров обладают одинаковым внутренним устройством (набором и расположением всех операторов - сложения, вычитания, умножения, возведения в степень и пр.), т. е. являются, по сути, одной и той же функцией, где, в одном варианте, один из параметров просто принят за ранее определённую константу. Вобщем, в моём практическом примере это выглядело так:
Тут не надо разбираться в самих формулах , только обратите внимание, что роль функции а с несколькими параметрами тут играет функция А1 (к ней в конце концов и приводят оба пути, обозначенные стрелками), роль функции b играет функция Sc, а роль функции с играет функция а. Два предполагаемых пути в стеке вызова функций я обозначил двумя цветами - красный для варианта функции А1 с двумя параметрами, и синий - для варианта функции А1 с одним параметром. Также заметьте, что функция а, использующая другой вариант функции А1 (с одним параметром) не является "вспомогательной" и ненужной, как в более простом примере вначале, а является важной величиной, исключить которую нельзя, как мы это сделали в более простом примере в случае с функцией с. Также следует обратить внимание, что функция А1 в обоих своих реализациях вычисляется однообразно - через тангенс - поэтому, для понимания смысла математических выражений, не желательно бы было называть разные реализации этой функции разными именами.
Если кто-то раньше знал о такой возможности преодолеть упомянутое ограничение Маткада, то напишите, пожалуйста, правильно ли я понимаю механизм работы Маткада (я насчёт стека вызова функций) и действительно ли во всех подобных случаях можно использовать этот приём без ущерба для правильности расчётов (а то, вдруг, в каком-то случае это не сработает)? |
|
|
|
|
|
Аватары: Вкл|Выкл ЮзерИнфо: Вкл|Выкл Подписи: Вкл|Выкл
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
|