سؤال

أنا أعمل مع العديد من النماذج والمحاكاة المختلفة. تتم كتابة بعض النماذج والمحاكاة القديمة في Fortran. تم تحويل بعض هذه النماذج إلى C ++، ولكن الاتجاه الحالي هو إنشاء هذه النماذج باستخدام matlab / simulink. من منظور علوم الكمبيوتر، شعرت دائما أن MATLAB / Simulink لم يكن حلا جيدا. ما هي اللغة التي تستخدمها لإنشاء نماذج ومحاكاة ولماذا؟

هل كانت مفيدة؟

المحلول

أنا أيضا أعمل مع الكثير من الكود القديم، ومعظمها في فورتران. أنا حقا لا أمانع في استخدام FORTRAN - كل المجمعين الحديثين يسمحون بأسماء متغيرة أكبر من الحد القديم والسخيف الحرفي. أيضا، مع FORTRAN 95، يمكنك حتى أن تفعل OOP إذا كنت تشعر أن التعديلات الخاصة بك على CodeBase الحالية ستستفيد.

أيضا، هناك محرريين كود جيد للغاية ل FORTRAN، والتي ليست دائما في حالة لغات البرنامج النصي المتخصصة.

C ++ لديه عيب كبير لاعتبارات الذاكرة. لقد تم برمجة C / C ++ لمدة 20 عاما الآن، وما زلت أنسى حذف الكائنات وملء الديمقراطيين بشكل صحيح.

في ملاحظة أخيرة، إذا كنت تستخدم Windows، فهناك مترجم Fortran.net (أعتقد من Lahey-Fujitsu؟) إذا كنت ترغب في نقل Fortran الخاص بك إلى بيئة مدارة.

حظ سعيد!

نصائح أخرى

أحاول دائما استخدام اللغة التي توفرها أفضل النمذجة والمحاكاة أداة (أو مكتبة، إذا أردت) القيام بهذه المهمة بالنسبة لي.

وهذا السؤال يمكن الإجابة عليه فقط من خلال مراعاة ما أنواع من النماذج التي تريد تنفيذها. مستمر (مثل ODES)، منفصل (مثل Statecharts، Nets Petri)، أو مزيج (أي نموذج هجين، كما يمكن تنفيذه مع Simulink + Settleflow)؟ هناك أدوات مختلفة لكل نوع من النماذج.

الجانب الآخر هو آخر سيكون نطاق التي تعمل فيها. Simulink لديها مكتبات واسعة جدا للهندسة الكهربائية أو المالية أو البيولوجيا الحسابية (معظمها مدرجة في حزم إضافية، على الرغم من ذلك) - إذا كنت تعمل في واحدة من تلك الحقول، فقد لا يكون هناك مكتبة مكون مكون أفضل (أي كاملة) وبعد الشيء نفسه ينطبق على حزم المحاكاة التجارية الأخرى، مثل Anylogic., الساحة, ، وما إلى ذلك قد يكون هناك أيضا أدوات محاكاة مفتوحة المصدر، اعتمادا على مشكلة النمذجة.

أخيرا، قد تفضل لغة برمجة محددة على آخر، وقد يكون لديك متطلبات إضافية، مثل دعم

  • التحسين (المعلمات النموذجية)
  • تصديق
  • تحليل الإخراج (الإحصاءات والأراضي والاختبارات الإحصائية)
  • دعم للمحاكاة الموازية والتوزيع
  • فحص النموذج
  • ...

لذلك أنا أعمل حاليا مع Java مع المزايا المعروفة - سريعا بشكل معقول، ودعم جيد لخيوط متعددة، بسيطة نسبيا للاستخدام وما إلى ذلك ولكن إذا كان "سريع بشكل معقول" ليس سريعا بما يكفي، فقد لا يكون هناك خيار ولكن النزول مستوى واحد من التجريد :-)

سيمولا بالطبع !! :-)

ما أخرجته من ماتلاب هو قدرة السماح لي بسرعة نموذج خوارزمية. يمكنني حقا الحصول على شعور جيد للبيانات عن طريق التخطيط لها واستخدام وظائف الإحصاءات المدمجة. عند محاولة شيء جديد، يمكنني أن أفعل شيئا سريعا وقذرا للحصول على بعض النتائج الأولية، ثم العودة وتنظيف الأشياء لتحسين نتائجي. مع وجود لغات مجمعة، هناك الكثير الذي يجب أن أفعله فقط للحصول على المحاكاة لتشغيلها. مع MATLAB، أقضي المزيد من الوقت في التفكير في المشكلة الحقيقية، وأقل عن تجميع أو ربط أو إدارة الذاكرة، إلخ.

ومع ذلك، هناك العديد من المشاكل التي تعد matlab غير مجهزة فقط لحلها. بالنسبة لمجموعات البيانات الكبيرة، تكون لغة مجمعة مع هياكل البيانات المحددة من قبل المستخدم ضرورية تقريبا.

تم نقل فيثيون الجسيمات إلى C ++ و Python. هذا ليس عالميا، وربما لن يكون قريبا، لم يكن ذلك في كل مكان جذر.

استخدام الجذر ل Cint يعني أنك بحاجة إلى تهتم بإدارة الذاكرة عندما تكون الرميت مع فكرة جديدة، فإن القدرة على التشغيل تتيح لك السرعة، والقدرة على مزج أوضاع مفيدة للغاية، والربط لبثيون وغيرها اللغات الراد تسمح بمرونة كبيرة.

بمعنى حقيقي للغاية، وهذا ينزل إلى تأييد رولاندنقطة.

يمكنك استخدام كتلة S-Funcuin لربط FORTRAN (C، C ++) مع MATLAB.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top