2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Два вопроса...
Сообщение23.02.2012, 15:25 
Здравствуйте.

Друзья, интересуют ваши мнения по следующим вопросам:

1. Мне предстоит написать книгу по численным методам для студентов физических специальностей. Само собой, нужны примеры. На чём писать эти примеры? С одной стороны, сейчас за рубежом де фактом стандартом стал Matlab. Но я его использую для создания либо рабочих прототипов программ (RAD), либо в проектах где несколько рабочих языков. Например сделал прототип, который работает нормально на сетке 200х200 точек, а нужна быстрая работа на сетке 2000х2000. В таком случае сначала матлабовский скрипт пропускаю через профилировщик, чтобы выяснить где bottleneck. Затем участки кода этого самого bottleneck пишутся на чистом Си, Фортране90 или OCAML и подключаются внешними модулями к скрипту. Второй вариант - полностью переписать программу на Си или OCAML. Это ненамного быстрее, зато намного затратнее.
Так как в книжке хочется изложить современное видение проблем, то встаёт вопрос: какой язык выбрать для написание примеров кода bottleneck?
Си хотелось бы поменьше, всё-таки старый он, системного назначения, кроме того примеры с nVidia GPU и так потребуют nvcc. Фортран... тоже не вполне годится. Fortran-77 и 90 устарели, хотя последний по производительности чемпион. Новые стандарты как 2008 ещё ничем не поддерживается в полном объёме.
Писать же на чисто функциональных OCAML или Haskell, по-моему - это сделать исходники мало понятными и исключить ряд функциональных возможностей.

2. В чём лучше всего верстать исходный код для издания? Нужна подсветка синтаксиса и возможность перед каждой программой добавлять аннотацию.

Заранее спасибо.

 
 
 
 Re: Два вопроса...
Сообщение23.02.2012, 16:32 
Аватара пользователя
Переехали в Околонаучный софт

 
 
 
 Re: Два вопроса...
Сообщение23.02.2012, 17:53 
Аватара пользователя
См. в сторону python

 
 
 
 Re: Два вопроса...
Сообщение23.02.2012, 18:23 
Да, Питон - хорошая альтернатива Matlab и просто как язык, но высокопроизводительные куски опять же на чём писать? В этом был мой первый вопрос.

 
 
 
 Re: Два вопроса...
Сообщение23.02.2012, 19:28 
Аватара пользователя
python хорош как клей. Иными словами у него есть ручки ко всему, что движется, ну и свои библиотеки потихоньку подтягиваются.

 
 
 
 Re: Два вопроса...
Сообщение23.02.2012, 23:54 
Пишите на фортране или лучше на паскале, алголе или на любом другом мёртвом языке. Студенты скажуть вам спасибо. С++

 
 
 
 Re: Два вопроса...
Сообщение25.02.2012, 16:26 
Alexu007 в сообщении #542082 писал(а):
Пишите на фортране или лучше на паскале, алголе или на любом другом мёртвом языке. Студенты скажуть вам спасибо. С++

Мёртвый язык - это си-плюсплюс. Он как раз для числодробильных расчётов точно не подходит.

 
 
 
 Re: Два вопроса...
Сообщение26.02.2012, 16:20 
Раз вы пишете книгу, то мне кажется, цель примеров - ясно изложить алгоритм, а не предоставить полностью готовые реализации. Матлаб - стандарт за рубежом? Там вроде бы варез не приветствуют. Могу посоветовать посмотреть в сторону R. То, что это язык только для статистиков - несколько преувеличено. Библиотек там навалом для чего угодно. Haskell - вы видели, к примеру, код, перемножающий матрицы на хаскеле? Для книги по численным методам - совсем никак. С, С++, Python - для численных задач не лучший выбор. Фортран 95/2003 - нисколько не устаревший и для высокопроизводительных кусков - самое то.

 
 
 
 Re: Два вопроса...
Сообщение27.02.2012, 00:01 
Написать книгу в виде набора из примеров решения нетривиальных вычислительных задач - вот моя цель. Научиться многим приёмам можно только на конкретных примерах, так как между алгоритмом и кодом тем больше дистанция, чем сложнее алгоритм. Задача не в том, чтобы описать быстрое преобразование фурье или решение одномерного уравнения диффузии методом Кранка-Николсона - это примитив, который может освоить любой сообразительный школьник по старинным книжкам Рихтмайера, Самарского и Дородницына.
Матлаб сейчас де факто стандарт не только в академических учебных заведениях, но и в таких конторах как Toyota, Nissan, General motors, Motorola и целом ряде других. Сие не реклама, а медицинский факт. Ни о каком варезе речи нет, даже в наших ВУЗах. Я сам пользуюсь лицензионной версией. Хотя, повторяюсь, речь не о Матлабе или Питоне. Они в данном контексте всего лишь обёртки, клей. Высокопроизводительные куски, по моему мнению, должны быть написаны на современном языке, который в ближайшие лет 20 не сдохнет и будет актуален.
На Хаскеле перемножения матриц не видел, зато видел на OCAML и работало это крайне шустро. Про Фортран - согласен, скорее всего на нём остановлюсь.

 
 
 
 Re: Два вопроса...
Сообщение27.02.2012, 09:57 
Читатель должен иметь возможность гонять ваши примеры, не покупая дорогую лицензию, и не пользуя вареза. Вы же не только для студентов, у которых матлабы в универах стоят, пишете.

 
 
 
 Re: Два вопроса...
