עבור לתוכן

צריך ללמוד לתכנת

Featured Replies

פורסם

תכנות לצורכים מדעיים.

מתלבט לגבי שפה/כלי.

יש מאטלב/אוקטב.

שפות תסריט כמו פיית'ון.

שפות עיליות כמו c,c++,Fortran.

ההתלבטות העיקרית היא לגבי הקבוצה האחרונה. כל אחת מהאפשרויות בה תדרוש יותר זמן ויבלות כדי לשלוט בה היטב. פורטרן היא שפה קלאסית לתכנות מדעי. c,c++ חדשות יותר (יחסית) ונפוצות יותר, אך האם יש להן יתרון על פני פורטרן? אני אנסה לנסח מספר תהיות:

1. לאיזו שפה אוסף ספריות וכלים נרחב יותר?

2. איזו שפה יכולה לתת ביצועים טובים יותר? כלומר הפונקציות שנכתבו עבורה מבצעות את העבודה טוב יותר.

3. באיזו שפה אני יכול להתמקד יותר בבעיה המתמטית/פיזיקלית ולא בהקצאות משאבים?

בנוסף, אם נחזור קצת אחורה, האם פייתון והרחבותיה (numpy,scipy וכדו') יכולה לשמש ככלי עבודה עיקרי? כמה איטי יותר רץ קוד של פייתון מאשר קוד שהודר? (ראיתי במהדרים מסוימים אפשרות להדר קבצי py לקבצי pyw. יש הבדל?)

כמו-כן, מה אתם יודעים על GSL,blas,lapack וספריות דומות עבור לינוקס? מאחר שהן זמינות לי אני מעוניין לעשות בהן שימוש.

אם אתם מעוניינים בדוגמא לבעייה, אז תחשבו על מד"ח (כמו שרדינגר) עם ע"ע אקראיים שמוסיפים לה פוטנציאל קובי (השאלה היא האם קיימת לוקליזציית אנדרסון בנוכחות פוטנציאל לא לינארי).

פורסם

אין היום סיבה ללמוד פורטרן, אלא אם אתה הולך לתחזק מערכות שנכתבו לפני 20 שנה.

פורסם
  • מחבר

אני לא מתכוון לתחזק מערכות ישנות, אלא לבצע חישובים נומריים וסימבוליים.

פורסם

אם הייתי צריך לומר זאת כך:

1) ל-C, C++ וגם פייתון יש אוסף עצום של ספריות, גדול יותר מ-fortran ו-MATLAB. וכמובן ניתן להשתמש בכל ספריה עם C linkage (כלומר רובן). אבל לא בטוח שזה חשוב לך. אתה באמת צריך networking ו-XML? כנראה שלא.

2) FORTRAN מהירה מאוד בדברים האלה, אבל זה לא אומר שכל התוכנה צריכה להיות בFORTRAN.

3) בפירוש לך על MATLAB אלא אם כן יש לך בעיה אמיתי עם ביצועים (MATLAB גרוע בלולאות). אם מדובר על זה שכל הרצה לוקחת שבוע, אז תחשוב על לעבור לשפה אחרת.

BLAS ו-LAPACK הן ספריות שכתובות ב-fortran ונחשבות הסטנדרט שלפיו מודדים ספריות לאלגברה לינארית. יותר מזה - לא יודע. קראתי ש-matlab מבוססת עליהם. לא יודע אם זה נכון.

ממה שהבנתי מהבעיה שאתה עובד עליה, MATLAB זה אידיאלי כל עוד אתה לא מנסה לפתור את זה סימבולית (MATLAB די בנוי עבור פתרון נומרי למשוואות דיפרנציאליות). קראתי ש-R טובה יותר בחישוב סימבולי, אין לי שום נסיון עם R.

קצת מידע שיש לי, בפרספקטיבה של חישוב מדעי:

MATLAB היא שפה מצויינת למיחשוב מדעי, אבל בכיוון ל-prototyping ומחקר ופיתוח, ופחות למימושים סופיים. לא סתם משתמשים בה כמעט בכל מקום רציני. וכמובן היכולת שלה לשלוף מליון סוגי גרפים תוך רגע מאוד מועילה.

הביצועים שלה גרועים, מספיק גרועים שאפשר לומר: If you have to ask, you can't afford it.

יכולת ייצור הקוד שלה מוגבלת ויקרה. למרות מספר מקומות רציניים ביותר שאני מכיר או שעבדתי בהם, עוד לא ראיתי או שמעתי (ממקור שני) על מקום שמייצר כמות משמעותית של קוד MATLAB לשימוש תעשייתי.

FORTRAN מובילה בחישובים נומריים בביצועים, ויש לה סט ספריות מדעיות חזק במיוחד עם הביצועים הטובים ביותר שיש. מצד שני, לא הייתי רוצה לממש KD-tree בפורטרן (אבל אני מניח שחל שיפור מסויים בשפה מאז 77). השפה לא בדיוק ידועה בתרומותיה לדיסיפלינת הנדסת התוכנה...

ל-C/C++ יש סט עצום של ספריות חזקות ומהירות כמעט לכל מטרה, ובכל מקרה ניתן ללנקג' עם ספריות פורטרן. עדיין לחישובים נומריים קוד C קצת יותר איטי (ואם לא, יותר מתוסבך) מ-FORTRAN עקב pointer aliasing. כמובן אח"כ תצטרך להתעסק קצת עם זיכרון ושאר הכיף של C ו-C++.

python אחלה ל-Prototyping, אך איטי אלא אם כן אתה מוכן להשקיע הלאה. מהבחינה הזו כמו MATLAB, אבל MATLAB כבר בא עם קוד industrial strength להרבה פעולות, אז כבר קח אותו.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים