שימוש בספרייה המתמטית של C++ ליישומים מדעיים 1 מרכז ההדרכה 2000 תמיכה ועדכונים עדכון מס' 55 יוני 2002 שימוש בספרייה המתמטית של ++C ליישומים מדעיים מבו

מסמכים קשורים
סדנת תכנות ב C/C++

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

PowerPoint Presentation

Tutorial 11

Microsoft PowerPoint - rec3.ppt

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

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

תכנות מונחה עצמים א' – תש"ע

! 1! משוואות מסדר ראשו! (הפרדת משתני*, הומוגנית, לינארית) xyy = 1 x y xy 2 = 2xy 2 מצא את הפתרו' הכללי: x y y = 3 א) y ג) ב) ד) y tan x = y (1 ( x+ y

מבוא למדעי המחשב

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

מהוא לתכנות ב- JAVA מעבדה 3

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

דף נגזרות ואינטגרלים לשאלון 608 כללים למציאת נגזרת של פונקציה: n 1. y' n x n, y הנגזרת x.1 נכפול בחזקה )נרשום אותה משמאל ל- (. x א. נחסר אחד מהחזקה. ב

Slide 1

Slide 1

Microsoft Word - דוגמאות ב

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

הגשה תוך שבוע בשעת התרגול

שאלהIgal : מערכים דו מימדיים רקורסיה:

PowerPoint Presentation

PowerPoint Presentation

Microsoft Word - c_SimA_MoedA2006.doc

Microsoft PowerPoint - lec10.ppt

מבוא לתכנות ב- JAVA תרגול 7

Microsoft PowerPoint - rec1.ppt

. [1,3] ו = 0 f(3) f(1) = עמוד 1 מתוך 6 דר' ז. אולחא מס' הקורס 9711 חדו''א הנ מכונות 1 f ( x) = ( x 1)( x 2)( x 3) c= f c = c (1,3), c תשובות I 1) פונ

Slide 1

Microsoft Word B

PowerPoint Presentation

<4D F736F F D20EEF9E5E5E0E5FA20E3E9F4F8F0F6E9E0ECE9E5FA2E646F63>

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

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

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

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

תוכן העניינים

Slide 1

שאלהIgal : מערכים דו מימדיים רקורסיה:

שיעור 1

Slide 1

. שאלה 1: ה אי x] T : R 4[ x] R 4[ אופרטור ליניארי מוגדר על-ידי T( ax bx cx d) bx ax cx c )13 נק'( א( מצאו את הערכים העצמיים, המרחבים העצמיים

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

PRESENTATION NAME

Slide 1

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

שאלהIgal : מערכים דו מימדיים רקורסיה:

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

Homework Dry 3

תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב

מבוא למדעי המחשב

Microsoft Word - pitaron222Java_2007.doc

<4D F736F F D20FAF8E2E9EC203220E0F7E520EEE020FAF9F2E1>

אנליזה מתקדמת

תרגול 1

Microsoft Word - tutorial Dynamic Programming _Jun_-05.doc

תרגיל בית מספר 1#

שקופית 1

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

תאריך הבחינה 30

מבוא למדעי המחשב - חובלים

Microsoft Word - hedva 806-pitronot-2011.doc

מבוא למדעי המחשב

מבוא למדעי המחשב

תוכן העניינים

Microsoft Word - c_SimA_MoedB2005.doc

Slide 1

Microsoft PowerPoint - lec2.ppt

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

