Học Fortran


9

Tôi đã tự hỏi cách tốt nhất để học cách lập trình trong Fortran là gì?

Tôi đã tìm kiếm những cuốn sách, những ví dụ có vẻ ổn với tôi là "Giải thích về Fortran 95/2003""Fortran dành cho các nhà khoa học và kỹ sư" .

Tôi không biết các bạn nghĩ gì về những điều này?

Một điều nữa mà tôi đang tự hỏi là tôi nên sử dụng trình biên dịch nào? Tôi làm việc trên máy Windows 7 (64-bit).

Tôi hy vọng các bạn có thể giúp tôi về điều này!

Vì vậy, đối với kinh nghiệm của tôi với lập trình:

  1. Matlab và maple đã loại những lời giới thiệu đầu tiên của tôi vào thế giới lập trình. Matlab là một chương trình mà tôi thực sự khá giỏi, tôi đã làm việc với các vòng lặp và cách kết hợp chúng để tạo ra nhiều chương trình hiệu quả hơn. Maple có nhiều hơn trong giai đoạn cơ bản (tôi biết cách tìm kiếm giải pháp cho các tích phân đơn giản, v.v.).
  2. Một năm sau đó, chúng tôi đã giới thiệu về C ++ trong cơ bản trực quan. Giáo sư thực sự đã đi nhanh về vấn đề này, sau 2 tháng chúng tôi đã thảo luận về con trỏ và kế thừa. Tôi có thể viết các chương trình đơn giản bằng ngôn ngữ này, chỉ có việc làm việc với các lớp là điều vẫn còn khó khăn, nhưng tôi tin rằng đó chỉ là vấn đề thực hành.
  3. Và một năm sau tôi cần học Mathicala 8 mà ngày nay tôi cũng đang rất giỏi.

Vì vậy, tôi có một chút kinh nghiệm lập trình, nhưng tôi sẽ không nói đó là một số tiền đáng kinh ngạc!

Lý do tôi muốn học Fortran chủ yếu là vì bạn không thể tự mình làm vật lý lý thuyết, bạn cần kiểm tra lý thuyết của mình và để bạn có thể viết các chương trình có thể kiểm tra các lý thuyết đó bằng số. Tôi nghe nói rằng Fortran là loại ngôn ngữ được sử dụng khi nói đến toán học số, vì vậy tôi nghĩ rằng nó sẽ có ích khi biết ngôn ngữ này.

ps: sự khác biệt giữa Fortran95 và Fortran 2003 là gì?


3
Bạn có thể cụ thể hơn một chút về nơi bạn đến và nơi bạn muốn đi không? Bạn đã biết cách lập trình, tức là bạn biết những ngôn ngữ lập trình nào khác? Và bạn muốn làm gì ở Fortran?
Pedro

Vâng có lẽ tôi nên đề cập đến nó trong câu hỏi của mình, cho phép tôi chỉnh sửa :) @Pedro
Nick

1
Tôi biết nó không trả lời câu hỏi, nhưng tôi phải khuyên bạn nên sử dụng Python trên Fortran nếu bạn không có nhu cầu hiệu suất cụ thể khi mới bắt đầu. Bạn sẽ bớt đau đầu hơn khi đối phó với toán học và lý thuyết thực tế vì Python sẽ ít hét vào bạn hơn. Nó cũng có các gói đáng kinh ngạc làm cho rất nhiều phép toán số rất đơn giản (tìm kiếm SciPy, Numpy, Matplotlib). Những công cụ đó làm cho Python rất giống với MATLAB khi sử dụng, nhưng bạn cũng có toàn bộ ngôn ngữ để xây dựng một phần mềm tốt xung quanh như ewll. Chưa kể nó là nguồn mở.
hadsed

1
Fortran 95 cũng giống như Matlab và là tiêu chuẩn ISO. Rất nhiều người sử dụng Python viết các hạt nặng tính toán trong C / C ++ (thậm chí là Fortran), điều đó có nghĩa là bây giờ bạn phải học không chỉ một mà hai ngôn ngữ. Một cho hiệu suất và một cho thuận tiện / dễ sử dụng.
stali

Câu trả lời:


4

