Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

Какой язык лучше для моделирования?   Найти похожие ветки 

 
Юрий Зотов ©   (2006-03-26 13:28) [40]

> isasa ©   (26.03.06 13:17) [37]

1. Естественно, все это можно реализовать и на Delphi и вообще на чем угодно. Но вовсе не "легко". Для начала придется писать и тестировать (или искать готовый, причем такой, которому можно доверять) пакет математики - что это за труд, Вы понимаете. В то время, как подобные пакеты для Фортрана уже существуют и вполне доступны. Так что же будет легче?

2. Современные Фортраны для Windows точно так же позволяют интегрироваться с Word, Excel и пр.


 
boriskb ©   (2006-03-26 13:28) [41]

Кстати.
Можно много спорить/рассуждать по поводу
"Что такое язык программирования?"


 
Юрий Зотов ©   (2006-03-26 13:32) [42]

> isasa ©   (26.03.06 13:22) [38]

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


 
isasa ©   (2006-03-26 13:33) [43]

Юрий Зотов ©   (26.03.06 13:28) [40]
Для начала придется писать и тестировать (или искать готовый, причем такой, которому можно доверять) пакет математики

Вот ключевая фраза.
А вообще, если долго этим заниматься, лучше потихоньку написать и оттестировать свой. Чужой - это всегда, в определенной степени "черный ящик".


 
Sergey Masloff   (2006-03-26 13:44) [44]

isasa ©   (26.03.06 13:33) [43]
Насколько долго.И что значит написать?
Взять готовый код на фортране и переписать на другом языке? Реализуемо но время... И возникает вопрос - зачем.

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

Придумать самому алгоритм, математически доказать его корректность, написать свою реализацию - для абсолютного большинства посетителей форума срок реализации - НИКОГДА.

Такое мое скромное ИМХО.
Кстати
1) фортран синтаксически действительно несложный язык.
2) интел регулярно совершенствует свой компилятор фортрановский, и разница в производительности там не 5%
3) библиотеки фортрана уже достаточно упорядочены и при поиске нужного не придется перелопачивать тысячи вариантов
4) фортран давным-давно поддерживает COM, DCOM и иже с ними


 
isasa ©   (2006-03-26 13:47) [45]

Юрий Зотов ©   (26.03.06 13:32) [42]
Согласен. Re, Bi, Fo, Nu - не для слабонервных. :)

Все пошел голосовать. Не хочется, но надо.:)


 
Eraser ©   (2006-03-26 14:21) [46]


> u-12   (25.03.06 21:26)

А зачем моделировать кристалл?
Ответ на этот вопрос даст ответ на выбор компилятора.
Может промоделировать кристалл нужно в учебных целях, именно для изучения тех самых сложных алгоритмов, которые в фортрановских библиотеках, тогда те самые библиотеки просто нельзя использовать )
Если же чисто в научных целях изучения св-ств кристалл, тогда то что удобнее, наверное фортран раз его тут так расхвалили.


 
Юрий Зотов ©   (2006-03-26 22:52) [47]

> Sergey Masloff   (26.03.06 13:44) [44]

> Взять готовый код на фортране и переписать на другом языке?

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

И тогда придется очень долго и очень нудно тестировать, вылавливать и шлифовать глюки (особенно, если они окажутся еще и "плавающими", что в численной математике скорее правило, чем исключение). В общем, делать ту же самую работу, на которую Фортран-сообщество, в основном, и потратило уже те самые полвека.


 
TUser ©   (2006-03-27 09:39) [48]

> isasa ©   (25.03.06 22:46) [16]

В сложных вычислениях принято избегать использования типа double.

> Юрий Зотов ©   (26.03.06 11:56) [26]

Я все, конечно, понимаю. Но только последние лет 20 вычислительные задачи успешно пишутся на С. В последнее время - на джаве. Некоторые даже Перл используют, зачем - не в курсе. Некоторые вне себя от Питона, почему - не в курсе. Главные аргумент С-вычислителей - переносимости. Ansi C программу они компилируют на любую платформу, т.е. могут выпонлять свои программы на Солярисовых кластерах. Превращая несколько дней вычислений в несколько часов.

Зы. Я в курсе, что есть gnu-fortran. gnu-Pascal тоже есть.


 
КаПиБаРа ©   (2006-03-27 10:20) [49]

Когда решал вычислительные задачки в дипломе, тестировал пример на фортране и на С. С на 30% быстрее считал. Реализовал все равно на фортране. 10 секунд процесса обсчитывалось за 40 минут.


 
Юрий Зотов ©   (2006-03-27 10:41) [50]

TUser ©   (27.03.06 09:39) [48]

