Python vs FORTRAN


17

Cái nào tốt hơn: FORTRAN hay Python? Và tôi đoán rằng trong cả hai trường hợp bạn cần Gnuplot, tôi có đúng không?

Hiện tại tôi đang làm việc trên một máy Windows.

Tôi muốn sử dụng nó để có được các giải pháp số cho các vấn đề vật lý, bao gồm mô phỏng Monte-Carlo, tích hợp và phân biệt số, động lực phân tử, v.v.

Tôi đã thấy một khóa học về vật lý tính toán giới thiệu cả FORTRAN (77 tôi tin) và Python. Tôi dự định bắt đầu với cái này và sau đó học cái khác, nhưng tôi không biết quá trình chuyển đổi nào có thể là dễ dàng nhất.

Ngoài ra những trình biên dịch nào bạn muốn giới thiệu?

Câu hỏi cơ bản cho tôi là: cái nào dễ học nhất, cái nào nhanh nhất, cái nào thân thiện với người dùng nhất và trên hết cái nào được sử dụng nhiều nhất (vậy so sánh 4 cái này)? Và bên cạnh đó, trình biên dịch phổ biến nhất (miễn phí hoặc trả phí) đang sử dụng là gì? Tôi hiện đang xem xét chuyển đổi một máy tính xách tay cũ (lõi kép Intel sớm) sang Linux; hy vọng đó là đủ nhanh.

Cảm ơn rất nhiều cho câu trả lời cho đến nay! Câu trả lời phù hợp với những gì tôi đang tìm kiếm là câu trả lời của LKlevin và SAAD.

Tôi biết những điều cơ bản về C ++, Maple và tôi thành thạo MATLAB và Mathematica9 gần như hoàn toàn nếu điều đó có ích.


12
Bạn thực sự cần phải cụ thể hơn; điều này giống như hỏi "cái nào tốt hơn: búa hay tuốc nơ vít?". Hãy xem scicomp.stackexchange.com/questions/11006 (đó là về C ++ thay vì Fortran, nhưng hầu hết các điểm nên áp dụng như nhau).
Christian Clason

@ChristianClason, điểm công bằng: p
Nick

Cảm ơn bạn đã chỉnh sửa, mặc dù điều này không thực sự thu hẹp mọi thứ. Tôi không chắc những gì có thể nói nhiều hơn là đã được đưa ra dưới dạng câu trả lời cho câu hỏi được liên kết ở trên.
Christian Clason

2
Ngoài ra, câu hỏi về trình biên dịch là một vấn đề riêng biệt và nên là một câu hỏi riêng biệt. (Nếu không, những người quen thuộc với Fortran nhưng không quan tâm đến Python sẽ không thấy nó.) Một số đề xuất đã được đưa ra trong scicomp.stackexchange.com/questions/8617 .
Christian Clason

1
Nếu bạn biết MATLAB, bạn có thể tìm hiểu hầu hết các thuật toán số bằng cách triển khai chúng ở đó, mặc dù hiệu suất của bạn sẽ hầu như luôn kém hơn các thói quen được xây dựng trong MATLAB. Từ đó bạn có thể quyết định nhu cầu hiệu suất của mình là gì và chuyển sang thư viện / ngôn ngữ hiệu quả hơn.
Godric Seer

Câu trả lời:


29

Dễ học

Python và Fortran đều là những ngôn ngữ tương đối dễ học. Có thể dễ dàng tìm thấy các tài liệu học tập Python tốt hơn các tài liệu học tập tốt của Fortran vì Python được sử dụng rộng rãi hơn và Fortran hiện được coi là ngôn ngữ "đặc sản" cho điện toán số.

Tôi tin rằng việc chuyển đổi từ Python sang Fortran sẽ dễ dàng hơn. Python là ngôn ngữ được dịch, vì vậy số bước cần thiết để chương trình đầu tiên của bạn chạy nhỏ hơn (mở trình thông dịch, gõ print("Hello, world!")vào dấu nhắc) so với Fortran (viết chương trình "Hello world", biên dịch, chạy). Tôi cũng nghĩ rằng có nhiều tài liệu tốt hơn để dạy phong cách hướng đối tượng trong Python so với Fortran và có nhiều mã Python có sẵn trên GitHub hơn mã Fortran.

