LINUX.ORG.RU

Ищу редактор, показывающий формулы в коде по-человечески


0

1

Существует ли редактор для исходников, который бы изображал математические выражения так, как они обычно выглядят на бумаге? То есть как минимум с многоэтажными дробями, а желательно и со степенями в виде верхних индексов и прочим.

Нужно это затем, чтобы не парсить мозгом километровую строку, пытаясь отыскать там нужный элемент, а сразу видеть, что к чему.

Подчёркиваю, это не формулы сами по себе, а выражения в программе на неком ЯП. Т.е. нечто вроде «double A = 1.3 / (R+t) + (k + f) / (t + L/a);»

Бывает такое?

★★

Т.е. нечто вроде «double A = 1.3 / (R+t) + (k + f) / (t + L/a);»

Писать такие формулы, значит получить горстку говна в свою карму от того, кто будет сопровождать ваш код.

Должно все быть легко и прозрачно. Да и компилеру будет проще.

const double K0 = 1.3;
const double K1 = R + t;
const double K2 = k + f;
const double K3 = t + L/a;
double A = K0 / K1 + K2 / K3;

Имена аргументов стоит выбирать читабельными.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

> Должно все быть легко и прозрачно.

const double K1 = R + t;

Итого вместо одной формулы - десять экранов таких вот «A=B+C».

Писать такие формулы

Если бы компьютер адекватно отображал это — никакой проблемы бы не было. В тетради и учебнике пишут именно так, а не через сто шагов «сложить-умножить».

Но пока получается неудобно, да. Тема как раз об этом.

fffgh ★★
() автор топика
Ответ на: комментарий от ott

> напишите расширение для емакса, для латеха там подобное есть...

Уже что-то. Жаль, что только для латеха.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

>Уже что-то. Жаль, что только для латеха.

Принципе можно попробовать схачить простенький matcher по исходнику и транслятор этого добра в LaTeX. И кормить существующее решение уже этими, «транслироваными», формулами.

Sectoid ★★★★★
()

В маткаде (MathCad) такое было (когда я его использовал лет 15 назад). Там даже свой язык программирования был. Только неудобно это очень. Ничего лучше нет, чем обычная запись в текст.

dave ★★★★★
()
Ответ на: комментарий от Sectoid

> Принципе можно попробовать схачить простенький matcher по исходнику и транслятор этого добра в LaTeX. И кормить существующее решение уже этими, «транслироваными», формулами.

И потом ещё все изменения обратно преобразовывать и сохранять в исходнике. Короче, не осилю.

fffgh ★★
() автор топика
Ответ на: комментарий от bik

> как будто язык fortress позволяет писать код сразу в «математическом» виде

Я не про язык — про отображение. В fortress, насколько я понял, куча всяких «математических» операторов в языке, но это не поможет увидеть многоэтажную дробь по-человечески.

fffgh ★★
() автор топика
Ответ на: комментарий от dave

> В маткаде (MathCad) такое было (когда я его использовал лет 15 назад).

Да, как в маткаде.

Там даже свой язык программирования был.

Хотелось бы, чтобы это работало с обычным си/питоном/чем угодно.

Только неудобно это очень.

Очень удобно. В книгах формулы выглядят так, а не иначе.

Ничего лучше нет, чем обычная запись в текст.

Так я и предлагаю использовать текст — обычный исходник.

fffgh ★★
() автор топика

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

По сабжу, если таких формул таки много, значит Вы идете вообще не верным путем. Берете CAS (напр maximu), набираете все формулы в ней, в ней же делаете преобразования (какие есть), результат выгружаете в TeX для просмотра и отладки и в ЯП (в виде отдельного файла) для компиляции - это будет Ъ и unix-way. ЯП сами по себе как бы CAS не являются и просто не предназначены для решения таких задач (если это не что то страшно специфичное и замороченное). Не надо пытаться скрестить ужа с ежом - зверушка выйдет неласковая и несимпатишная;-)

