خزّن ما هو موجود فقط
يستبدل تسعير خيار على شبكة المعادلة التفاضلية بسلسلة من الأنظمة الخطية. كل عقدة مرتبطة بجارتيها فقط فمصفوفة النظام ثلاثية الأقطار: ثلاثة أقطار من الأعداد وأصفار في كل مكان آخر. تخزن المصفوفة الكثيفة n×n عدد n² من الأعداد جلها أصفار، ويخزن التنسيق المتفرق 3n-2 المهمة فقط. تبني scipy.sparse.diags([lower, diag, upper], [-1, 0, 1], format='csc') مصفوفة كهذه من أقطارها (للقطر السفلي n-1 عنصرًا وكذلك العلوي ولهذا يُقصّ السفلي ليبدأ من الصف الثاني والعلوي لينتهي قبل العمود الأخير). وتنسيق CSC هو ما تريده الحلّالات المتفرقة.
يُرجع المخطط الضمني قيمة الخيار في الزمن بحل A V^new=V^old+الحد في كل خطوة. لا تتغير المصفوفة A من خطوة إلى أخرى فتحللها مرة واحدة بـ scipy.sparse.linalg.splu(A) وتصبح كل خطوة lu.solve(rhs) فقط وهي عملية رخيصة جدًا لمصفوفة ثلاثية الأقطار. ويدخل شرط الحد عند S=0 (قيمة الخيار البيعي هناك Ke^(-rτ)) في المعادلة الأولى ولهذا يُصحَّح الطرف الأيمن الأول بـ lower[0] * K * exp(-r * m * dt). وبمعدل سنة 4.47% وσ=25% يساوي الخيار البيعي عند السعر الحالي 7.6987 بالصيغة المغلقة؛ ويعطي المخطط 7.6958 على شبكة 200×200 و7.6965 على شبكة 400×400 أي على بعد نحو 0.003. وتخزن شبكة من 2000 عقدة 5,995 عددًا بالصيغة المتفرقة بدل نحو 4 ملايين.
- خزّن الأقطار لا الأصفار: تحفظ
sparse.diagsعدد 3n - 2 بدل n تربيع. - حلّل مرة وحُلّ مرات: تدفع
spluالكلفة مقدمًا ثم تصير كل خطوة زمنيةsolveرخيصًا واحدًا. - الحدود في الطرف الأيمن: القيمة المعروفة عند حافة الشبكة تنتقل إلى الجانب الآخر من المعادلة.
المختبر: ما الذي يُقيَّم
- الأقطار الثلاثة20 نقطة
- المصفوفة المتفرقة15 نقطة
- التسعير بتحليل واحد30 نقطة
- متفرق مقابل كثيف10 نقطة
- خطأ التسعير5 نقطة
- الدراسة على معدل حقيقي20 نقطة