> Главные аргумент С-вычислителей - переносимости. Ansi C программу они
> компилируют на любую платформу, т.е. могут выпонлять свои программы
> на Солярисовых кластерах. Превращая несколько дней вычислений в
> несколько часов.

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

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


 
isasa ©   (2006-03-27 11:59) [51]

TUser ©   (27.03.06 09:39) [48]
В сложных вычислениях принято избегать использования типа double.


!!!!
Допустим. А какой тип использовать?


 
TUser ©   (2006-03-27 13:05) [52]

int


 
isasa ©   (2006-03-27 13:12) [53]

Вот те раз! А если у меня вещественные числа.
Да та-же длина окружности с радиусом R ?


 
TUser ©   (2006-03-27 13:29) [54]

> А если у меня вещественные числа.

Умножаем их на коэффициент. Работаем с целыми, это быстрее.


 
isasa ©   (2006-03-27 13:36) [55]

Быстрее то оно быстрее, а вот достоверность и точность результата? Как определить этот коэффициент?
В этом случае, я предпочитаю проверенный стандарт IEEE. :)


 
TUser ©   (2006-03-27 13:38) [56]

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


 
isasa ©   (2006-03-27 13:56) [57]

:)
Действительно. Ну его нафиг этот FPU.
Имеем
Pn(Pm(Ci,y),x)=0
где
Pn, Pm - полиномы n,m-й степени (n,m=~7..10)
Ci - коэффициенты, заданные с точностью 10 знаков (0.ххххххххххExx),
Необходимо определить корни х, при каждом заданном у.

Как посчитать этот коэффициент?
И что делать с числами больше 0.4294967295 ?


 
TUser ©   (2006-03-27 14:38) [58]

Один вопрос важен - действительно требуется такая точность? Если да, то никакой double не спасет, при вычислениях будет постоянно накапливаться ошибка. В этом случае надо использовать опять-таки целые числа, причем "длинную" арифметику.


 
Jeer ©   (2006-03-27 14:43) [59]

TUser ©   (27.03.06 14:38) [58]

В песочницу:)


 
isasa ©   (2006-03-27 14:54) [60]

TUser ©   (27.03.06 14:38) [58]
Спасает, даже позволяет выходить из цикла с относительной погрешностью 1E-9 долей единицы.


 
TUser ©   (2006-03-27 14:56) [61]

> В песочницу:)

Да хоть куда. Сказанное от этого не становится неправдой.

И все-таки она вертится!
(с)


 
Jeer ©   (2006-03-27 15:01) [62]

TUser ©   (27.03.06 14:56) [61]

"Нужна ли программисту  математика ?"

Оказывается - нет, т.к. подмножество натуральных чисел - целые int (всего 32 разряда), позволяют решать "серьезные" вычислительные задачи, перед которыми пасуют даже double :))

Или Вы о сетке длиной в N-разрядов ?
Это частный случай, если бы все шли только таким путем, то считать на счетах было бы быстрее:))


 
isasa ©   (2006-03-27 15:23) [63]

TUser ©   (27.03.06 14:56) [61]
Рекомендую почитать и не изобретать велосипеда (со стандартом IEEE 754, хуже, описание не нашел).
http://www.klgtu.ru/ru/students/literature/inf_asu/560.html
http://dims.karelia.ru/x86/env_5.shtml.

А FPU использовать по прямому назначению, а не как второй процессор в режиме гипертрейдинга. :)


 
u-12   (2006-03-28 00:35) [64]

МАМА_МАЙА_ДАРАХАЙА...))
Ну вас всех.. напишу на Delphi без VCL - меньше мороки..
По поводу фортрана...
Юрий Зотов ©   (25.03.06 23:18) [22]
Я не имел в виду, что он старый.. Сейчас есть Fortran 8.0 или еще что-то более новое. За сутки можно и с Java разобраться, было бы желание... Всегда все абсолютно незнакомое тяжело дается (по крайней мере, так кажется).
3 суток - это недостаток самого алгоритма (кристалл 100х100х100, атомы рандомом выбираются и потом считаются коеффициенты для всех атомов по несколько раз). К сожалению, другого алгоритма нет.
И если программа вместо 72 часов будет работать 70 часов, то это меня не спасет..;0

Так что всем спасибо..)


 
Jeer ©   (2006-03-28 10:22) [65]

u-12   (28.03.06 00:35) [64]

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


 
Юрий Зотов ©   (2006-03-28 12:01) [66]

> u-12   (28.03.06 00:35) [64]
> Я не имел в виду, что он старый..

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


 
Vlad Oshin ©   (2006-03-28 12:27) [67]


> Юрий Зотов ©   (28.03.06 12:01) [66]