Bắt đầu và chạy trên Windows

Cài đặt Python sẽ bớt đau đớn hơn; Có bản phân phối Windows có sẵn. Tôi khuyên bạn nên sử dụng phân phối khoa học như Anaconda hoặc Enth think Canopy. Không thực sự có một trình biên dịch, mỗi lần; thông dịch viên đảm nhận vai trò đó. Bạn sẽ muốn sử dụng trình thông dịch dựa trên CPython, bởi vì có nhiều thư viện số hơn và nó tương thích độc đáo với C, C ++ và Fortran. Các triển khai phiên dịch khác bao gồm Jython và PyPy.

Trên máy Windows, việc cài đặt trình biên dịch Fortran sẽ gây khó chịu. Trình biên dịch dòng lệnh điển hình là các chương trình như gfortran, ifort (từ Intel; miễn phí cho sử dụng cá nhân, nếu không thì tốn tiền) và pgfortran (từ PGI; phiên bản dùng thử miễn phí, nếu không thì tốn tiền). Để cài đặt các trình biên dịch này, bạn có thể cần phải cài đặt một số loại tương thích loại UNIX / POSIX, như Cygwin hoặc MinGW. Tôi thấy đó là một nỗi đau khi làm việc, nhưng một số người thích quy trình làm việc đó. Bạn cũng có thể cài đặt trình biên dịch với GUI, như Visual Fortran (một lần nữa, bạn phải trả tiền cho một giấy phép).

Trên Linux, việc cài đặt Python và trình biên dịch sẽ dễ dàng hơn; Tôi vẫn sẽ cài đặt Anaconda hoặc Enth think Canopy dưới dạng bản phân phối Python.

Tốc độ: năng suất so với hiệu suất đánh đổi

Khi sử dụng Python (hoặc MATLAB, Mathematica, Maple hoặc bất kỳ ngôn ngữ nào được giải thích), bạn từ bỏ hiệu suất để đạt năng suất. So với Fortran (hoặc C ++, C hoặc bất kỳ ngôn ngữ được biên dịch nào khác), bạn sẽ viết ít dòng mã hơn để hoàn thành cùng một nhiệm vụ, điều đó có nghĩa là bạn sẽ mất ít thời gian hơn để có được giải pháp làm việc.

Hình phạt hiệu suất hiệu quả khi sử dụng Python khác nhau và được giảm nhẹ bằng cách ủy thác các tác vụ tính toán chuyên sâu cho các ngôn ngữ được biên dịch. MATLAB làm một cái gì đó tương tự. Khi bạn thực hiện phép nhân ma trận trong MATLAB, nó gọi BLAS; hình phạt về hiệu suất gần như bằng không và bạn không phải viết bất kỳ Fortran, C hoặc C ++ nào để có hiệu suất cao. Một tình huống tương tự tồn tại trong Python. Nếu bạn có thể sử dụng các thư viện (ví dụ NumPy, SciPy, petc4py, dolfin từ FEniCS, PyClaw), bạn có thể viết tất cả mã của mình bằng Python và có hiệu suất tốt (mức phạt có thể là 10-40%) vì tất cả đều được tính toán phần chuyên sâu là các cuộc gọi đến thư viện ngôn ngữ biên dịch nhanh. Tuy nhiên, nếu bạn viết tất cả mọi thứ bằng Python thuần túy, hình phạt hiệu năng sẽ là một yếu tố 100-1000x. Vì vậy, nếu bạn muốn sử dụng Python và phải bao gồm một tùy chỉnh, thói quen chuyên sâu tính toán, bạn sẽ tốt hơn nếu viết phần đó bằng ngôn ngữ được biên dịch như C, C ++ hoặc Fortran, sau đó gói nó bằng giao diện Python. Có những thư viện tạo điều kiện cho quá trình này (như Cython và f2py), và hướng dẫn để giúp bạn; nó thường không phải là khó khăn

Phạm vi sử dụng