AIv ★★★★★
()
Ответ на: комментарий от fffgh

>И потом ещё все изменения обратно преобразовывать и сохранять в исходнике. Короче, не осилю.

Зачем обратно? О_о достаточно просто дать возможность редактировать исходный вариант и перегенерячивать LaTeX при изменении.

Sectoid ★★★★★
()
Ответ на: комментарий от dave

> Это только выглядит красиво, а работать с этим тяжело.

Маткадом пользовался, понравилось.

И ведь зачем-то придумали тех?

Тех как раз придумали, чтобы можно было получить в книге формулы в нормальном виде. Людям не интересно видеть в книге формулы «в виде текста» - иначе бы и тех не понадобился.

И для теха, как выясняется, уже сделали такой плагин к емаксу. Оказывается, работающие с техом тоже не прочь видеть формулу в нормальном виде.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

работающие с техом тоже не прочь видеть формулу в нормальном виде.

Для этого достаточно скомпилировать документ. А WYSIWYG для теха/латеха - нонсенс.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от AIv

> использование закоденных таким образом формул само по себе большое зло с т.з. производительности - компайлер то это хозяйство хорошо не соберет, надо расписывать ручками минимизирую кол-во операций деления и спецфункций.

Подозреваю, что компилятор способен всё это заоптимизировать гораздо сильнее, чем человек.

Ну да сейчас не про оптимизации, сейчас про удобство работы.

Надо думать что пишется и юзать высокоуровненвые библиотеки (с поддержкой лин. алгебры, компл числе и т.д.)

Не надо даже углубляться в математику. Проблема проста. Многоэтажная дробь — это несколько сложений и делений. И всё.

Берете CAS (напр maximu), набираете все формулы в ней, в ней же делаете преобразования (какие есть), результат выгружаете в TeX для просмотра и отладки и в ЯП (в виде отдельного файла) для компиляции

Очень удобно, да. Как при таком подходе исправить формулу?

ЯП сами по себе как бы CAS не являются и просто не предназначены для решения таких задач

Зато текстовые редакторы предназначены. О них и речь.

fffgh ★★
() автор топика
Ответ на: комментарий от Sectoid

>> И потом ещё все изменения обратно преобразовывать и сохранять в исходнике. Короче, не осилю.

Зачем обратно?

Формулу будут редактировать.

достаточно просто дать возможность редактировать исходный вариант

Редактировать, ковыряясь в километровой строке? Именно об этом тема — это неудобно.

fffgh ★★
() автор топика
Ответ на: комментарий от Eddy_Em

> А WYSIWYG для теха/латеха - нонсенс.

Пользователи соответствующего плагина явно об этом не догадываются.

fffgh ★★
() автор топика
Ответ на: комментарий от Sectoid

Имхо вариант с литературным программированием тут более подойдёт :)

yoghurt ★★★★★
()

Проблема в твоей постановке задачи - формат формулы не определяется однозначно самой формулой, он тоже должен присутствовать в исходнике. Ты не сможешь задать так правила автоформатиования формул, чтобы тебе всегда было понятно то, что ты увидишь на экране.

Была у меня в своё время идейка использовать Mathematica для описания алгоритмов. Она уже умеет представлять формулы (и ещё кучу полезностей типа упрощения выражений и символьного дифференцирования). Но как-то не углубился я в научные расчёты и идея осталась нереализованной.

Видимо, свободные аналоги Mathematica существуют.

Понадобится такая программа и конвертер, превращающий твою программу в исходник.

anonymous
()
Ответ на: комментарий от fffgh

> Подозреваю, что компилятор способен всё это заоптимизировать гораздо сильнее, чем человек.

Вы только подозреваете, а я основываясь на своем скромном опыте в области численного моделирования знаю что не может.

Очень удобно, да. Как при таком подходе исправить формулу?

Правите исходники которые обрабатывает CAS.

Зато текстовые редакторы предназначены. О них и речь.