מטלת מנחה (ממ"ן) 11 הקורס: חשבון אינפיניטסימלי II חומר הלימוד למטלה: יחידות 2,1 4 מספר השאלות: 7 משקל המטלה: נקודות סמסטר: ב 2007 מו

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

Slide 1

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

Limit

מבוא למדעי המחשב - חובלים

מבוא לתכנות ב- JAVA תרגול 11

Slide 1

PowerPoint Presentation

Slide 1

PowerPoint Presentation

שאלה 2. תכנות ב - CShell

עב 001 ינואר 12 מועד חורף פתרונות עפר

PowerPoint Presentation

PowerPoint Presentation

2019 שאלות מומלצות לתרגול מס' דיפרנציאביליות של פונקציה סקלרית )המשך(. כלל השרשרת. S = ( x, y, z) z = x + 3y על המשטח מצאו נקודה בה מישור משיק

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

תרגול 1

תרגול 1

הטכניון מכון טכנולוגי לישראל אלגוריתמים 1 )443432( סמסטר חורף הפקולטה למדעי המחשב תרגול 9 מסלולים קלים ביותר תרגיל APSP - 1 עד כה דנו באלגור

MathType Commands 6 for Word

מבוא למדעי המחשב

מתמטיקה של מערכות

שעור 6

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

הגשה תוך שבוע בשעת התרגול

תרגול מס' 7 – חזרה על MST ואלגוריתם Dijkstra

תמליל:

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 1 מרכז ההדרכה 2000 תמיכה ועדכונים עדכון מס' 55 יוני 2002 שימוש בספרייה המתמטית של ++C ליישומים מדעיים מבוא הספרייה המתמטית של ++C מספקת עצמת תיכנות ליישומים מדעיים שונים, תוך שמירה על מאפייני הכלליות,(templates) היעילות והטיפוסיות החזקה (strong-typing) המקובלים בשפה. הספרייה התקנית מספקת תמיכה בתכנות מתמטי מדעי ע"י מספר מרכיבים: valarray template - מחלקה המייצג מערך לחישובים וקטוריים אריתמטיים. comple template - של מחלקה לתמיכה במספרים מרוכבים. numeric_limits template - מחלקה הכולל הגדרות תחומים של טיפוסים מספריים. יש לשים לב ש- ++C מספקת תמיכה מתמטית בנוסף לזו המסופקת ע"י ספרייה התקנית של C הכוללת פונקציות לטיפול בחזקות, לוגריתמים, טריגונומטריה, יצירת מספרים אקראיים וכו'. במאמר זה נסקור את ה- valarray כמיכל אופטימלי לביצוע פעולות וקטוריות אריתמטיות. תוכן נושא זה מבוסס על פרק 14 בספר "++C - מדריך מקצועי" בהוצאת "מרכז ההדרכה 2000". valarray valarray הוא termplate מחלקה המייצג מערך לחישובים וקטוריים אריתמטיים ביעילות גבוהה: ניתן לבצע פעולות מתמטיות פשוטות, פעולות בחזקות, פעולות לוגריתמיות, פעולות טריגונומטריות ועוד. valarray שונה מ- vector בכך שהוא אינו מספק ממשק להכנסת איברים ולהוצאתם, וגם לא איטרטורים לתחילת הסדרה ולסופה. זאת משום שייעודו העיקרי הוא לביצוע פעולות וקטוריות על מערך נתון ולא תחזוקת הסדרה. דוגמאות לשימוש ב :valarray int arr1[] = 1, 2, 3, 4; valarray<int > v1(arr1, 4); // v1 = 1, 2, 3, 4 שימוש ב valarray על שלמים: valarray<int> v2 = v1 ; // v2 = 1, 2, 3, 4 valarray<int> v3 = v1<<2 ; // v3 = 4, 8, 12, 16 valarray<int> v4 = -v1 ; // v4 = -1, -2, -3, -4 פעולות על ממשיים - חישוב ממוצע: double arr2[5] = 1.0, 2.0, 3.0, 4.0, 5.0 ; valarray<double> v(arr2, 5); double avg = v.sum() / (double)v.size(); // avg = 3.0

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 2 template<class T> class valarray public: typedef T value_type; המיכל valarray מוגדר בקובץ הספרייה <valarray> כך: // constructors: valarray(); eplicit valarray(size_t n); valarray(const T& val, size_t n)); valarray(const T *p, size_t n); valarray(const slice_array<t>& sa); valarray(const gslice_array<t>& ga); valarray(const mask_array<t>& ma); valarray(const indirect_array<t>& ia); // assignment: // subscript [ ] : T T& slice_array<t> gslice_array<t> mask_array<t> indirect_array<t> operator=(const va); operator=(const T& ); operator=(const slice_array<t>& sa); operator=(const gslice_array<t>& ga); operator=(const mask_array<t>& ma); operator=(const indirect_array<t>& ia); operator[](size_t n) const; operator[](size_t n); operator[](slice sa) const; operator[](slice sa); operator[](const gslice& ga) const; operator[](const gslice& ga); operator[](const valarray<bool>& ba) const; operator[](const valarray<bool>& ba); operator[](const valarray<size_t>& a) const; operator[](const valarray<size_t>& a); // arithmetic operators: operator+(); operator-(); operator~(); valarray<bool> operator!(); operator*=(const ); operator*=(const T& ); operator/=(const ); operator/=(const T& ); operator%=(const ); operator%=(const T& ); operator+=(const ); operator+=(const T& ); operator-=(const ); operator-=(const T& ); operator^=(const ); operator^=(const T& ); operator&=(const ); operator&=(const T& ); operator =(const ); operator =(const T& ); // bit shift operators: operator<<=(const ); operator<<=(const T& );

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 3 operator>>=(const ); operator>>=(const T& ); // element shift operators: shift(int n) const; cshift(int n) const; // size, sum, min and ma: size_t size() const; T sum() const; T ma() const; T min() const; ; // other operations: void void void apply(t fn(t)) const; apply(t fn(const T&)) const; fill(const T& val); free(); resize(size_t n, const T& c = T()); בנוסף, מוגדרות הפונקציות הגלובליות הבאות על :valarray!= % & && > >> >= < << <= * + - / == ^ cos cosh acos sin sinh asin tan tanh atan atan2 אופרטורים: פונקציות טריגונומטריות: מקסימום, מינימום, ערך מוחלט, חזקות ולוגריתמים: ma min abs pow sqrt ep log log10 int arr1[] = 1, 2, 3, 4; valarray<int>v(arr1,4); //1,2,3,4 valarray<int> v1 = v ; // 1, 2, 3, 4 valarray<int> v2 = v<<2 ; // 4, 8, 12, 16 valarray<int> v3 = -v ; // -1, -2, -3, -4 valarray<int> v4 = 3 * v ; // 3, 6, 9, 12 valarray<int> v5 = v + v4; // 4, 8, 12, 16 דוגמאות לשימוש ב- :valarray 1. הקוד הבא מאתחל עצמי valarray מטיפוס,int ומבצע עליהם פעולות: 2. פעולות הזזה על סיביות (<<,>>) ופעולות הזזה על איברים cshift) :(shift, int arr1[] = 1, 2, 3, 4; valarray<int>v(arr1,4); //1,2,3,4 valarray<int> v1 = v <<2; // 4, 8, 12, 16 valarray<int> v2 = v >> 1; // 0, 1, 1, 2 valarray<int> v3 = v.shift(2) ; // 3, 4, 0, 0

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 4 valarray<int> v4 = v.shift(-1); // 0, 1, 2, 3 valarray<int> v5 = v.cshift(2); // 3, 4, 1, 2 valarray<int> v6 = v.cshift(-1); // 4, 1, 2, 3 ostream & operator<<(ostream& out, const v) for(int i=0; i<v.size(); i++) out << v[i] << " "; return out << endl; לצורך הדפסת valarrays ניתן להגדיר אופרטור >> גלובלי: cout << "v1 = " << v1; cout << "v2 = " << v2; double arr1[] = 1, 2, 3, 4; valarray<double> v1(arr1, 4); valarray<valarray<double> > mat1(5); mat1[0] = v1; וכעת ניתן להדפיס :valarrays 3. הגדרת מטריצת ממשיים כ- valarray של :valarrays // 5*4 double matri for(int i=1; i<mat1.size(); i++) mat1[i] = mat1[i-1].cshift(1); cout << "v1 = " << v1; cout << "mat1 = " << endl << mat1; valarray<valarray<double> > mat2 = mat1 / v1; cout << "mat2 = mat1 / v1 = " << endl << mat2; הפלט: v1 = 1 2 3 4 mat1 = 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 1 2 3 4 mat2 = mat1 / v1 = 1 1 1 1 2 1.5 1.33333 0.25 3 2 0.333333 0.5 4 0.5 0.666667 0.75 1 1 1 1 int arr1[] = 1, 2, 3, 4; valarray<int> v1(arr1, 4); 4. כנ"ל, עם מטריצת שלמים: valarray<valarray<int> > mat1(5); // 5*4 int matri mat1[0] = v1; for(int i=1; i<mat1.size(); i++) mat1[i] = mat1[i-1].cshift(1);

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 5 cout << "mat1 = " << endl << mat1; valarray<valarray<int> > mat2 = mat1 * v1; cout << "mat2 = mat1*v1 = " << endl << mat2; valarray<valarray<int> > mat3 = mat1 * mat2; cout << "mat3 = mat1*mat2 = " << endl << mat3; הפלט: mat1 = 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 1 2 3 4 mat2 = mat1*v1 = 1 4 9 16 2 6 12 4 3 8 3 8 4 2 6 12 1 4 9 16 mat3 = mat1*mat2 = 1 8 27 64 4 18 48 4 9 32 3 16 16 2 12 36 1 8 27 64 תכנית דוגמא: עיבוד אותות סיפרתיים (DSP) כתכנית דוגמא ליכולת העיבוד המתמטי של הספרייה, נכתוב יישום לעיבוד אות בסיסי תוך שימוש במיכל valarray ובפעולות המוגדרות עליו. ראשית, נגדיר מספר פונקציות עזר שישמשו אותנו בתכנית: // valarray I/O istream & operator>>(istream& in, v) for(int i=0; i<v.size(); i++) in >> v[i]; return in; אופרטורי קלט/פלט עבור :valarray ostream & operator<<(ostream& out, const v) for(int i=0; i<v.size(); i++) out << v[i] << " "; return out << endl; כמו כן נגדיר פונקציה בשם plot להצגת valarry באופן גרפי. הרעיון: נגדיר מטריצה בגודל שורות ועמודות המייצגות את המסך, ונכניס את ערכי המערך הנתון למטריצה כך שיוצגו כגרף: void plot(const v)

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 6 const int W = 50; const int H = 20; valarray<valarray<char> > screen(h+1); valarray<char> row(' ', W); for(int i=0; i<=h; i++) screen[i] = row; // matri rep. screen // normalize the input array by shifting and scaling v_norm = v; T shift = v_norm.min(); if(shift < 0) v_norm -= shift; // if has negative values, shift to 0 double factor = ((double)h) / v_norm.ma(); v_norm *= factor; // scale to 0..H // set matri line in reverse order (bottom up) screen[h-abs(shift*factor)] = valarray<char>('_', W); for(int col=0; col<w; col++) int row = (int) v_norm[col]; screen[h-row][col] = ''; // display to screen cout << screen << endl; הסבר: לפונקציה מספר שלבים - איתחול מטריצה של תווים, >,valarray<valarray<char> המייצגת את המסך. נירמול מערך הקלט כך שערכיו יהיו בתחום המסך: מבוצעת ראשית פעולת הזזה (כך שלא יהיו ערכים שליליים): // normalize the input array by shifting and scaling v_norm = v; T shift = v_norm.min(); if(shift < 0) v_norm -= shift; // if has negative values, shift to 0 לאחר מכן מבוצע נירמול ע"י חלוקה ביחס שבין גובה המסך לערך המקסימלי: double factor = ((double)h) / v_norm.ma(); v_norm *= factor; // scale to 0..H בשלב הבא ממלאים את תוכן המטריצה עפ"י ערכי המערך בסדר הפוך - כך ששורת הערכים המינימליים תודפס אחרונה, בתחתית המסך: screen[h-abs(shift*factor)] = valarray<char>('_', W); for(int col=0; col<w; col++) int row = (int) v_norm[col]; screen[h-row][col] = ''; השורה הראשונה מציבה קו תחתי לאורך קו ה- 0. #include <iostream> #include <valarray> הגדרת אות והצגתו כעת נכתוב תכנית היוצרת אות מסוים ומציגה אותו ע"י קריאה ל- :plot()

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 7 #include <cmath> #include <ctime> using namespace std; void test1() const double PI = 3.14159265359; const int SIZE = 50; const double F1=5.0; const double dt = 0.01; valarray<double> t(size); // time ais valarray<double> sig(size); // sample size // frequencies // signal // init time ais for(int i=0; i<t.size(); i++) t[i] = i * dt; sig = sin(2*pi*f1*t); plot(sig); // create a sinus signal הפלט: _ void test1() const double PI = 3.14159265359; const int SIZE = 50; const double F1=5.0; const double dt = 0.01; valarray<double> t(size); valarray<double> sig(size); הסבר: הפונקציה ראשית מגדירה מספר קבועים ושני מערכי :valarray // sample size // frequencies // time ais // signal sig הוא מערך המייצג את האות על פני ציר הזמן, ו- t הוא מערך המייצג את נקודות הדגימה של האות על ציר הזמן. t מאותחל כך: for(int i=0; i<t.size(); i++) t[i] = i * dt; sig = sin(2*pi*f1*t); plot(sig); כלומר, ערכי t יהיו 0.03....0, 0,01, 0.02, בשלב הבא, מציבים לאות את הנוסחה Ft) sin(2 Π יש לשים לב שכאן בוצעה ההכפלה על כל מערך הזמנים t. לבסוף האות מוצג למסך ע"י: עיבוד האות נוסיף כעת יכולת עיבוד לאות: ראשית, נגדיר פונקציה המוסיפה "רעש לבן" לאות, כלומר, מוסיפה ערכים אקראיים לאות: void add_white_noise( v)

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 8 srand((unsigned)time(null)); // init random number generator seed for(int i=0; i<v.size(); i++) v[i] += (rand() % 256) / 128.0-1.0; הפונקציה עושה שימוש במחולל המספרים האקראיים של הספרייה התקנית של C בכדי להוסיף ערכים אקראיים בתחום [1+..1-] למערך שבקלט. כעת נכתוב פונקציה המבצעת עיבוד לאות, על מנת לשחזר את המידע המקורי, לפני הוספת הרעש: אנו נעשה שימוש בשיטת הממצע הנע Average) (Moving להגדרת מסנן מעביר נמוכים Filter) :(Low-Pass low_pass_filter(const in) out = in; const int N = 5; double avg = 0; for(int i=0; i<n; i++) avg += in[i]; avg /= N; for(i=n; i<in.size(); i++) out[i] = avg; avg = avg - in[i-n]/n + in[i]/n; return out; כפי שניתן לראות, הפונקציה low_pass_filter מסננת את הרעשים ע"י ממצע נע של 5 הקלטים האחרונים. נוסיף כעת לפונקצית הבדיקה שתי פעולות: הכנסת רעש לאות המקורי, ושיחזורו לאחר מכן ע"י הפונקציות שכתבנו: void test1() const double PI = 3.14159265359; const int SIZE = 50; const double F1=5.0; const double dt = 0.01; valarray<double> t(size); // time ais valarray<double> sig(size); // sample size // frequencies // signal valarray<double> sig_noise(size); // signal with noise valarray<double> sig_filtered(size); // filtered signal // init time ais for(int i=0; i<t.size(); i++) t[i] = i * dt; sig = sin(2*pi*f1*t); sig_noise = sig; add_white_noise(sig_noise); plot(sig); plot(sig_noise); // create a sinus signal // add white noise // filter sig_filtered = low_pass_filter(sig_noise); plot(sig_filtered);

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 9 פלט התכנית: האות המקורי: _ האות לאחר הוספת הרעש: האות המשוחזר: כפי שניתן לראות, צורת האות שוחזרה ברמה סבירה. תרגול הגדר/י template למחלקת Signal שתכיל את כל הפונקציות הנ"ל כחברים בה. יש להגדיר כנתוני המחלקה את וקטור נתוני האות - valarray כללי - וכן את מערך ציר הזמן valarray) של ממשיים ). נסה/י לייעל את פעולת פונקצית עיבוד האות low_pass_filter() כך שיהיו מינימום פעולות חילוק. כמו כן, הגדר/י את - N גודל "חלון" הממוצע - כפרמטר לפונקציה. הפעל/י את תכנית הבדיקה הבאה על המחלקה (מבצעת מה שביצעה התכנית הקודמת): #include "signal.h" void test2() const int SIZE = 50; const double F1=5.0; const double dt = 0.01; Signal<double> sig(size, dt, F1); Signal<double> sig_noise; Signal<double> sig_filtered; sig_noise = sig; sig_noise.add_white_noise(); sig.plot(50, 20); sig_noise.plot(50, 20); // sample size // frequency // signal // signal with noise // filtered signal // add white noise // filter sig_filtered = sig_noise.low_pass_filter(10); sig_filtered.plot(50,20);

שימוש בספרייה המתמטית של C++ ליישומים מדעיים 10 סיכום valarray הוא template של מיכל לתמיכה באריתמטיקה וקטורית. valarray תוכנן כמיכל אופטימלי לביצוע פעולות אלו, ולכן הוא בחירה טבעית ליישומים מדעיים כגון: עיבוד אות, פעולות על מטריצות, חישובי הסתברות ועוד. התמיכה המובנית של valarray בפעולות הוקטוריות מספקת תחליף לשימוש בשפות עזר כמו,Matlab ומהווה יתרון בכך שהיא מובנית בשפת הפיתוח. כל הזכויות שמורות מאיר סלע מרכז ההדרכה 2000