Python được sử dụng rộng rãi hơn như một ngôn ngữ có mục đích chung. Fortran phần lớn giới hạn trong tính toán số và khoa học, và chủ yếu cạnh tranh với C và C ++ cho người dùng trong miền đó.

Trong khoa học tính toán, Python thường không cạnh tranh trực tiếp với các ngôn ngữ được biên dịch do các hình phạt về hiệu suất mà tôi đã đề cập. Bạn sẽ sử dụng Python cho các trường hợp mà bạn muốn năng suất và hiệu suất cao là một sự cân nhắc thứ yếu, chẳng hạn như trong việc tạo nguyên mẫu các thuật toán chuyên sâu về số lượng, xử lý dữ liệu và trực quan hóa. Bạn sẽ sử dụng Fortran (hoặc ngôn ngữ được biên dịch khác) khi bạn có ý tưởng tốt về thuật toán và thiết kế ứng dụng của bạn, bạn sẵn sàng dành nhiều thời gian hơn để viết và gỡ lỗi mã của mình và hiệu suất là tối quan trọng. (Ví dụ, hiệu suất là một bước giới hạn trong quy trình mô phỏng của bạn hoặc là một khóa có thể phân phối được trong nghiên cứu của bạn.) Chiến lược phổ biến là trộn Python và ngôn ngữ được biên dịch (thường là C hoặc C ++, nhưng Fortran cũng đã được sử dụng), và chỉ sử dụng ngôn ngữ được biên dịch cho các phần nhạy cảm với hiệu năng nhất của mã; tất nhiên, chi phí phát triển là khó viết và gỡ lỗi chương trình bằng hai ngôn ngữ hơn chương trình bằng một ngôn ngữ.

Về mặt song song, tiêu chuẩn MPI hiện tại (MPI-3) có các ràng buộc Fortran và C bản địa. Tiêu chuẩn MPI-2 có các ràng buộc C ++ riêng, nhưng MPI-3 thì không, và bạn sẽ phải sử dụng các liên kết C. Các ràng buộc MPI của bên thứ ba tồn tại, chẳng hạn như mpi4py. Tôi đã sử dụng mpi4py; Nó hoạt động tốt, và dễ sử dụng. Đối với tính song song quy mô lớn (hàng chục nghìn lõi), bạn có thể muốn sử dụng ngôn ngữ được biên dịch bởi vì những thứ như tải động các mô-đun Python sẽ cắn bạn trong quy mô nếu bạn thực hiện theo cách ngây thơ. Có nhiều cách để khắc phục nút cổ chai đó, như đã được các nhà phát triển PyClaw thể hiện, nhưng đơn giản hơn là tránh nó.

Ý kiến ​​cá nhân

Tôi có khoảng một thập kỷ kinh nghiệm trong Fortran 90/95 và tôi cũng đã lập trình trong Fortran 2003. Tôi có khoảng năm năm kinh nghiệm lập trình bằng Python. Tôi sử dụng Python nhiều hơn tôi sử dụng Fortran bởi vì thật lòng mà nói, tôi làm được nhiều việc hơn trong Python. Phần lớn công việc tôi cần làm không yêu cầu tài nguyên siêu máy tính lớn và thường không đáng để phát triển lại bằng ngôn ngữ khác, vì vậy Python chỉ tốt để giải quyết ODE và PDE. Nếu tôi cần sử dụng ngôn ngữ được biên dịch, tôi sẽ sử dụng C, C ++ hoặc Fortran theo thứ tự đó.

Hầu hết các mã Fortran mà tôi thấy là xấu, chủ yếu là do phần lớn cộng đồng khoa học tính toán dường như không biết hoặc không thích bất kỳ thực hành tốt nhất nào được phát hiện bởi các kỹ sư phần mềm trong 30 năm qua. Để dí dỏm: không có khung thử nghiệm đơn vị tốt trong Fortran. (Điều tốt nhất tôi gặp phải là FUnit, bởi NASA, và điều đó không còn được duy trì nữa.) Có một vài khung kiểm tra đơn vị Python tốt, trình tạo tài liệu Python tốt và nói chung là nhiều ví dụ tốt hơn về thực hành lập trình tốt.