извините, что офтоп, Вы не напомните как Вы писали объявление массива безразмерного в паскале?
Там что-то типа типа было, а потом переменная этого типа..
Короче, память не юзалась. (помнится, еще кто-то такое у студента, которому была оказана эта помощь) забраковал - якобы память сразу выделяется)


 
Jeer ©   (2006-03-28 12:54) [68]

Vlad Oshin ©   (28.03.06 12:27) [67]

извините, но это есть в любой справке по Delphi, начиная с..
Динамические массивы.

type
 TDEar = array of extended;

var
 arA: array of double;
 arB: array of array of double;
 arC: TDEar;


 
Vlad Oshin ©   (2006-03-28 13:07) [69]


> Jeer ©   (28.03.06 12:54) [68]

Извините, но меня интересует именно паскаль
Проверить прямо сейчас Ваше решение нет возможности, проверю потом
Заранее спасибо


 
Игорь Шевченко ©   (2006-03-28 13:11) [70]

а что, разве математически библиотеки с фортрана на С давным-давно не переписаны ?


 
Jeer ©   (2006-03-28 13:32) [71]

Игорь Шевченко ©   (28.03.06 13:11) [70]

Один из кладезей премудрости достигаем - www.srcc.msu.su
Но Delphi и вычисления - это где-то рядом, но не около.


 
Юрий Зотов ©   (2006-03-28 13:54) [72]

> Vlad Oshin ©   (28.03.06 12:27) [67]

Что-то типа этого:

type
 TDataType = ...; { Хоть Integer, хоть что угодно еще }
 TDataArray: array[1..(65532 div SizeOf(TDataType))] of TDataType;
{ Массив максимального для DOS размера. Память еще не выделяется, о
чем преподаватель Паскаля был просто обязан знать. }

procedure Proc(N: word; var A: TDataArray);
{ N - реальное кол-во элементов в массиве A. Сам массив здесь объявлен,
как массив максимально возможного размера, благодаря чему процедура
получается универсальной и может быть использована в любой программе
без малейшего изменения ее кода. Память под массив здесь тоже еще не
выделяется, а сам массив передается по ссылке через стек, отъедая в нем
всего 4 байта (2 байта - смещение, 2 байта - сегмент). Этот маленький
трюк не только дает возможность сделать процедуру универсальной, еще
он позволяет писать в ней простой, удобный и легко читаемый код работы с
массивом, без всяких указателей и прочей чехарды. Например, такой: }
var
 i: word;
begin { Proc }
  for i := 1 to N do A[i] := 0
end; { Proc }

{ Используется все это так: }
const
 Size = 100; { Реальный размер массива }
var
 Arr: array[1..Size] of TDataType; { Реальный массив. Под него компилятор
 выделит память размером Size * SizeOf(TDataType). }
begin
 ...
 Proc(Size, Arr); { Передаем процедуре реальные данные. }
 ...
end.


 
Vlad Oshin ©   (2006-03-28 13:59) [73]


> Юрий Зотов ©   (28.03.06 13:54) [72]

СПАСИБО!


 
Vlad Oshin ©   (2006-03-28 14:11) [74]

не, что-то не то
как то не так было, вроде...
или путаю

все-таки, наверное, надо со списками делать,
смущает var вполне определенный


 
Думкин ©   (2006-03-28 14:24) [75]

> Юрий Зотов ©   (28.03.06 13:54) [72]

Это видимо для версий Паскаля ниже 7?
Ибо в 7 уже  были Low,High, и получение процедурой открытого массива.


 
begin...end ©   (2006-03-29 14:20) [76]

> Юрий Зотов ©   (28.03.06 13:54) [72]

А в какой версии Паскаля это работало? Здесь же типы формального и фактического параметров не совпадают. А для var-параметров это — обязательное условие.

Я решал аналогичную проблему через передачу массива как нетипизированного параметра. С последующим приведением его внутри подпрограммы к типу-массиву.


 
Юрий Зотов ©   (2006-03-29 14:27) [77]

> begin...end ©   (29.03.06 14:20) [76]

У меня это работало в TP5.5 (я вообще других TP не юзал, начал "паскалить" с 5.5, а когда приперла нехватка памяти (и даже оверлеи уже не спасали), сразу перескочил на Delphi).

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



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.62 MB
Время: 0.042 c
4-1138113016
Ландграф Павел
2006-01-24 17:30
2006.04.16
Координаты компонента относительно экрана


3-1139599826
Варяг
2006-02-10 22:30
2006.04.16
Программное создание др-ра ODBC


2-1143789588
Mozgan
2006-03-31 11:19
2006.04.16
Клавиатура Windows в Delphi


2-1144234595
Alex_C
2006-04-05 14:56
2006.04.16
Как передать фокус чужому приложению?


2-1143830677
dera
2006-03-31 22:44
2006.04.16
БД Access. Есть ключевое поле id типа Счетчик.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский