Здравствуйте!
Ранее программировал на Matlab. Сейчас надо С++. Для старта в С++ почитал первое что попалось под руку «Шилдт Г. C++ Руководство для начинающих». Очень скучно, примеры тривиальные – но с чего-то же надо начинать.
Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?!
Спасибо!
Здравствуйте, tensor1982, Вы писали:
T>Здравствуйте! T>Ранее программировал на Matlab. Сейчас надо С++. Для старта в С++ почитал первое что попалось под руку «Шилдт Г. C++ Руководство для начинающих». Очень скучно, примеры тривиальные – но с чего-то же надо начинать. T>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?! T>Спасибо!
Книжки по С++ с уклоном в численные методы на русском мне не попадались.
Поищи на английском.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, tensor1982, Вы писали:
T>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?!
такие вещи лучше отдельно ботать, вообще по плюсам довольно много хороших книг(страуструп, александревску, саттер, майерс и т.д), а по алгоритмам — лучше википедии(правда английской) ещё ничего не придумали.
Здравствуйте, tensor1982, Вы писали:
T>Здравствуйте! T>Ранее программировал на Matlab. Сейчас надо С++. Для старта в С++ почитал первое что попалось под руку «Шилдт Г. C++ Руководство для начинающих». Очень скучно, примеры тривиальные – но с чего-то же надо начинать. T>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?! T>Спасибо!
Сообразил. В книге Джосаттиса по стандартной библиотеке есть описание valarray — специальный класс-шаблон для проведения численных расчетов.
А просто по С++ много хороших книжек. ИМХО, можно начинать с книжек Стэнли Липпмана.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, tensor1982, Вы писали:
T>Здравствуйте! T>Ранее программировал на Matlab. Сейчас надо С++. Для старта в С++ почитал первое что попалось под руку «Шилдт Г. C++ Руководство для начинающих». Очень скучно, примеры тривиальные – но с чего-то же надо начинать. T>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?! T>Спасибо!
Я щас выражу только свое мнение, которое происходит из личного общения с программистами, у которых профиль — математика и которые пишут на С++. Их код ужасен с точки зрения С++, он небезопасен и плохо поддерживаем, но зато четко соответствует его математической подоплеке. Безусловно, если все пройдет хорошо, он работает быстро, но, увы, так почти никогда не бывает в больших проектах.
Поэтому, совет у меня такой, не зацикливайся на математике, если ты новичек в С++, то прежде всего нужно понять суть языка, концепцию в его заложенную, его дух. После этого математика, приложенная к этому знанию перестанет мешать тебе решать задачу грамотно в рамках языка, а наоборот, дополнит и выведет программирование на совершенно новый уровень.
Поэтому выкинь нафиг Шилдта. Лучше Лимпмана, Страуструпа, Саттера, Мейерса. И после изучения, ты найдешь как лучше применить математику, намного лучше, чем если поступать наоборот.
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, tensor1982, Вы писали:
T>>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?!
S>такие вещи лучше отдельно ботать, вообще по плюсам довольно много хороших книг(страуструп, александревску, саттер, майерс и т.д), а по алгоритмам — лучше википедии(правда английской) ещё ничего не придумали.
Да ладно, есть хотя бы "Introduction To Algorithms", которая будет полезнее тыкания по википедии без знания предмета. Википедия хороша, когда знаешь, что искать. Да и не все статьи хорошего качества, поэтому надо еще уметь распознавать более-менее достоверную информацию.
Здравствуйте, _DAle_, Вы писали:
_DA>Здравствуйте, Sni4ok, Вы писали:
S>>Здравствуйте, tensor1982, Вы писали:
T>>>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?!
S>>такие вещи лучше отдельно ботать, вообще по плюсам довольно много хороших книг(страуструп, александревску, саттер, майерс и т.д), а по алгоритмам — лучше википедии(правда английской) ещё ничего не придумали.
_DA>Да ладно, есть хотя бы "Introduction To Algorithms", которая будет полезнее тыкания по википедии без знания предмета. Википедия хороша, когда знаешь, что искать. Да и не все статьи хорошего качества, поэтому надо еще уметь распознавать более-менее достоверную информацию.
Согласен, что на начальном этапе толковая книга полезнее разрозненных примеров. Я вначале решил взять наскоком – здесь _http://alglib.sources.ru/diffequations/eulerm.php изложен самый простой алгоритм решения обыкновенных дифференциальных уравнений методом Эйлера. Есть исходники на С++. Алгоритм мне понятен – в Matlab(е) это я быстро смогу реализовать даже не читая ничего про алгоритм, а так по остаточным знаниям. Но скачав коды на С++ я просто запутался – там во первых практически нет комментариев, во вторых незнакомый мне язык, в третьих – на С++ просто куча файлов в архиве.
О какой книге "Introduction To Algorithms" идет речь?! Я скачал «Cormen et al. Introduction to algorithms, 2 ed», но там ни слова на С++. В амазоне есть «Cormen et al. Introduction to Algorithms, Third Edition (2009)», но в аннотации и Reviews я не вижу ни слова о С++. Или где то можно скачать код?!
p.s. Бегло пролистав "Introduction To Algorithms" чувствую что книжка любопытная и скорее всего можно отнести к классике алгоритмов и положить в папочку рядышком с Кнутом. Так что даже если к ней нет кодов на С++ в любом случае – спасибо.
Здравствуйте, wander, Вы писали:
W>Я щас выражу только свое мнение, которое происходит из личного общения с программистами, у которых профиль — математика и которые пишут на С++. Их код ужасен с точки зрения С++, он небезопасен и плохо поддерживаем, но зато четко соответствует его математической подоплеке. Безусловно, если все пройдет хорошо, он работает быстро, но, увы, так почти никогда не бывает в больших проектах.
W>Поэтому, совет у меня такой, не зацикливайся на математике, если ты новичек в С++, то прежде всего нужно понять суть языка, концепцию в его заложенную, его дух. После этого математика, приложенная к этому знанию перестанет мешать тебе решать задачу грамотно в рамках языка, а наоборот, дополнит и выведет программирование на совершенно новый уровень.
W>Поэтому выкинь нафиг Шилдта. Лучше Лимпмана, Страуструпа, Саттера, Мейерса. И после изучения, ты найдешь как лучше применить математику, намного лучше, чем если поступать наоборот.
W>Все имхо.
Согласен, что библию и классиков прочесть рано или поздно надо будет. Но листая «Липпман. Основы программирования на C++» я не вижу ни одного примера работы с матрицами, ни одного решенного уравнения. Или имелась ввиду другая книга Липпмана? Книга Липпмана конечно гораздо интереснее чем Шилдт, но опять же боюсь что начну засыпать.
Кроме того когда вижу огромный список книг по С++, которые нужно прочесть вспоминаю слова Мао Цзэдуна «Чем больше книг я читал, тем больше глупел», «Много будешь читать — императором не станешь» и слова Кернигана «Единственный способ изучать новый язык программирования — писать на нем программы».
В любом случае даже если наберусь терпения и буду вначале упорно читать классиков, библию, а потом только программировать численные алгоритмы на С++ нужна толковая книга где описаны различные нюансы методов решения больших разряженных систем алгебраических уравнений, тонкости работы с матрицами, решение дифференциальных уравнений и уравнений в частных производных и особенности реализации этой лженауки на С++. А то получиться и у меня «код ужасеный с точки зрения С++».
Вот если бы меня спросил человек «какую литературу надо почитать что бы начать программировать на Matlab численные методы, прикоснуться к прикладной математике?», я бы несомненно рекомендовал для старта любой самоучитель/самомучитель, а затем «Метьюз. Численные методы MATLAB». В книге есть необходимое введение и необходимый минимум для знакомства с языком Matlab, а затем излагаются численные алгоритмы по методе – от простого к сложному и даются рабочие коды-листинги с подробными комментариями. Или книгу «Плохотников. Вычислительные методы. Теория и практика в среде MATLAB». Все что надо можно постичь за несколько недель-месяцев, в зависимости от интенсивности чтения.
А вот как я осваивал эти численные методы – раньше книг по Matlab в родном городе не продавали, интернета у меня практически не было, приходилось методом тыка и методом чтения на буржуазном и не понятном мне языке (англицком) смотреть help и делать простенькие примеры, потом читать книжку по прикладной математике, писать дырявый код на Matlab…так и мучился самоучкой несколько лет. Сейчас вижу что все это можно было бы постигнуть гораздо быстрее.
Конечно же язык С++ намного более сложен чем язык Matlab и в одной главе книги или в одной книге заложить необходимый минимум по С++ для работы с численными методами, алгоритмами, прикладной математикой, возможно и не получиться. Но все же на Fortran есть любопытные книжки по численному решению уравнений «Computational Physics-Fortran Version», «Fortran code for the book Computer simulation of liquids», «Numerical recipes in parallel Fortran». Кое что по этой теме на Fortran есть на русском, но на С++ что то подобные книги мне не встречались. Хотя мне казалось что С++ более распространен в наши дни.
Стоит ли читать «Седжвик Р. Фундаментальные алгоритмы на C++»?! Или там не показаны «плюсы» С++?
Здравствуйте, tensor1982, Вы писали:
T>Согласен, что на начальном этапе толковая книга полезнее разрозненных примеров. Я вначале решил взять наскоком – здесь _http://alglib.sources.ru/diffequations/eulerm.php изложен самый простой алгоритм решения обыкновенных дифференциальных уравнений методом Эйлера. Есть исходники на С++. Алгоритм мне понятен – в Matlab(е) это я быстро смогу реализовать даже не читая ничего про алгоритм, а так по остаточным знаниям. Но скачав коды на С++ я просто запутался – там во первых практически нет комментариев, во вторых незнакомый мне язык, в третьих – на С++ просто куча файлов в архиве.
T>О какой книге "Introduction To Algorithms" идет речь?! Я скачал «Cormen et al. Introduction to algorithms, 2 ed», но там ни слова на С++. В амазоне есть «Cormen et al. Introduction to Algorithms, Third Edition (2009)», но в аннотации и Reviews я не вижу ни слова о С++. Или где то можно скачать код?! T>p.s. Бегло пролистав "Introduction To Algorithms" чувствую что книжка любопытная и скорее всего можно отнести к классике алгоритмов и положить в папочку рядышком с Кнутом. Так что даже если к ней нет кодов на С++ в любом случае – спасибо.
Да, Кормен — это классика. У нас он переводился — на Озоне можно найти.
Если требуется изучать алгоритмы не численного характера, причем на С++, то нужно найти книжки
Роберта Сэджвика "Фундаментальные алгоритмы на С++". У него же есть и на С, и на Java.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, tensor1982, Вы писали:
T>Конечно же язык С++ намного более сложен чем язык Matlab и в одной главе книги или в одной книге заложить необходимый минимум по С++ для работы с численными методами, алгоритмами, прикладной математикой, возможно и не получиться. Но все же на Fortran есть любопытные книжки по численному решению уравнений «Computational Physics-Fortran Version», «Fortran code for the book Computer simulation of liquids», «Numerical recipes in parallel Fortran». Кое что по этой теме на Fortran есть на русском, но на С++ что то подобные книги мне не встречались. Хотя мне казалось что С++ более распространен в наши дни.
Ну не в той нише С++ обычно используют. Я сам когда-то численные методы на фортране изучал. Но С++ эту нишу как-то плохо занимает. Я ж говорю, на русском книжек по численным методам нет. T>Стоит ли читать «Седжвик Р. Фундаментальные алгоритмы на C++»?! Или там не показаны «плюсы» С++?
Там уже использование. Если ты С++ знаешь, то тебе показывают, как реализовать типовые динамические структуры данных и типовые алгоритмы на них: стеки, очереди, деревья, сортировки, поиск, графы, хеш-функции и т.д.
Но книжка написана хорошо.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, wander, Вы писали:
W>Я щас выражу только свое мнение, которое происходит из личного общения с программистами, у которых профиль — математика и которые пишут на С++. Их код ужасен с точки зрения С++, он небезопасен и плохо поддерживаем, но зато четко соответствует его математической подоплеке. Безусловно, если все пройдет хорошо, он работает быстро, но, увы, так почти никогда не бывает в больших проектах.
Думаю тут дело не в С++ вообще.
Мне тоже приходится постоянно работать с математиками, для которых Matlab — это основной инструмент.
Они и на Matlab'е фигово пишут
В том смысле, что этот код плохо структурирован, плохо читаем и тому подобное.
Т.е. этот код часто достаточно хорош для прототипов, проверки идей и алгоритмов,
но ужасен с точки зрения промышленного программирования.
В таком стиле будет одинаково фигово и на С/С++, и на С# и на вижуал бейсике.
Автору топика:
Учи просто программирование и не зацикливайся на С++.
Здравствуйте, bkat, Вы писали:
B>Мне тоже приходится постоянно работать с математиками, для которых Matlab — это основной инструмент. B>Они и на Matlab'е фигово пишут B>В том смысле, что этот код плохо структурирован, плохо читаем и тому подобное. B>Т.е. этот код часто достаточно хорош для прототипов, проверки идей и алгоритмов, B>но ужасен с точки зрения промышленного программирования. B>В таком стиле будет одинаково фигово и на С/С++, и на С# и на вижуал бейсике.
Я конечно не математик, а ближе к техническим дисциплинам, но мне приходилось работать программистом с многолетним практическим опытом, который говорил «ты мне главное напиши математическую формулы для оптимального управления техническим объектом и растолкуй алгоритм решения этих уравнений», а уж как реализовать это в «железе» и на каком языке, как написать надежный код – это дело техники. Поэтому для проверки идеи и использую Matlab или специализированные средства для математического моделирования. Кроме того иногда просто времени нет – идут эксперементальные данные, надо по быстрому набросать математическую модель, реализовать численный алгоритм решения и сопоставить данные расчета и данные эксперементальных опытов. Поэтому времени на толковое описание программы и оптимизацию кода просто не бывает.
Вот сейчас и решил постепенно подтянуть знания, пощупать С++. Поиграться с алгоритмами на этом языке.
Здравствуйте, LaptevVV, Вы писали: LVV>Ну не в той нише С++ обычно используют. Я сам когда-то численные методы на фортране изучал. Но С++ эту нишу как-то плохо занимает. Я ж говорю, на русском книжек по численным методам нет.
Если посмотреть на эту проблему шире опытным взглядом программиста — почему С++ не удалось занять нишу в этой области?! Еще не время или что-то другое?!
Здравствуйте, tensor1982, Вы писали:
T>Я конечно не математик, а ближе к техническим дисциплинам, но мне приходилось работать программистом с многолетним практическим опытом, который говорил «ты мне главное напиши математическую формулы для оптимального управления техническим объектом и растолкуй алгоритм решения этих уравнений», а уж как реализовать это в «железе» и на каком языке, как написать надежный код – это дело техники. Поэтому для проверки идеи и использую Matlab или специализированные средства для математического моделирования. Кроме того иногда просто времени нет – идут эксперементальные данные, надо по быстрому набросать математическую модель, реализовать численный алгоритм решения и сопоставить данные расчета и данные эксперементальных опытов. Поэтому времени на толковое описание программы и оптимизацию кода просто не бывает.
Ну ты собственно только подтвердил мои наблюдения.
Потому повторюсь, что нету особого смысла концентрироваться на С++,
а надо учиться писать в целом хороший код.
Метод на С++ с 20-ю параметрами на 1000 строк будет одинаково ужасен и на матлабе.
Глобальные структуры с 50-ю полями — это плохо на любом языке программирования
Именно подобные вещи характерны для кода на матлабе, с которым мне приходится сталкиваться.
Инкапсуляция мешает полету мысли настоящего матлаб-гуру
Здравствуйте, bkat, Вы писали: B>Автору топика: B>Учи просто программирование и не зацикливайся на С++.
Интересно, а как научиться программировать, не программируя на каком-нибудь серьезном языке?! В матлабе то можно пользоваться готовыми решениями и не особо заботиться о том сколько место в памяти занимает матрица и т.д. Правда, когда считаешь что-то очень большое – идут сообщения о переполнении памяти и тут уже потолок и т.д. Поэтому то и ищу замену Matlab. Кроме того велика вероятность того что С++ так или иначе понадобиться в дальнейшем.
Здравствуйте, tensor1982, Вы писали:
T>Здравствуйте, LaptevVV, Вы писали: LVV>>Ну не в той нише С++ обычно используют. Я сам когда-то численные методы на фортране изучал. Но С++ эту нишу как-то плохо занимает. Я ж говорю, на русском книжек по численным методам нет. T>Если посмотреть на эту проблему шире опытным взглядом программиста — почему С++ не удалось занять нишу в этой области?! Еще не время или что-то другое?!
ИМХО фортран по-прежнему рулит очень хорошо...
Наработок в нем очень много.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, tensor1982, Вы писали:
T>Здравствуйте, LaptevVV, Вы писали: LVV>>Ну не в той нише С++ обычно используют. Я сам когда-то численные методы на фортране изучал. Но С++ эту нишу как-то плохо занимает. Я ж говорю, на русском книжек по численным методам нет. T>Если посмотреть на эту проблему шире опытным взглядом программиста — почему С++ не удалось занять нишу в этой области?! Еще не время или что-то другое?!
Просто язык сложный, и чтобы на нем грамотно реализовывать математику, нужно сперва освоить все тонкости синтаксиса, знать и уметь применять готовые решения, понимать зачем те или иные возможности есть в языке. Этого иногда слишком много для программиста, особенно, если сравнивать с языками, которые специально затачивались под математику. Многим моим знакомым математикам просто непонятно зачем знать все эти фокусы, о которых тут (на форуме) постоянно ведут беседы, когда намного проще забахать функцию на 50 параметров.
И естественно, если язык требует такой большой теоретической базы ему очень тяжело использоваться повсеместно с одинаковой легкостью. Особенно учитывая общую сложность (сам язык, плюс все прикладные области, требующиеся для решения задачи).
Здравствуйте, tensor1982, Вы писали:
T>Здравствуйте! T>Ранее программировал на Matlab. Сейчас надо С++. Для старта в С++ почитал первое что попалось под руку «Шилдт Г. C++ Руководство для начинающих». Очень скучно, примеры тривиальные – но с чего-то же надо начинать. T>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?! T>Спасибо!
Если цель стоит использовать возможности численных методов, то библиотеки Boost: http://www.boost.org/doc/libs содержат высокоуровневые функции, реализующие самые разные алгоритмы.
Здравствуйте, tensor1982, Вы писали:
T>Здравствуйте! T>Ранее программировал на Matlab. Сейчас надо С++. Для старта в С++ почитал первое что попалось под руку «Шилдт Г. C++ Руководство для начинающих». Очень скучно, примеры тривиальные – но с чего-то же надо начинать. T>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?! T>Спасибо!
может всё-таки использовать языки с математическим уклоном? Почему именно С++?
Здравствуйте, tensor1982, Вы писали:
T>Здравствуйте! T>Ранее программировал на Matlab. Сейчас надо С++. Для старта в С++ почитал первое что попалось под руку «Шилдт Г. C++ Руководство для начинающих». Очень скучно, примеры тривиальные – но с чего-то же надо начинать. T>Есть ли что-нибудь серьезное на С++ с уклоном на алгоритмы, прикладную математику, работу с матрицами, численные методы, решение уравнений, обыкновенные дифференциальные уравнения и т.д.?! T>Спасибо!
Все зависит от того, что собственно требуется. Если хочется просто изучить синтаксис языка, то любая книжка пойдет. Но ни в одной не будет какого-то подробного описания использования языка в контексте алгоритмов, так как с++ — язык общего назначения. Более того, считаю, что именно с++ мало годится для реализации алгоритмов в том смысле, что все его сила (классы, шаблоны и прочее) скорей всего не понадобятся для решения алгоритмических задач — вполне сойдет тот набор, что предоставляет собственно язык С, возможно с привлечением алгоритмов STL (в простейших случаях). Синтаксис знать нужно, чтобы хоть что-то написать, но этого мало. Надо понимать как это работает изнутри, во что компилятор преобразует те или иные конструкции языка, что такое стек, куча, выравнивание данных, разделяемые ресурсы (прошу прощения что свалил все эти термины в одну кучу), а для алгоритмистов особенно важно понимание численной арифметики, округления, переполнения и многое многое что связано с ограничениями вычислительной техники. Это в контексте тех высказываний, что код математиков "из ряда вон". Не знаю, есть ли ли что-то в книгах об этом, мне кажется это просто с опытом приходит.
А вот если говорить о реализации алгоритмов в рамках языка с++, да и любого другого, то было бы полезно ознакомиться с готовыми библиотеками, такими как LAPACK и их различными (реинкарнациями) расширениями, оптимизациями, как например интеловская MKL. Там много готовых базовых алгоритмов из линейной алгебры, FFT, sparse, заточенных под конкретное "железо".