Câu trả lời rất hay và đầy đủ :). Tôi đã cài đặt Linux ngày hôm qua nơi trình biên dịch python đã có mặt. Bây giờ tôi đã tự hỏi nếu có một cách dễ dàng để chia sẻ các tập tin giữa máy Linux và Windows của tôi? Tôi nhận thấy rằng bất cứ khi nào tôi sử dụng một thanh để truyền dữ liệu, cả máy Windows và Linux đều bỏ qua một số phần nhất định trên de stich (được định dạng theo định dạng NFTS).
Nick

và vấn đề cuối cùng của tôi được giải quyết bằng cách sử dụng định dạng FAT32 (ít nhất là cho đến nay).
Nick

NB: FAT32 có kích thước tệp tối đa giới hạn.
meawoppl

@Meawoppl, có cách nào thuận tiện hơn để trao đổi các tệp giữa Linux và Windows không? Có lẽ dropbox rồi chứ? Có phải cũng có một giải pháp dựa trên phần cứng?
Nick

Giữ các tệp của bạn dưới 4GB: P Thực sự, tôi không biết về một giải pháp tốt. Ngoài ra còn có một số sự bất hợp lý trong các quy ước tên tệp. Tôi nhớ lại việc phá vỡ một số cửa sổ hỗ trợ một lần bằng cách đặt tên một tệp <3.txt khiến M $ trở nên khá buồn. Hiện tại hỗ trợ NTFS trong linux khá tốt, nhưng đáng chú ý là hoàn toàn không có trong OSX. Tôi thực sự nghĩ rằng chúng ta sẽ giải quyết vấn đề này ngay bây giờ.
meawoppl

7

Tôi sẽ tránh xa Fortan, hoặc nếu bạn phải, sử dụng một phiên bản mới hợp lý (2003 chứ không phải 77). Rất nhiều phần mềm vật lý (đặc biệt là mô phỏng Monte Carlo) được viết bằng Fortran, đơn giản vì các dự án ban đầu được bắt đầu từ những năm 80.

Điều đó đang được nói, python và Fortran là hai ngôn ngữ rất khác nhau, và những gì chúng nên được sử dụng cho khá khác nhau. Python là cấp độ cao và nói chung là không nhanh (so với Fortran & C ++). Lý do nó được sử dụng rất nhiều là vì nó đủ nhanh cho hầu hết mọi thứ và có thư viện tuyệt vời (được cung cấp bởi Fortran) cho nhiều (nhưng không phải tất cả) những điều bạn muốn làm. Nó cũng có Matplotlib tuyệt vời cho âm mưu (vì vậy không cần GNUplot) và bạn có thể có hiệu suất khá tốt bằng cách sử dụng những thứ như Cython để viết các bit đắt tiền. Tuy nhiên, nó sẽ không nhanh như Fortran hay C ++, và sự song song hóa là khá khủng khiếp, khiến nó không đủ cho tính toán số hiệu năng cao. Nếu những gì bạn muốn có thể được xử lý bằng cách gọi thư viện Fortran hoặc C, tuy nhiên,

Fortran là một ngôn ngữ cấp thấp hơn một chút. Đối với số học, hỗ trợ thư viện tốt đến mức đáng ngạc nhiên, nhưng vẫn ở mức rất thấp mang đến cho bạn một số lỗi bạn có thể tránh, chẳng hạn như vô tình chuyển sai kích thước mảng cho một phương thức. Những lỗi này rất khó tìm và bạn có thể không nhận thấy chúng. Tin tôi đi, tôi đã dành khá nhiều thời gian để viết Fortran 77.

C ++ là (theo ý kiến ​​khiêm tốn của tôi) là một phương tiện hạnh phúc. Với các thư viện như Armadillo hoặc Eigen, bạn có thể thoát khỏi phong cách mã hóa khá cao trong khi vẫn có được phong cách hiệu suất cấp thấp.