Tôi sẽ giới thiệu cuốn sách thứ hai của Chapman về cuốn sách của Chapman. Tôi đã học được từ cuốn sách Fortran 90 của Chapman, và nó rất hữu ích. Nó sẽ dạy bạn ngôn ngữ Fortran. Nó sẽ không dạy bạn về các quy trình công việc tốt để lập trình, và vì thế, bạn nên tìm nơi khác sau khi bạn đã học một số Fortran và lập trình một chút.

Hầu hết các tài nguyên trực tuyến để giúp bạn lập trình Fortran sẽ dựa trên Linux. Tương tự, trong khoa học tính toán, hầu hết các tài liệu bằng văn bản sẽ hướng đến người dùng Linux. Vì lý do đó, tôi thực sự khuyên bạn nên cài đặt VirtualBox (hoặc một số loại phần mềm cho phép bạn chạy các hệ điều hành ảo) và sau đó cài đặt một số bản phân phối Linux trên đó. Nếu bạn chưa từng sử dụng Linux trước đây, một bản phân phối thân thiện với người dùng như Ubuntu, Mint hoặc Fedora có lẽ sẽ là lựa chọn tốt nhất của bạn. Các bản phân phối này yêu cầu số lượng cấu hình tối thiểu nếu chạy trong môi trường ảo và có GUI tốt để giúp bạn điều hướng hệ điều hành. Mỗi bản phân phối này có một trình quản lý gói mà bạn có thể sử dụng để cài đặt một số phần mềm bổ sung. Sử dụng trình quản lý gói, bạn có thể cài đặt gfortran.

Bạn sẽ muốn phát triển phần mềm trong trình soạn thảo văn bản (hoặc IDE), vì vậy có lẽ đáng để học những điều cơ bản của dòng lệnh. Phần mềm Mộc có nguồn lực tốt cho nhiệm vụ này. (Tuyên bố miễn trừ trách nhiệm: Tôi đã dạy một phần của hội thảo về Nghề mộc phần mềm.) Sau đó, bạn sẽ có thể tiến lên với việc học viết các chương trình đơn giản và biên dịch chúng trên dòng lệnh, sau đó học cách sử dụng Makefile.

Vấn đề khi làm bất cứ điều gì dựa trên Windows là hầu hết các tài liệu trực tuyến bạn sẽ thấy khi làm khoa học tính toán sẽ cho rằng bạn đang sử dụng Linux và lời khuyên (nếu có bất kỳ điều gì tốt để bắt đầu) sẽ bị phá vỡ xuống, và tốn thời gian của bạn. Cygwin là một lớp API bổ sung thêm chức năng giống Linux, nhưng sự tương ứng với Linux không hoàn hảo và phần mềm được biên dịch cho Linux sẽ không hoạt động trên máy của bạn; bạn vẫn sẽ cần tải phiên bản gốc của Windows hoặc biên dịch lại phần mềm cho Windows. Một trình biên dịch Fortran có nguồn gốc từ Windows như Visual Fortran sẽ tốn tiền và bạn vẫn sẽ gặp phải vấn đề là hầu hết người dùng Fortran và các nhà khoa học tính toán sử dụng Linux để phát triển phần mềm của họ, nghĩa là bạn sẽ phải tiến hành trước sở hữu. Tuy nhiên, nếu bạn thực sự cầnphân phối phần mềm dựa trên Windows vì một số lý do, sau đó sẽ có ý nghĩa khi trải qua tất cả nỗ lực để tìm ra cách sử dụng một cái gì đó như Visual Fortran.


Cảm ơn vì lời khuyên! Nhưng tôi tự hỏi, thay vì máy ảo, tôi không thể tạo ra một loại cơ chế khởi động kép nào để tôi chọn thời điểm tôi khởi động Windows7 hoặc Linux Ubuntu trước? Tôi tin rằng nó thực sự có thể giúp tôi tiết kiệm rất nhiều thời gian! Và nếu tôi cần phải đi đến windows, thì tôi sẽ có trải nghiệm lập trình của phiên bản Linux cho phép tôi thực hiện các bước trên windows nhanh hơn nhiều!
Nick

Bạn có thể, nếu bạn rất mong muốn. Tôi nghĩ rằng thiết lập khởi động kép kém linh hoạt hơn và đòi hỏi nhiều kiến ​​thức kỹ thuật và thời gian hơn (bạn có thể phải thay đổi kích thước phân vùng, thiết lập trình tải khởi động đúng cách, v.v.). Tôi cũng nghĩ rằng máy ảo dễ dàng di chuyển sang máy mới hơn, điều này có thể hữu ích nếu bạn muốn chia sẻ công việc của mình với đồng nghiệp hoặc nếu bạn có được một máy tính mới và muốn di chuyển tất cả công việc của bạn ở đó.
Geoff Oxberry

