Здравствуйте, tensor1982, Вы писали:
M>>Честно говоря не понял, зачем тебе C++. Ты думаешь когда-нибудь появится время на "толковое описание программы и оптимизацию кода"? C++ однозначно хуже Матлаба для быстрого программирования. По крайней мере пока не набьешь руку и не освоишь библиотек своей области.
T>Если в вкратце, то часто надо рассчитывать различные электротехнологические установки на основе численных методов (математическое моделирование, метод конечных элементов, метод конечных разностей и другие численные методы). Многое считаю используя связку Matlab и специализированный пакет для матмоделирования COMSOL Multiphysics. Но все чаще упираюсь в потолок – то алгоритм решения нелинейных уравнений разработчиками написан дыряво, то идет переполнение памяти (матрица не влазит) при решении задач большой размерности и т.д. Постоянно приходиться плясать с бубном и как то латать дыры. Вот и подумал что надо постепенно, не торопясь, в качестве хобби, нестандартные математические модели рассчитывать/писать на каком-нибудь серьезном языке. Численные методы в основном все на Fortran реализованы. Низнаю с чем это связанно – с тем что на Fortran быстрее создавать приложения или с какими-то ограничениями С++.
Позволю себе вставить пару слов, хоть мои матрицы пока и влазят в память, а считаю я вообще на C#
Присоединюсь к Mazay в его вопросе, зачем вам вообще нужен С++? Ваша специализация — вычисления, а не программирование, вам нужно в первую очередь эффективнее посчитать, а не отвлекаться на то, чтобы заставить компьютер выполнять то, что вам нужно. Вы сами обозначили свои проблемы: во-первых, вас смущает качество вашего кода и необходимость плясать с бубном для залатывания дыр, и во-вторых, объёмы ваших данных настолько велики, что наивное распределение памяти в вашем случае не работает и простые алгоритмы становится невозможно применять.
Что касается первой проблемы, то С++, к сожалению, только увеличит количество мест, в которых вам придётся плясать с бубном. От необходимости периодического затыкания дыр вас тоже не избавит ни один язык программирования — это вопрос опыта и культуры программирования. Некоторые проблемы только так и нужно решать, потому как "красивое" и "правильное" решение может отнять слишком много времени.
А вот повысить свои представления о программировании и о том, что происходит за сценой — можно и нужно. Но опять же, для этого можно выбрать и другой язык, в котором будет меньше условностей, например C#, Python, Java. С другой стороны, численные вычисления популярно делать именно на троице С/С++/Fortran, на указанных мной языках мало кто делает расчёты и это может быть для вас критично.
По поводу второй. Для того, чтобы С++ вам помог в решении этой проблемы, вам понадобится найти готовую библиотеку для работы с огромными матрицами. Если она есть и надёжно работает, то всё хорошо, вы в выигрыше. Если же её нет (или она есть, но сильно платная), то вы оказываетесь в такой же ситуации, в какой оказались с матлабом. Что вам мешает сразу решать эту проблему в рамках Матлаба? Проблема-то переходит в разряд алгоритмических, для решения которых Матлаб содержит достаточно средств.
В качестве итога хотелось бы посоветовать не "изучать С++", а "находить решения своих проблем", и помнить, что эти самые решения совершенно необязательно будут связаны с С++.