Nói về hiệu suất, sự lựa chọn thực sự duy nhất cho python số ngay bây giờ là CPython. Nếu bạn tải xuống một cái gì đó như WinPython, bạn cũng sẽ nhận được phần lớn các thư viện bạn cần.

Đối với Fortran trên windows, mọi thứ khó khăn hơn một chút. Tôi khuyên bạn nên chuyển sang linux và sử dụng trình biên dịch ifort gfortran hoặc Intels. Theo kinh nghiệm của tôi, Ifort có xu hướng nhanh hơn đối với mã số, nhưng chỉ miễn phí cho sử dụng phi thương mại, phi học thuật.

Tóm lại: Trừ khi bạn muốn chạy các mô phỏng thực sự nặng, python là sự lựa chọn dễ dàng hơn và thú vị hơn nhiều khi làm việc cùng. Nó cũng phải đủ nhanh cho hầu hết các dự án cấp độ sinh viên. Nếu bạn cần hiệu suất tốt hơn, hãy bắt đầu bằng cách xem xét số lượng lãng phí của các thư viện đã được viết và để điều đó quyết định ngôn ngữ của bạn. Nếu bạn phải viết những thứ từ đầu, hãy sử dụng C ++.

Cũng là một cảnh báo: hầu hết các mã được viết bởi các nhà vật lý là khá khủng khiếp, có lẽ là do các nhà vật lý có xu hướng cho rằng lập trình là dễ dàng và không yêu cầu sự nghiêm ngặt như họ có thể sử dụng trong toán học. Cân nhắc tham gia một lớp học hoặc mua một cuốn sách dạy lập trình.

Tuyên bố miễn trừ trách nhiệm: Tôi là một nhà vật lý đã dành khá nhiều thời gian với mã Monte Carlo dựa trên Fortran 77 và hiện đang thực hiện tất cả xử lý dữ liệu của mình bằng Python.


Liên quan đến việc song song hóa, các nhà nghiên cứu đã sử dụng Python song song thành công trên hàng chục nghìn lõi với hiệu quả song song tốt. (Ví dụ: PyClaw đã được chạy trên tất cả Shaheen, hơn 65.000 lõi.)
Geoff Oxberry

1
Vâng, điều đó là có thể, nhưng theo hiểu biết của tôi chỉ bằng cách đảm bảo rằng phần song song xảy ra bên ngoài CPython là một nỗ lực đáng kể. Phần song song của PyClaw (PETSc) được viết bằng C chẳng hạn. Một cách khác là chạy nhiều phiên bản của CPython, nhưng nó không chính xác tầm thường.
LKlevin

Hầu hết các ứng dụng song song là không cần thiết. Bạn đã viết "song song [Python] là khá khủng khiếp, làm cho nó không đủ cho tính toán số hiệu suất cao." Không ai viết bất kỳ mã hiệu suất cao nào trong Python thuần túy. Lý do cho quyết định này không liên quan gì đến tính song song và không làm mất hiệu lực sử dụng Python làm ngôn ngữ giao diện trong điện toán hiệu năng cao, miễn là nó được sử dụng một cách thích hợp. Câu nói của bạn là một người đàn ông rơm, trong đó giải thích các vấn đề song song, hiệu suất cao và ngôn ngữ diễn giải; không ai có thẩm quyền sẽ thiết kế một ứng dụng như thế.
Geoff Oxberry

Tôi đồng ý rằng Python là một ngôn ngữ giao diện tuyệt vời cho hầu hết mọi mục đích, nhưng điều đó đang tránh xa câu hỏi. Hầu hết các ứng dụng là không cần thiết, vấn đề ở đây là tất cả các trường hợp song song, bao gồm cả những ứng dụng tầm thường, đều không tầm thường trong python. Điều này có thể gây phiền toái nếu vấn đề của bạn được mô tả tốt về mặt hoạt động của Numpy hoặc Cython. Không, bạn sẽ không sử dụng điều này trên cụm 65000 lõi, nhưng bạn có thể chấp nhận hiệu suất gấp 2 lần trên lõi 100.
LKlevin

Song song, điều thú vị về Fortran là bên cạnh MPI / OpenMP còn có các mảng Co-hiện là một phần của tiêu chuẩn. Ví dụ: xem jolts.stanford.edu/72/
stali