Да-да. Я о том и говорю - инструмента который Вы реквестировали в исходном посте в природе нету (ну я не встречал), хотя Вы как бы не первый кто занялся кодированием громоздкой математики. Зато есть CAS - они могут делать то, чего Вы хотите и еще много чего. Наверное люди, которые этим занимаются, решили что конвертер C->LaTeX не нужен, CAS более эффективны... хотя конечно что они вообще понимают в этом вопросе?;-)

А WYSIWYG для теха/латеха - нонсенс.

Пользователи соответствующего плагина явно об этом не догадываются.

За 15 лет работы в числ моделировании я не встречал ни одного человека, к-й бы активно писал в ТеХ и активно этими плагинами пользовался (при том, что вся наша рабочая группа и еще куча народу вокруг пользуется LaTeX). Я видел потуги вордятников пересесть на ТеХ при помощи этих плагинов - ни у одного не вышло, видимо мотивации не хватило.

AIv ★★★★★
()
Ответ на: комментарий от yoghurt

Популярен у домохозяек, не осиливших латех, но считающих ОО слишком унылым :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от fffgh

> > Должно все быть легко и прозрачно.

> const double K1 = R + t;

Итого вместо одной формулы - десять экранов таких вот «A=B+C».



Повторюсь, зато все прозрачно и поддерживать такой код гораздо легче в дальнейшем.

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

> Проблема в твоей постановке задачи - формат формулы не определяется однозначно самой формулой

А пример можно?

Ты не сможешь задать так правила автоформатиования формул, чтобы тебе всегда было понятно то, что ты увидишь на экране.

Да ничего страшного. Пусть сперва на экрнае хоть что-нибудь появится.

использовать Mathematica... Она уже умеет представлять формулы

Ну вот, Mathematica же справляется.

Понадобится такая программа и конвертер, превращающий твою программу в исходник.

Нет, там с редактированием проблемы будут.

fffgh ★★
() автор топика
Ответ на: комментарий от AIv

> я основываясь на своем скромном опыте в области численного моделирования знаю что не может.

А можно конкретный пример — формулу и пояснения, что там компилятор сам не может сделать?

Очень удобно, да. Как при таком подходе исправить формулу?

Правите исходники которые обрабатывает CAS.

О чём и речь. Удобства — ноль.

Я о том и говорю - инструмента который Вы реквестировали в исходном посте в природе нету

Внезапно, для языка под названием тех — есть. И как минимум ещё есть маткад. Возможно, найдётся и что-то более подходящее.

Зато есть CAS - они могут делать то, чего Вы хотите

И многие ли CAS позволяют редактировать формулы так, как надо мне? Вы точно понимаете, о чём эта тема?

fffgh ★★
() автор топика
Ответ на: комментарий от andreyu

> Повторюсь, зато все прозрачно и поддерживать такой код гораздо легче в дальнейшем.

Возможно. Если мега-редактор не найдётся, попробую такую запись.

fffgh ★★
() автор топика
Ответ на: комментарий от anonymous

> MathML ?

Мне бы готовое. Второй емакс писать не собираюсь.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Да, не догадываются. LaTeX достаточно предсказуем, поэтому после некоторого опыта работы начинаешь представлять что получится в итоге безо всяких плагинов и компиляций.

srj ★★
()
Ответ на: комментарий от fffgh

А можно конкретный пример — формулу и пояснения, что там компилятор сам не может сделать?

Сравните время выполнения и результаты сборки с -S

double x=3.;
for( long i=0; i<10000000; i++ ) x = 1+ .5/(1./x);

и

double x=3.;
for( long i=0; i<10000000; i++ ) x = 1+ .5*x;

Правите исходники которые обрабатывает CAS.

О чём и речь. Удобства — ноль.

...

И многие ли CAS позволяют редактировать формулы так, как надо мне? Вы точно понимаете, о чём эта тема?