Cuối cùng tôi đã tìm thấy một chút thời gian để đi qua tất cả các bước của necesarry. Tôi đã cài đặt VirtualBox và tôi đã cài đặt Linux (Ubuntu). Bây giờ tôi đã tự hỏi đó có thể là trình biên dịch tốt nhất? Tôi dường như không thể tìm thấy nhiều trên mạng về phần đó: s. Tôi nghe ai đó nói gfortran?
Nick

2
gfortran là miễn phí, và có lẽ là con đường ít kháng cự nhất. Hầu hết các trình biên dịch khác yêu cầu mua một giấy phép, với các ngoại lệ có thể cho sử dụng cá nhân hoặc học tập. (Tôi biết trình biên dịch của Intel chỉ có thể được tải xuống và sử dụng cho mục đích cá nhân trên cơ sở miễn phí; bạn sẽ phải đọc giấy phép để biết chi tiết.) HighPerformanceMark liên kết với một trang web có so sánh hiệu suất cho trình biên dịch.
Geoff Oxberry

6

Tôi nghĩ rằng cuốn sách Metcalfe là một hướng dẫn có chú thích tốt về các tính năng hiện đại của Fortran, rất hữu ích nếu bạn đã biết phiên bản trước của ngôn ngữ nhưng không phải là một giới thiệu tốt về lập trình bằng ngôn ngữ.

Đối với tiền của tôi cuốn sách Chiver và Sleightholmecuốn sách Brainerd đều đủ tốt, mặc dù tôi không nghĩ rằng một trong hai là tốt như các cuốn sách của Ellis et al đó, không may, chưa được cập nhật cho Fortran 2003 hoặc sau đó.

Tôi có ác cảm mạnh mẽ với cuốn sách Chapman. Tôi không thể nhớ tại sao tôi không thích phiên bản 90/95 đến mức không thể biện minh cho sự ác cảm này nữa, bạn có thể giảm giá nó như một định kiến.

Nhưng cuốn sách tôi giới thiệu không do dự là cuốn sách của Arjen Markus . Đây có lẽ không phải là một lời giới thiệu lý tưởng cho ai đó vẫn đang cố gắng tìm ra các tính năng cơ bản của ngôn ngữ, nhưng một khi bạn đã thành thạo những thứ đó thì nó đáng giá ở một số chất có giá trị.

Đối với trình biên dịch nào sẽ sử dụng, tôi sử dụng trình biên dịch Intel và thường hài lòng với nó. Nó tích hợp với Visual Studio, có thể quan trọng đối với bạn. Trình biên dịch NAG có thông báo lỗi và cảnh báo tốt hơn nhưng tạo ra các tệp thực thi chậm hơn (nói chung và kinh nghiệm của bạn có thể khác). Trình biên dịch gfortran là miễn phí và nhận được đủ các đánh giá tốt nhưng đó không phải là trình tôi sử dụng. Nếu bạn muốn biết thêm Polyhedron sẽ cho bạn biết.


Cuốn sách Markus có một TOC tuyệt vời.
AlexE

Vâng, cuốn sách Markus thực sự có vẻ là một cuốn sách tuyệt vời, vì vậy đó là cuốn sách tôi chắc chắn sẽ xem xét! Đối với trình biên dịch tôi chỉ cần một cái gì đó với các tệp thực thi nhanh (không cần tích hợp với visual studio cần thiết).
Nick

Tôi nghĩ rằng trình biên dịch Intel thường được coi là nhanh.
AlexE

3

Đối với sách, tôi đề xuất "Giải thích Fortran hiện đại" của Metcalf / Reid / Cohen. Nó là một tài liệu tham khảo hơn là một cuốn sách giáo khoa, nhưng nó sẽ phục vụ bạn tốt nếu bạn đã tiếp xúc với lập trình nói chung (với C).

