ראינו בהרצאה שאפשר לפתור משוואות ליניאריות בעזרת numpy.linalg.solve. ניתן לפתור משוואות כלליות גם בעזרת scipy.optimize.root. מטרת השאלה היא להשוות את זמני הריצה של שתי השיטות.
א. כתבו פונקציה המקבלת כקלט מטריצה a ווקטור b כמו הקלט של numpy.linalg.solve, ופותרת את המשוואה בעזרת scipy.optimize.root. כתבו תיעוד ודוקטסט.
ב. כתבו קוד הבודק את הפונקציה של סעיף א ע"י הרצת הפונקציה על קלטים אקראיים והשוואה לתוצאה של numpy.linalg.solve.
ג. כתבו פונקציה המשווה את הביצועים של הפונקציה שלכם לפונקציה numpy.linalg.solve על קלטים אקראיים בגדלים שונים, בין 1 ל-1000. לכל אחת משתי הפונקציות, ציירו גרף המראה את זמן הריצה הממוצע כפונקציה של גודל הקלט.
יש להגיש קובץ פייתון בשם compare.py הכולל את הקוד, וקובץ תמונה בשם comparison.png המראה את הגרפים.
שימו לב: בשאלה זו הבדיקה היא ידנית - אין משמעות לבדיקות האוטומטיות.