Э... что нужно Вам до конца понимаете очевидно только Вы сами, но если Вы хотите визиви редактор формул, то у меня для Вас плохие новости - визиви редактирование формул крайне неэффективно. Я не знаю, кто Вы и что есть лично для Вас удобства, но мировая практика однозначно показывает, что единственный эффективный способ набора и редактирования формул - это работа с текстовыми исходниками в форматах LaTeX или какой нить CAS.

Кодирование сложных формул является немного отдельной задачей. Если производительность не важна (не так важна как трудоемкость, а формулы очень сложны - но судя по Вашим постам это не Ваш случай), то рулит генерация кода через CAS. За всю свою практику я дважды сталкивался со случаями необходимости кодогенерации - первый раз написал генератор на питоне (разложение в многомпонентный ряд Тейлора до пятого что ли члена), во второй раз заюзал махиму - и то только для создания шаблонов к-е потом руками правил.

Если формулы не очень сложные а производительность таки важна - формулы кодятся ручками с использованием правильного форматирования и вычисления каких-то промежуточных вещей чтоб сделать код достаточно наглядным - но это уже предлагали.

Если хотите визиви и лисапед с шестиугольными колесами - берите MathML, OO, пишите плагины к emacs... уподобитесь домохозяйке, для которой matlab слишком уныл;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

> .5/(1./x);

Данная мега-оптимизация как минимум влёгкую выводится на бумажке, как раз когда формула как видна в человеческом виде. Какой-то особый, «компьютерный» подход к формуле тут не требуется.

Про компилятор не в курсе, но если он сам не может такое сократить — это печально.

если Вы хотите визиви редактор формул

Да. И мне нужен редактор, а не чужие рассуждения, почему они не хотят пользоваться таким редактором.

fffgh ★★
() автор топика
infixl 1 ==================
infixl 1 ================
infixl 1 ==============
infixl 1 ============
infixl 9 ==========
infixl 9 ========
infixl 9 ======
infixl 9 ====

[   (====)
  , (======)
  , (========)
  , (==========)
  , (============)
  , (==============)
  , (================)
  , (==================)
  ] = replicate 8 (/)

f a b c = a / (b + c + 34 * b / (1 + a / 23))

f' a b c =
  
          a
   ==================        
    b + c +  (34 * b)
             ==========
            (1 + a / 23)

test = and
  [ f a b c == f' a b c | a <- [1 .. 10]
                        , b <- [1 .. 10]
                        , c <- [1 .. 10] ]
quasimoto ★★★★
()
Ответ на: комментарий от fffgh

>Да. И мне нужен редактор, а не чужие рассуждения, почему они не хотят пользоваться таким редактором.

Люди дело говорят. Мышкой редактировать формулы заметно менее удобно, чем бегать по строке клавишами и работать только клавиатурой.

Первое время, конечно, это кажется неудобным, но после некоторой практики строки с формулами начинают отлично читаться. Доходит до того, что в виде строки оно воспринимается лучше, чем в виде «настоящей» формулы (это после пары крупных документов в ТеХ-е, например).

Получается, что со временем работа со строкой становится очень простой, а вот работа с графическим видом всё равно остаётся медленной.

Собственно, графический вид удобен тем, кто делает формулы один раз, а кто занимается ими постоянно (большой крупный проект, документы в ТеХ итд) выбирают строки. Так уж получается.

anonymous
()
Ответ на: комментарий от fffgh

Тогда возьмите ворд, там оно есть. Трудовых успехов!

AIv ★★★★★
()
Ответ на: комментарий от fffgh

> Про компилятор не в курсе, но если он сам не может такое сократить — это печально.

А он не имеет права. Для x = 0. 5.*x == 0, 5. / (1. / x) == NaN или runtime error

Shimuuar
()
Ответ на: комментарий от Eddy_Em

А WYSIWYG для теха/латеха - нонсенс.


За што люблю ученыхъ - это вот за такое безапелляционное сектантство, из за чего толпы их коллег пользуются вордом и прочим ужасом :D

