2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Два вопроса...
Сообщение23.02.2012, 15:25 


23/02/12
8
Здравствуйте.

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

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 
Админ форума
Аватара пользователя


19/03/10
8952
Переехали в Околонаучный софт

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


23/07/08
401
Новосибирск
См. в сторону python

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение23.02.2012, 18:23 


23/02/12
8
Да, Питон - хорошая альтернатива Matlab и просто как язык, но высокопроизводительные куски опять же на чём писать? В этом был мой первый вопрос.

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение23.02.2012, 19:28 
Аватара пользователя


23/07/08
401
Новосибирск
python хорош как клей. Иными словами у него есть ручки ко всему, что движется, ну и свои библиотеки потихоньку подтягиваются.

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение23.02.2012, 23:54 


24/05/09

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

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение25.02.2012, 16:26 


23/02/12
8
Alexu007 в сообщении #542082 писал(а):
Пишите на фортране или лучше на паскале, алголе или на любом другом мёртвом языке. Студенты скажуть вам спасибо. С++

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

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение26.02.2012, 16:20 


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

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение27.02.2012, 00:01 


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

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение27.02.2012, 09:57 


01/02/12
13
Читатель должен иметь возможность гонять ваши примеры, не покупая дорогую лицензию, и не пользуя вареза. Вы же не только для студентов, у которых матлабы в универах стоят, пишете.

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение27.02.2012, 10:31 
Заслуженный участник


19/07/08
1266
Я бы рекомендовал си и питон. Вместе.
Как альтернативу устаревающим фортрану и матлабу.
Фортран немного странно выглядит, код на нём длинный и хуже читается особенно с непривычки. К тому же он кривовато подключается к более высокоуровневым языкам (не зная си всё равно не понять как это можно сделать). Матлаб стоит много денег и немного староват уже -- открытость питона позволяет быстрее развиваться, на нём можно заметно короче не самые тривиальные вещи писать. Ну и просто совсем полноценный язык, матлаб немного не совсем язык всё же.
К тому же питон с си замечательно сочетаются -- код немного похож по виду. Зная один можно в общих чертах понять что делает примитивный код на другом.

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

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение27.02.2012, 13:20 


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

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение27.02.2012, 15:48 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Два вопроса...
Сообщение27.02.2012, 16:56 


01/02/12
13
Пример:
Код:
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 
Заслуженный участник


19/07/08
1266
Да, 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  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group