7

Python là một ngôn ngữ cấp cao, rất chậm. Để xử lý số nhanh, bạn sẽ phải viết các hạt tính toán chính bằng các ngôn ngữ cấp thấp như C / C ++, điều đó có nghĩa là bây giờ bạn phải học không chỉ một mà ít nhất hai ngôn ngữ. Bạn cũng sẽ phải đối phó với sự đau đầu thêm liên quan đến gỡ lỗi / cài đặt / bảo trì, v.v. Hầu hết mọi người sử dụng Python như một đường cú pháp để che giấu các bản phát hành ngắn của C / C ++.

Modern Fortran (90 trở lên) vừa nhanh vừa cao cấp với cú pháp gần như MATLAB. Vì vậy, bạn có thể làm những việc như:

k=k+matmul(transpose(B),matmul(D,B))*weight(i)*detj

hoặc là

indx(:)=indxmap(indx(:),2)

hoặc thậm chí đơn giản hơn

indx=indxmap(indx,2)

Vân vân.

Trên Linux có một số trình biên dịch Fortran miễn phí. tôi sử dụng

  1. GCC
  2. Xưởng năng lượng mặt trời
  3. Open64
  4. Intel (chỉ sử dụng cho mục đích phi thương mại)

Tôi không sử dụng máy Mac / OSX nhưng có PGI miễn phí.

Và xin vui lòng không sử dụng FORTRAN 77. Không ai sử dụng nó để viết mã mới.

Tuyên bố miễn trừ trách nhiệm: Cá nhân tôi đã xem Python để viết mã FE nhỏ không cấu trúc của riêng tôi (được xây dựng trên cùng của PETSc) nhưng số lượng công việc / mã hóa liên quan không chỉ đơn thuần là viết nó đơn giản là Fortran 95.


1
Về vấn đề này tôi sẽ nói thêm rằng bạn có thể thực hiện lập trình hướng đối tượng khá nghiêm túc trong Fortran 2003; xem ví dụ hướng dẫn này . Tôi đã sử dụng nó rất nhiều trong mã của riêng tôi và nó rất hiệu quả cho những gì tôi muốn làm. Rất nhiều người sẽ bảo bạn tránh nó - tôi nói hãy giữ một tâm hồn cởi mở, bạn có thể thích nó rất nhiều. Tôi chắc chắn.
Daniel Shapero

4

Python rất thực tế để phân tích mô phỏng đầy đủ với các gói đa năng được ghi chép đầy đủ: tạo lưới, tính toán mảng và xử lý cấu trúc dữ liệu ( numpygấu trúc ) cũng như trực quan hóa dữ liệu với matplotlib. Đối với các mô phỏng phức tạp với các tệp kết quả lớn, hoạt động tốt hơn với gói VTK cho phép xuất dữ liệu được đọc bởi các ứng dụng nguồn mở nâng cao (như Paraview hoặc Visit)

Fortran đã có lúc là ngôn ngữ ưa thích cho các miền khác nhau trong các mô phỏng. Nó dễ đọc (ít đọc hơn mã Python). Xử lý mảng là một điểm mạnh của ngôn ngữ, khá dễ xác định và sử dụng trong việc sử dụng tất cả các loại hoạt động của mảng. Nó cũng có ích khi gỡ lỗi.

So sánh có hiệu suất : Tôi chỉ thực hiện các tính toán quy mô lớn bằng các ngôn ngữ được biên dịch (C ++ và Fortran 90) nhưng không bao giờ với Python. Một chủ đề khác cung cấp nhiều thông tin hiệu suất hơn về các ngôn ngữ được dịch và biên dịch: Tôi nên sử dụng ngôn ngữ nào khi giảng dạy một khóa học đại học về lập trình máy tính?

Cá nhân, tôi thích làm việc với Python nói chung, đặc biệt là để xử lý hậu kỳ. Lập trình Python rất thú vị!