Визивинг для теха называется LyX и активнейшем образом используется. Набивать формулы с помощью визуальных средств *гораздо* удобнее. Просто не надо путать «визуально» и «с помощью мышки». Мышка используется в качестве «последнего средства». Основное средство это естественно хоткеи.

Единственно что, желательно отлавливать потенциальных писателей формул в юности и передавать им сакральное знание сразу комплектом, что бы не доходили самостоятельно (часто не доходят :) ). Как только такой товарищь освоит основы LyX, то есть поймет за счет чего достигается скорость набивания формул и безгеморойность - уже сами подсаживаются и за уши от LyX не оттащить.

kernel ★★☆
()

re: Ищу редактор, показывающий формулы в коде по-человечески

> Подчёркиваю, это не формулы сами по себе, а выражения в программе на неком ЯП. Т.е. нечто вроде «double A = 1.3 / (R+t) + (k + f) / (t + L/a);»

Всегда ненавидел MathCAD, но, блин, при этом нравились Maple и MathLab. MathCAD был в несколько десятков раз тормознее MathLab и за это я его ненавидел лютой ненавистью... :E

anonymous
()
Ответ на: комментарий от anonymous

> Мышкой редактировать формулы заметно менее удобно

Я не предлагал редактировать формулы мышкой.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Видимо, человек решил показать тебе, как можно написать ChiWriter прямо на хаскеле. Мне, кстати, пример понравился :)

dave ★★★★★
()
Ответ на: комментарий от kernel

Как только такой товарищь освоит основы LyX, то есть поймет за счет чего достигается скорость набивания формул и безгеморойность - уже сами подсаживаются и за уши от LyX не оттащить.

Вот именно. И будет этот товарищ в LyX'е сидеть, тратить уйму времени на набор элементарной статьи, вместо того, чтобы освоить тех и латех.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от kernel

> За што люблю ученыхъ - это вот за такое безапелляционное сектантство

А меня умиляет ЛОР, тут так много нового узнаешь...

Визивинг для теха называется LyX и активнейшем образом используется.

ГДЕ??? Повторюсь - я лично не знаю ни одного человека юзающего этот самый LyX.

Набивать формулы с помощью визуальных средств *гораздо* удобнее.

КОМУ??? К слову - если верить предметному указателю в LaTeX больше 2000 команд. 2000 хоткеев... ладно, пусть 100 часто используемых команд и 100 хоткеев... мой мосг видимо имеет весьма скромные возможности - такого явно не осилит.

Единственно что, желательно отлавливать потенциальных писателей формул в юности и передавать им сакральное знание сразу комплектом, что бы не доходили самостоятельно (часто не доходят :) ). Как только такой товарищь освоит основы LyX, то есть поймет за счет чего достигается скорость набивания формул и безгеморойность - уже сами подсаживаются и за уши от LyX не оттащить.

Гы... мы таких искателей сразу сажаем на ТеХ, начиная с 3го курса. ЧЕго то к LyX их потом за уши не подтащишь. Это физтехи такие извращенцы, или с LyX че то не то?

Я не говорю про переносимость и редактируемость TeX-кода, к-й выдает LyX. ОпенОфис к слову тоже умеет сохранять в TeX. Лучше б он этого не умел...

AIv ★★★★★
()
Ответ на: комментарий от Axel

> Maple?

Мне бы для обычных языков, вроде питона. А это ещё и за деньги.

Но судя по скриншотам — да, его создатели тоже не в курсе, какие формулы нынче в моде. Дроби у них как дроби, степени как степени. Ну никакой фантазии у людей.

И использовать его внутренние конструкции?

Приделать к maple подсветку синтакиса?

fffgh ★★
() автор топика
Ответ на: комментарий от AIv

> ладно, пусть 100 часто используемых команд и 100 хоткеев... мой мосг видимо имеет весьма скромные возможности - такого явно не осилит.

А что осилит? 100 команд для написания того же вручную, без подсказок?

fffgh ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.