Bên cạnh cuốn sách đó, tôi đặc biệt giới thiệu trang web của Ondřej Čertík http://fortran90.org/ . Nó sẽ không dạy bạn Fortran ngay từ đầu, nhưng nó sẽ cung cấp cho bạn một tập các thực hành tốt nhất. Fortran cho phép nhiều cách khác nhau để lập trình - sau tất cả, nó tương thích với nhau. Các thực tiễn tốt nhất được đưa ra ở đó sẽ giúp bạn phát triển phong cách Fortran hiện đại, nhất quán. Ngoài ra, Câu hỏi thường gặp được tìm thấy sẽ được bạn quan tâm.


2
Được nâng cấp cho trang thực hành tốt nhất F90, điều đó cũng thực sự hữu ích với tôi.
Daniel Shapero

2

Cuốn sách Chapmans tôi nghĩ là thân thiện với người mới hơn và là một tài liệu tham khảo tốt. Các tác giả của cuốn thứ hai đều là chuyên gia nhưng tôi nghĩ cuốn sách sẽ là một bổ sung tốt cho thư viện của bạn ở giai đoạn sau.

Để bắt đầu, tôi khuyên bạn nên sử dụng Fortran 95 và sau đó (nếu cần) chuyển sang Fortran 2003. Fortran 95 rất dễ học (gần như Matlab) và bạn sẽ làm việc rất nhanh.

Trên Linux, bạn có một số trình biên dịch Fortran miễn phí (GNU, Solaris Studio, Open64, v.v.) ngoài bộ công cụ phong phú hơn, ví dụ: valgrind, gdb, gnuplot, (cho viz nhanh), svn / hg, v.v. các gói được biên dịch trước bao gồm libs số (blas / lapack / netcdf / fftw, v.v.) là một lệnh đi (ít nhất là trên Debian với apt-get).

Trên Windows, bạn có thể sử dụng cygwin tốt hơn vì nó cho phép bạn truy cập dễ dàng và nhanh chóng vào một số công cụ / lib trên đây ngoài trình biên dịch GNU Fortran. Vì vậy, có, hãy truy cập cygwin.com và cài đặt gói lõi cùng với gfortran và một trình soạn thảo lựa chọn (vim là tốt). Đó nên là một khởi đầu tốt. Sau này nếu bạn có bất cứ điều gì khác thì tôi sẽ đề nghị sử dụng gói apt-cyg để cài đặt công cụ.


1
Tôi không đề xuất vim (hoặc, đối với vấn đề đó, emacs) là trình soạn thảo văn bản đầu tiên. Có quá nhiều tính năng cần thiết (cắt, sao chép, dán, tìm, tìm / thay thế) liên quan đến các tổ hợp phím không trực quan để sử dụng nó làm trình soạn thảo văn bản đầu tiên và tất cả các bước bổ sung, lạ lẫm mà người học mới phải thực hiện để làm bất cứ điều gì đơn giản vừa làm nản lòng vừa làm mất tập trung vào bất cứ điều gì họ đang cố gắng làm (điều mà, nếu bạn đề xuất một trình soạn thảo văn bản, có lẽ là một dạng phát triển phần mềm).
Geoff Oxberry

1
Là một biên tập viên đầu tiên, tôi đề xuất một công cụ có khả năng trở thành trình chỉnh sửa duy nhất bạn cần, không phải là công cụ mà bạn sẽ phát triển trong 3 tuần, 3 tháng hoặc thậm chí 3 năm. Vì lý do đó, cả Emacs và Vim đều là những biên tập viên đầu tiên phù hợp. Chắc chắn rằng họ có thể có một đường cong học tập ban đầu dốc hơn những người khác nhưng rất nhiều lập trình viên đã trả giá đó và tìm thấy phần thưởng xứng đáng trong khi.
Đánh dấu hiệu suất cao

Nhận xét của bạn thiết lập một lựa chọn sai: học vim / emacs và có một trình soạn thảo bạn có thể sử dụng cho cuộc sống, bất chấp đường cong học tập dốc hoặc sử dụng một số công cụ kém dễ học khác mà bạn sẽ phát triển. Rất nhiều lập trình viên chuyên nghiệp sử dụng các công cụ khác với các đường cong học tập ít dốc hơn, như gedit, Sublime Text, TextMate, TextWrangler, và các công cụ khác, và rất hợp nhau. Vim và emacs là những biên tập viên tuyệt vời - tôi sử dụng cả hai - nhưng chúng không phải là sự lựa chọn duy nhất, rõ ràng vượt trội để lập trình (WolfgangBangerth cũng là một trường hợp tốt cho IDE).
Geoff Oxberry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.