Сообщение27.02.2012, 10:31 
Я бы рекомендовал си и питон. Вместе.
Как альтернативу устаревающим фортрану и матлабу.
Фортран немного странно выглядит, код на нём длинный и хуже читается особенно с непривычки. К тому же он кривовато подключается к более высокоуровневым языкам (не зная си всё равно не понять как это можно сделать). Матлаб стоит много денег и немного староват уже -- открытость питона позволяет быстрее развиваться, на нём можно заметно короче не самые тривиальные вещи писать. Ну и просто совсем полноценный язык, матлаб немного не совсем язык всё же.
К тому же питон с си замечательно сочетаются -- код немного похож по виду. Зная один можно в общих чертах понять что делает примитивный код на другом.

Функциональщина это круто, но на кого книжка будет рассчитана? Если не на профессиональных программистов, я бы не рекомендовал. Простые функциональные вещи и на питоне отлично пишутся, а сложных всё равно никто не поймёт.

 
 
 
 Re: Два вопроса...
Сообщение27.02.2012, 13:20 
Фортран к высокоуровневым языкам подключается абсолютно так же, как си.
С питоном замечательно сочетается. При помощи f2py. Для численных задач фортран по сравнению с си - как мерседес по сравнению с запорожцем. Численный код на си читаеся ужасно. Впечатление странности фортрановского кода во многом из-за отсутствия качественных примеров в интернете. По крайней мере, в русскоязычном, где часто приводят примеры из еще фортрана 77, а то и 66. Верхний регистр почему-то используют, и пр.

 
 
 
 Re: Два вопроса...
Сообщение27.02.2012, 15:48 
Evgeny_2012 в сообщении #543137 писал(а):
Фортран к высокоуровневым языкам подключается абсолютно так же, как си.
Плюс развлечение с фортрановскими массивами и строками. Если б не проходил заворачивание фортрановского кода в питон не комметрировал бы этот момент.
Evgeny_2012 в сообщении #543137 писал(а):
При помощи f2py
А можно пример? Чтобы поразиться "элегантности" такого решения?
Evgeny_2012 в сообщении #543137 писал(а):
Для численных задач фортран по сравнению с си - как мерседес по сравнению с запорожцем.
Когда в ход идут подобные аргументы, как правило это означает что все содержательные уже закончились.
Evgeny_2012 в сообщении #543137 писал(а):
Численный код на си читаеся ужасно.
Кто к чему больше привык. По мне так численный код -- единственное что на фортране вообще хоть как-то читается.

 
 
 
 Re: Два вопроса...
Сообщение27.02.2012, 16:56 
Пример:
Код:
subroutine f(a,st,n,m)
integer a(n,m),n,m
character(*) st
print *,st
a = a+5
end subroutine f

Компилируем:
f2py -c --fcompiler=ifort --opt=-O3 FModule.f90 -m f_module
Питоновский код:
Код:
from f_module import f
import numpy as np
a = np.array([[1,1,1],[1,1,1]],order = 'Fortran')
f(a,'Hello World!',2,3)
print(a)

получаем:
python ./main.py
Hello World!
[[6 6 6]
[6 6 6]]

> Когда в ход идут подобные аргументы, как правило это означает что все содержательные уже закончились

Если кратко - фортран2003 умеет все или почти все, что умеет си. Обратное очень сильно не верно. Не согласны - приведите примеры. Конкретно для числодробильни: в си нет нормальных массивов. Для того подобия массивов, что есть, нет элементарнейших операций: срезов, преобразования формы и пр. Из прочего: в си нет нормальной системы модулей, например. Фортрановские модули очень хороши.
Теперь про синтаксис: обращение к элементу матрицы a(i,j,k) в си - a[i-1+(j-1)*Ni+(k-1)*Ni*Nj], ну или вариация на тему. Это читабельно?
Я не фанат фортрана и ничего не имею против си. Фортран имеет много недостатков, но, увы, на сегодняшний день для высокопроизводительных вычислений альтернативы не видно. Если знаете - подскажите, s'il vous plaît

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

 
 
 
 Re: Два вопроса...
Сообщение27.02.2012, 19:56 
Да, f2py это неплохо. Только в примере я не вижу ни строк ни assumed shape массивов. В таком случае гораздо проще по старинке собрать dllку и её вызывать. Учитывая (стандартные!) правила вызова си-шных функций. И да, насколько это переносимо? Под виндой работать будет? Или надо взять исходники f2py и доработать напильником?

Evgeny_2012 в сообщении #543195 писал(а):
Теперь про синтаксис: обращение к элементу матрицы a(i,j,k) в си - a[i-1+(j-1)*Ni+(k-1)*Ni*Nj], ну или вариация на тему. Это читабельно?
То, что вы написали, конечно же, не читабельно. Только при чём тут си? Привычка к фортрану кстати очевидна -- запись предполагает (нестандартную на данный момент и неудобную) нумерацию с 1.
Когда мне нужны срезы и преобразования формы, питон или другой язык высокого уровня удобнее. Когда мне нужна скорость, мне срезы и преобразования формы уже не нужны. Как-то так.
Evgeny_2012 в сообщении #543195 писал(а):
Фортрановские модули очень хороши.
Это одна из самых убогих вещей в фортране. Не зря в следующем стандарте её собираются конкретно менять. Задумка очень хорошая, но реализовано ужасно. То, что в си и того нет -- не аргумент.
Evgeny_2012 в сообщении #543195 писал(а):
Про читаемость кода на фортране: современный фортран позволяет писать весьма красивый код. Если этого не делают (по причине плохих знаний фортрана и программирования вообще) - это проблемы тех, кто пишет
Это можно сказать о любом языке.

 
 
 [ Сообщений: 23 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group