1
Hiệu suất gần như luôn luôn quan trọng. Thiếu chú ý đến hiệu năng là lý do tại sao mọi người cần 8 lõi với 16Gb RAM để kiểm tra email và lướt web.
stali

Tôi đã không may phải đọc mã trăn của người khác. Tôi sẽ không phân loại mã py là dễ đọc.
Biswajit Banerjee

@stali: Tôi hoàn toàn đồng ý
SAAD

1
@BiswajitBanerjee: không thể viết mã phức tạp với bất kỳ ngôn ngữ nào, nhưng ít nhất tôi có thể dễ dàng xác định đầu vào và đầu ra của bất kỳ chức năng nào, đây là nơi Fortran trở nên khủng khiếp! :)
SAAD

3

Với Python bạn không cần Gnuplot, bạn có thể sử dụng, ví dụ, matplotlib và / hoặc sử dụng vỏ IPython. IPython là một vỏ Python tương tác, ở chế độ% pylab, cung cấp khá nhiều lệnh vẽ giống như bạn có trong MATLAB.

Rất có khả năng tính toán khoa học sẽ có sự thay đổi lớn từ MATLAB sang Python trong hơn 5 năm tới.


Một lợi thế của Gnuplot là nó hầu như luôn được cài đặt trên các máy Linux (cụm / máy chủ, v.v.) và rất hữu ích cho viz nhanh / bẩn. Nó giống như vi cho viz.
stali

1

Tôi sẽ tiếp tục sử dụng MATLAB, nó gọi các thư viện toán học nhanh và bạn sẽ không thấy nhiều sự khác biệt về hiệu suất bằng cách chuyển sang FORTRAN trên Windows. Đồng thời, bạn sẽ có cơ sở hạ tầng tốt hơn trong MATLAB để báo cáo kết quả và chạy mã của mình. Nhược điểm của MATLAB là chi phí của nó. FORTRAN về cơ bản là miễn phí, và có rất nhiều thư viện miễn phí ngoài kia.

FORTRAN rất dễ học và bắt đầu lập trình. Về cơ bản nó thực hiện những gì mà tên gợi ý: dịch công thức của bạn thành mã, rất dễ đọc và dễ hiểu. Đó là lý do tại sao các nhà vật lý sử dụng nó rất nhiều trong những ngày xưa. Miễn là phần lớn mã của bạn là về giải quyết các vấn đề vật lý (không xây dựng GUI hoặc làm các công cụ tuyệt vời khác), mã FORTRAN sẽ dễ dàng duy trì.

Tôi chỉ giới thiệu Python nếu bạn thích lập trình. Hãy nghĩ về điều này: khi bạn viết mã một giải pháp cho vấn đề vật lý, bạn có thích lập trình một phần của giải pháp không? Nếu bạn làm như vậy, thì Python là một tùy chọn, vì ngôn ngữ tốt hơn nhiều so với MATLAB.


2
Tuyên bố của bạn về sự khác biệt về hiệu suất khi chuyển từ MATLAB sang Fortran nói chung là không đúng. Fortran thật tuyệt nếu bạn viết mã cho mảng nào là cấu trúc dữ liệu tốt tự nhiên, nếu bạn có thể sống với cách nó xử lý I / O và nếu nó có các thư viện bạn cần. Các thư viện số trong Python chồng chéo rất nhiều về chức năng với MATLAB và tôi thấy việc viết giao diện Python sang mã C dễ dàng hơn so với giao diện MATLAB sang mã C.
Geoff Oxberry

Đôi khi bạn làm thấy nhiều sự khác biệt. Gần đây tôi đã viết lại một chương trình mô phỏng vật lý từ Matlab (sử dụng gói bvp6c bên trong) sang Fortran 2008 (sử dụng gói bvp_solver bên trong) và thời gian thực hiện giảm xuống chỉ còn 1,4% sau khi chuyển đổi, mặc dù tôi không thay đổi thuật toán hoặc cấu trúc tổng thể của chương trình. Đối với một mô phỏng được sử dụng để yêu cầu ~ 3,5 ngày cho mỗi điểm dữ liệu để hội tụ, đây là một cải tiến rất đáng chú ý.
jabirali
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.