Здравствуйте, Аноним, Вы писали:
А>можно ли в макросах nemerle сделать оператор дифференцирования?
Можно:
macro ∂(f, x)
{
}
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Дифференцирование
От:
Аноним
Дата:
19.11.10 09:49
Оценка:
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, Аноним, Вы писали:
А>>можно ли в макросах nemerle сделать оператор дифференцирования?
Q>Имеется в виду символическое дифференцирование, не численное?
Здравствуйте, Аноним, Вы писали:
Q>>Имеется в виду символическое дифференцирование, не численное?
А>символическое.
Если на Nemerle можно написать макросом построитель парсеров, то и макрос выполняющий символическое дифференцирование возможно.
Другой вопрос, а действительно ли это нужно?
Здравствуйте, Аноним, Вы писали:
А>можно ли в макросах nemerle сделать оператор дифференцирования?
Вполне. Создаёшь макрос уровня выражения, преобразуешь выражение в команду для своего любимого математического пакета, получаешь результат и либо создаёшь новое выражение, либо выдаёшь ошибку времени компиляции.
Ce n'est que pour vous dire ce que je vous dis.
Re[2]: дифференцирование
От:
Аноним
Дата:
19.11.10 09:54
Оценка:
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Аноним, Вы писали:
А>>можно ли в макросах nemerle сделать оператор дифференцирования?
H>Можно: H>
H>macro ∂(f, x)
H>{
H>}
H>
оператор будет воздействовать на все выражения внутри кода
например
Здравствуйте, Аноним, Вы писали:
А>можно ли в макросах nemerle сделать оператор дифференцирования?
Можно, но сложно. От использования макросов в эта задача не упрощается. Хотя можно попытаться сделать обертку на макросах для автоматического дифференцирования. Вот ссылки по теме: раз и два.
А>интересна не реализация а принципиальная возможноость
Макрос может принимать на вход произвольный блок кода. Так реализованы все стандартные конструкции управления (if, while, foreach, etc..), так сделаны Computation Expressions, так какой гик сделал фронтэнд к CUDA (ссылки не помню, но могу поискать).
Здравствуйте, hardcase, Вы писали:
H>Макрос может принимать на вход произвольный блок кода. Так реализованы все стандартные конструкции управления (if, while, foreach, etc..), так сделаны Computation Expressions, так какой гик сделал фронтэнд к CUDA (ссылки не помню, но могу поискать).
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Аноним, Вы писали:
Q>>>Имеется в виду символическое дифференцирование, не численное?
А>>символическое.
H>Если на Nemerle можно написать макросом построитель парсеров, то и макрос выполняющий символическое дифференцирование возможно. H>Другой вопрос, а действительно ли это нужно?
не нужно, это специфичное, просто инетерсна возможно ли....
имеется ввиду дифференцирование внутри существующего кода, без переписывания ВСЕХ макросов
Здравствуйте, Аноним, Вы писали:
А>не нужно, это специфичное, просто инетерсна возможно ли.... А>имеется ввиду дифференцирование внутри существующего кода, без переписывания ВСЕХ макросов
Макрос выполняет трансформацию кода. На входе один код, на выходе — другой. Что должно быть на выходе вашего?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Дифференцирование
От:
Аноним
Дата:
19.11.10 11:25
Оценка:
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Аноним, Вы писали:
А>>не нужно, это специфичное, просто инетерсна возможно ли.... А>>имеется ввиду дифференцирование внутри существующего кода, без переписывания ВСЕХ макросов
H>Макрос выполняет трансформацию кода. На входе один код, на выходе — другой. Что должно быть на выходе вашего?
на входе функция и аргумент дифференцирования — на выходе производная функции от этого аргумента
макрос должен будет оперировать подвыражениями функции и преобразовывать ВСЕ вызываемые фунции (делать их копии) и преобразовывать по правилам.
Здравствуйте, Аноним, Вы писали:
H>>Макрос выполняет трансформацию кода. На входе один код, на выходе — другой. Что должно быть на выходе вашего?
А>на входе функция и аргумент дифференцирования — на выходе производная функции от этого аргумента А>макрос должен будет оперировать подвыражениями функции и преобразовывать ВСЕ вызываемые фунции (делать их копии) и преобразовывать по правилам.
Для начала нужно определиться с тем что такое функция.
"ВСЕ" функции в любом случае нельзя будет дифференцировать, например функции из внешних библиотек — их исходный код не доступен.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: Дифференцирование
От:
Аноним
Дата:
19.11.10 13:12
Оценка:
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Аноним, Вы писали:
H>>>Макрос выполняет трансформацию кода. На входе один код, на выходе — другой. Что должно быть на выходе вашего?
А>>на входе функция и аргумент дифференцирования — на выходе производная функции от этого аргумента А>>макрос должен будет оперировать подвыражениями функции и преобразовывать ВСЕ вызываемые фунции (делать их копии) и преобразовывать по правилам.
H>Для начала нужно определиться с тем что такое функция. H>"ВСЕ" функции в любом случае нельзя будет дифференцировать, например функции из внешних библиотек — их исходный код не доступен.
Тут просто все внешние функции прописанные в макросе. Например +, -, sin, ln, * но не например def f(x)=x*ln(x)
Здравствуйте, Аноним, Вы писали:
H>>Для начала нужно определиться с тем что такое функция. H>>"ВСЕ" функции в любом случае нельзя будет дифференцировать, например функции из внешних библиотек — их исходный код не доступен.
А>Тут просто все внешние функции прописанные в макросе. Например +, -, sin, ln, * но не например def f(x)=x*ln(x)
Если ограничиться тем, что функция — это та штука из математики, записанная с использованием синтаксиса Nemerle, плюс набор "хорошо известных" функций вроде логарифма и тригонометрии, то конечно все можно