עיבוד נתונים נומריים – מטלאב מול אוקטב

Posted on February 25, 2011

1


תחילת הסיפור

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

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

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

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

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

שלב ראשון: קריאת הנתונים

הנתונים מגיעים בקובץ טקסט או csv. קריאת הקובץ לתוך מטלאב ואוקטב בהתאמה היא:

textread(‘c:\Documents and Settings\1.txt’  , ‘ %f %f’)

load(“-ascii”, “c:\Documents and Settings\1.txt”)

נקבל על המסך רישום של המטריצה שנקראה מתוך הקובץ.

שלב שני: מציאת הערך הקרוב ביותר במטריצה שלנו לערך נקוב שהוחלט עליו מראש

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

לשם כך ביצעתי במטלאב את הפעולות:

x=מטריצת הדגימות שהכנסנו מתוך קובץ

y=2   (נניח שהערך שקבענו הנו 2)

z=abs(x-y)  (מחסרים הדגימות מהערך הנקוב, מפעילים ערך מוחלט מכיוון שרק המרחק היחסי מעניין אותנו)

min(z)   (מחפשים את הערך הקטן ביותר, שהוא בעצם הדגימה הקרובה ביותר לערך שקבענו)

לשמחתי הקוד המקביל באוקטב זהה לחלוטין לקוד של מטלאב (התמונות הן משלבי הנסיון שלי ולכן “היגרלתי” מטריצה בתמונות הללו):

 

 

 

 

 

 

 

 

 

 

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

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

המשך סופ”ש נעים.

וקסמן