سؤال

أنا جديدة على OpenModelica و لدي بضعة أسئلة بخصوص قانون 'BouncingBall.مو' التي توزع مع البرنامج كما في المثال التعليمات البرمجية.

1) ما هو الفرق بين 'عندما' و 'إذا'?

2)ما هو الغرض من متغير 'فو' في الكود ؟

3)في السطر(15) - "عندما {h <= 0.0 و الخامس <= 0.0 الأثر}",, لا يجب التعبير عن 'عندما' يكون كافيا كما "{h <= 0.0 و الخامس <= 0.0}" لأن هذا يصبح صحيح عندما يحدث تأثير, ما هو الغرض من تأثير(بالنسبة لي زائدة هنا) و ماذا فاصلة(,) قبل تأثير يعني ذلك ؟

model BouncingBall
  parameter Real e = 0.7 "coefficient of restitution";
  parameter Real g = 9.81 "gravity acceleration";
  Real h(start = 1) "height of ball";
  Real v "velocity of ball";
  Boolean flying(start = true) "true, if ball is flying";
  Boolean impact;
  Real v_new;
  Integer foo;
equation
  impact = h <= 0.0;
  foo = if impact then 1 else 2;
  der(v) = if flying then -g else 0;
  der(h) = v;
  when {h <= 0.0 and v <= 0.0,impact} then
      v_new = if edge(impact) then -e * pre(v) else 0;
    flying = v_new > 0;
    reinit(v, v_new);

  end when;
end BouncingBall;
هل كانت مفيدة؟

المحلول

حسنا, هذا عدد غير قليل من الأسئلة.اسمحوا لي أن أحاول الإجابة عليها:

  1. ما هو الفرق بين when و if.

    الأسئلة داخل when شرط فقط "نشط" في لحظة أن التعبيرات الشرطية المستخدمة في when شرط تصبح نشطة.في المقابل, المعادلات داخل if العبارة صحيحة طالما أن التعبير الشرطي يبقى صحيحا.

  2. ما هو الغرض من foo?

    ربما التصور.ليس له تأثير واضح على النموذج الذي أستطيع أن أرى.

  3. لماذا impact المدرجة في when البند.

    واحدة من المشاكل لديك ما يسمى زينو نظم مثل هذا هو أن تستمر ترتد إلى أجل غير مسمى مع أصغر وأصغر فترات.أظن impact العلم هنا هو من المفترض أن تشير عند النظام قد توقف كذاب.ويتم ذلك عادة عن طريق فحص للتأكد من أن التعبير الشرطي h<=0.0 يصبح فعلا كاذبة في بعض نقطة.لأن الحدث كشف يتضمن العددية tolerancing في بعض نقطة ارتفاع مستبعد لم يحصل خارج نطاق التسامح و تحتاج إلى الكشف عن هذا أو الكرة لم يرتد مرة أخرى و يستمر في الانخفاض.(من الصعب شرح ذلك في الواقع دون تشغيل المحاكاة و رؤية تأثير).

  4. ماذا , هل في when البند.

    النظر في ما يلي: when {a, b} then.الشيء هو, إذا كنت تريد أن يكون لها when شرط الزناد عندما إما a أو b يصبح صحيحا ، قد تعتقد أنك سوف اكتب كما when a or b then.ولكن هذا غير صحيح لأن ذلك سوف يؤدي فقط عندما أولا واحد يصبح صحيحا.أن ترى هذا أفضل, النظر في هذا الكود:

    a = time>1.0;
    b = time>2.0;
    when {a, b} then
      // Equation set 1
    end when;
    when a or b then
      // Equation set 2
    end when;

لذا المعادلة مجموعة 1 سوف تحصل على تنفيذها مرتين هنا لأنها سوف تحصل على تنفيذها عند a يصبح صحيحا ثم مرة أخرى عندما b يصبح صحيحا.ولكن المعادلة مجموعة 2 سوف تحصل فقط على تنفيذها مرة واحدة عندما a يصبح صحيحا.ذلك لأن كل التعبير a or b فقط يصبح صحيحا في لحظة واحدة.

هذه هي النقاط المشتركة من الارتباك حول when.نأمل أن هذه التفسيرات مساعدة.

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