תוכן עניינים:
- שלב 1: הבנת האלגוריתם חלק 1: האינטגרל המובהק והשימוש בו
- שלב 2: הבנת האלגוריתם חלק 2: קירוב מספרי
- שלב 3: הבנת האלגוריתם חלק 3: חוק נקודת האמצע
- שלב 4: יצירת התוכנית חלק 1: הורדת מהדר/עורך פייתון
- שלב 5: יצירת התוכנית חלק 2: ייבוא פונקציות והגדרת משתנים
- שלב 6: יצירת התוכנית חלק 3: יצירת פונקציה לשילוב
- שלב 7: יצירת התוכנית חלק 4: הצגת התשובה
- שלב 8: הפעלת התוכנית חלק 1: הפעלת התוכנית כפי שהיא
- שלב 9: הפעלת התוכנית חלק 2: שילוב פונקציות מתמטיות אחרות
- שלב 10: הפעלת התוכנית חלק 3: הרחבת התוכנית
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-23 14:46
זוהי הדרכה כיצד ליצור ולהריץ תוכנית שתעריך אינטגרלים מוגדרים באמצעות אלגוריתם אינטגרציה מספרי. חילקתי את השלבים ל -3 חלקים: הבנת האלגוריתם שישמש להכנת התוכנית, קידוד התוכנית באמצעות שפת התכנות של פייתון והפעלת התוכנית. הדרכה זו מיועדת למי שאולי יצטרך ליצור מחשבון במהירות כדי להעריך אינטגרלים מוגדרים, או שאולי זקוק לאלגוריתם לשימוש בתוכנית בקנה מידה גדול יותר. צפוי ידע בסיסי בחשבון, אך נבדק מידע מתמטי רלוונטי. ידע בתכנות אינו צפוי, אך שימושי מכיוון שאני מתאר רק בקצרה כיצד התכנות פועל בפועל.
מה שאתה תצטרך:
מחשב אישי עם גישה לאינטרנט
שלב 1: הבנת האלגוריתם חלק 1: האינטגרל המובהק והשימוש בו
אני מניח שאתה יודע קצת מהו אינטגרל בהקשר של חשבון בסיסי. אינטגרלים חשובים מכיוון שהם מאפשרים לך לסכם מערך ערכים מוכפל באורך אינסופי; זה שימושי בתחומים רבים של כספים, תורת המספרים, פיזיקה, כימיה, כמו גם בתחומים רבים אחרים. אולם תוכנית זו תאפשר לך רק לחשב את השטח שמתחת לעקומה לפרק זמן סופי, או במילים אחרות, היא אינה מעריכה אנטי נגזרות-לשם כך יש צורך באלגוריתם חזק הרבה יותר. אלגוריתם זה שימושי אם עליך להעריך אינטגרל מוגדר בתוכנית גדולה יותר המצוינת למשהו אחר, או אם ברצונך לבדוק את תשובתך לגבי אינטגרלים מוגדרים שנעשו בעבודת יד.
אינטגרל מובהק בסיסי מייצג את השטח מתחת לעקומה המוגדרת על ידי פונקציה למשל f (x). לקבלת אינטגרל מובהק, אנו מחפשים את השטח שבין שתי נקודות (מסומנות a ו- b בהתאמה). בתמונה אזור הטורקיז הוא האזור אליו אני מתכוון, והמשוואה לקביעתו מוצגת גם באזור זה. הפונקציה המוצגת בתמונה היא שרירותית.
שלב 2: הבנת האלגוריתם חלק 2: קירוב מספרי
מחשב זקוק לקבוצת הוראות רחבה לחישוב שטח זה מתחת לפונקציה שרירותית שתתאים לכל פונקציה, ולכן שיטות אנליטיות שאולי אתה מכיר אינן מועילות מכיוון שהן מיוחדות מדי. שיטה אחת לחישוב אינטגרלים בערך, שמחשב יכול להתמודד איתה, מתבצעת על ידי מילוי שטח העניין בכמות המוגדרת על ידי משתמש של מלבנים ברוחב שווה וגובה משתנה ואז מסכמים את כל שטחי המלבן. המאפיינים הנוקשים של מלבנים ישאירו חלק מהשטח הכולל ללא פגע, ומכאן מדוע זה נחשב לקירוב; אולם ככל שתוכלו לדחוס יותר מלבנים בין הגבולות (a ו- b) כך ההתקרבות תהיה מדויקת יותר מכיוון שהאזורים הבלתי נגעים הופכים דלילים יותר. מכיוון שמחשב יבצע את המשימה, תוכל להגדיר את מספר המלבנים באזור הרצוי למספר גדול מאוד, מה שהופך את הקירוב למדויק ביותר. בתמונה התומכת, דמיינו שכל מלבן באזור המיועד הוא ברוחב שווה. עשיתי כמיטב יכולתי כדי להפוך אותם לרוחב שווה ב- Microsoft Paint, אך לא עשיתי את העבודה הטובה ביותר.
שלב 3: הבנת האלגוריתם חלק 3: חוק נקודת האמצע
כלל זה מציין כיצד יוצרים ומשתמשים המלבנים בקירוב. כל מלבן מתוך מלבני "N" חייב להיות ברוחב שווה, Δx, אך כל מלבן ת 'אינו יכול להיות זהה לחלוטין: הגורם המשתנה הוא הגובה המשתנה בהתאם לפונקציה המוערכת בנקודה מסוימת. כלל נקודת האמצע מקבל את שמו מכיוון שאתה מעריך את הגובה של כל מלבן כ f (x_n), כאשר "x_n" הוא נקודת המרכז המתאימה של כל מלבן, כפי שמוצג משמאל או מימין של המלבן. שימוש בנקודת האמצע הוא כמו יישום ממוצע שיגרום לקירוב להיות מדויק יותר מאשר אם היית משתמש בימין או שמאל. התמונה התומכת בשלב זה מסכמת את אופן הגדרת כלל נקודת האמצע מבחינה מתמטית.
שלב 4: יצירת התוכנית חלק 1: הורדת מהדר/עורך פייתון
כעת, לאחר שהבנת את האלגוריתם שצריך ליישם, עליך להביא מחשב לביצוע החישוב עבורך. השלב הראשון לאמר למחשב מה לעשות הוא קבלת הכלים לכך. ניתן לקודד אלגוריתם זה בכל שפה; לשם הפשטות, תוכנית זו תהיה מקודדת בשפת פייתון. כדי לפקוד על המחשב שלך לבצע פעולות עם Python, תזדקק לעורך המקבל הוראות הכתובות בשפה זו ולאחר מכן יתאספו לשפת מכונה שהמחשב שלך יכול להבין כדי שיוכל לבצע את המשימות שאתה אומר לו לבצע. בימינו אלה, עורך ומדרדר משולבים בדרך כלל, אולם לא תמיד זה המצב. אתה יכול להשתמש בכל עורך/מהדר שנוח לך, אבל אני אראה לך כיצד להשיג את המועדף האישי שלי לפייתון: חופה. אם כבר יש לך עורך/מהדר, תוכל לדלג על שלבים אלה.
- עבור אל
- לחץ על הורד חופה
-
לחץ על כפתור ההורדה המתאים למערכת ההפעלה שלך
ההורדה תתחיל אוטומטית
- עקוב אחר הוראות ההחדרה לאחר הפעלת קובץ הביצוע
- הפעל את התוכנית
- לחץ על "עורך" מהתפריט הראשי של התוכנית
- לחץ על "צור קובץ חדש" במרכז המסך
מנקודה זו אתה אמור לראות חלון לבן ריק עם סמן הדומה למסמך בסיסי לעיבוד תמלילים. כעת אתה מוכן להתחיל לקודד את אלגוריתם האינטגרציה המספרית לפתרון אינטגרלים מוגדרים. שלבי ההמשך יכללו קטע קוד שתעתיק והסבר על מה אותו קטע עושה לתוכנית כולה.
שלב 5: יצירת התוכנית חלק 2: ייבוא פונקציות והגדרת משתנים
העתיקו את הקוד שבתמונה.
לכל תוכנית שתמצא את עצמך מקודדת, יהיו משתנים. משתנה הוא שם שניתן לערך שיופעל ושהוא יכול להשתנות. ברוב שפות התכנות (אם לא בכולם) עליך לאתחל משתנה לפני שהתוכנית תוכל לבצע בו שינויים. במקרה של תוכנית זו שמתי את המשתנים "N", "a" ו- "b". ערכים אלה מייצגים את מספר האיטרציות (מספר מלבנים AKA), הגבול התחתון והגבול העליון בהתאמה. אתה יכול לתת שם לכל מה שאתה רוצה, אבל כדי להתאים את הנוסחאות המופיעות ב"הבנת האלגוריתם חלק 3: חוק נקודת האמצע ", עדיף להשאיר אותן בעינן. שים לב שהם אינם מוגדרים רק לערך ספציפי. הסיבה לכך היא שהם מקבלים קלט שכאשר התוכנית מופעלת, המשתמש בתוכנית יכול להגדיר מה יהיה הערך. הטקסט במרכאות, לאחר פקודת הקלט, מופיע כאשר אתה מפעיל את התוכנית ואומר לך איזה סוג ערך להקליד. תוכל גם לשים לב ש- "int" ו- "float" משמשים לפני ייעודי הקלט. מונחים אלה אומרים למחשב איזה סוג משתנה יהיה ערך זה. "Int" הוא מספר שלם, ו"צוף "הוא ערך נקודה צפה (כלומר עשרוני). צריך להיות ברור מדוע אלה מוגדרים ככאלה.
כל טקסט המופיע לאחר "#" הוא הערה המאפשרת למתכנת לעקוב אחר הקוד בצורה הומניסטית; רשמתי הערות מסוימות בקוד שלי שתעתיק, אך אל תהסס להוסיף הערות שעוזרות לך במיוחד. התוכנית לא תקרא שום דבר עם "#" לפניו כפקודה.
החלק של הקוד שכתוב "מיבוא מתמטי *" אומר לתוכנית לייבא מערך של פונקציות מתמטיות שניתן להשתמש בהן מבלי שתצטרך לתכנת אותן בעצמך. "*" פירושו רק "הכל". קרא את חלק הקוד הזה כ: מספריית המתמטיקה ייבא את כל הפונקציות. זה מאפשר לך להשתמש בפונקציות מתמטיות כמו סינוס, קוסינוס, יומן, אקספ, וכו '. פונקציה זו יכולה להיות משולבת מתמטית בתוך הקוד.
שלב 6: יצירת התוכנית חלק 3: יצירת פונקציה לשילוב
העתיקו את הקוד שבתמונה מתחת לקוד הקודם.
אזהרה: חלק זה צפוף, ואני רוצה להבהיר כמה דברים שעלולים לבלבל. כשמדברים על תכנות, המילה "פונקציה" מופיעה הרבה. המונח הזה גם צץ הרבה כשאתה מדבר על מתמטיקה. לכן, מנקודה זו ואילך, כשאני מדבר על פונקציה במובן התכנותי, אכתוב "פונקציית פייתון", וכשאני מדבר על הפונקציה המתמטית, אגיד "פונקציה מתמטית". בשלב מסוים נשתמש בפונקציית פייתון כייצוג לפונקציה המתמטית המדוברת.
קטע הקוד הבא הוא לב התוכנית. כאן מוגדרת פונקציה של פייתון המבצעת את האלגוריתם של אינטגרציה מספרית באמצעות כלל נקודת האמצע. "def integrate (N, a, b)" נקרא כך: הגדר פונקציה בשם "Integrate" המקבלת את המשתנים "N", "a" ו- "b" ומחזירה את השטח שמתחת לעקומה (הפונקציה המתמטית) המוגדרת גם בתוך הפונקציה "אינטגרציה" של פייתון. אתה יכול לקרוא לפונקציית Python זו כל דבר כשאתה עושה את הקידוד, אבל הגיוני לקרוא לזה אינטגרציה מכיוון שזו פונקציה שאכן משלבת פונקציה מתמטית.
בשלב זה כדאי להעיר כיצד Python מפריד בלוקים של קוד. גוש קוד הוא קטע שלם המבצע משימה מסוימת. לשפות תכנות שונות יהיו דרכים ייעודיות להבחין בין "בלוקים" אלה. עבור פייתון, בלוק נבדל על ידי חריצים: לכל קטע המבצע משימות יש כניסה משלו, ויכולים להיות בלוקים עם כניעה בתוך בלוקים אחרים עם כניסה. זה מייצג משימות בתוך משימות, ובעצם אומר את הסדר שבו צריך לבצע את הקוד. במקרה של פונקציית ה- Python המוגדרת "Integrate", כל מה שבתוך הפונקציה הזו מכונס בלוק אחד ובכך מבדיל בין המשימות שיבוצעו בתוך פונקציה זו. ישנם חלקים מכוונים בתוך פונקציית פייתון זו המבצעים גם משימות משלהם. זה הולך כדלקמן: פקודה (משימה) מוצגת, נקודתיים עוקבת אחר הפקודה, ומה שהפקודה עושה מוטבע מתחת.
מיד לאחר הגדרת הפונקציה "לשלב" פייתון, תגדיר פונקציית פייתון נוספת הנקראת f (x). זה מייצג את הפונקציה המתמטית שתשלב. עבור כל פונקציה מתמטית שונה שברצונך לשלב, יהיה עליך לפנות לשורת התוכנית הזו כדי לשנות אותה (בניגוד למשתנים המוגדרים בעת הפעלת התוכנית). לכל פונקציית פייתון יהיה ערך החזרה, זה מה שהפונקציה מחזירה כשאתה זורק לה ערך. במקרה זה הערך שנזרק הוא "x", ומונח "x" זה יקח את הערך של מה שאתה זורק אותו-זהו ערך זמני.
לאחר מכן, for-loop משמש כסיכום המוגדר בנוסחאות בסעיף "הבנת האלגוריתם" במדריך זה. סיכום זה דורש עוד כמה משתנים, שאחד מהם ישמש כערך ההחזרה עבור כל פונקציית ה- "Integrate" Python. לפני הלולאה, הגדרתי את המשתנים האלה כ"ערך "ו"ערך 2". משימת הלולאה היא לחזור על טווח ערכים עבור משתנה ייעודי, שניתן להגדיר אותו בנוחות בתוך הפקודה לולאה; במקרה זה, משתנה זה הוא "n". הטווח שעבורו מתרחשת האיטרציה הוא 1 עד N+1. עליך לשים לב כי הסיכום המוגדר בנוסחאות האמורות נע בין 1 ל- N. אנו מגדירים אותו כך מכיוון ששפת הפיתון סופרת כל ערך חוזר ומתחיל מאפס, כך שבעצם עלינו לשנות את טווח הערכים כך שיתאים לרצוננו. טווח. לאחר מכן הלולאה מאפשרת סיכום של כל גובה המלבן יחד ושומרת ערך זה במשתנה שאותו כיניתי "ערך". זה נראה בחתיכת הקוד שמופיעה כ: ערך += f (a +((n- (1/2))*((b-a)/N))).
משם, החלק הבא של הקוד מנצל את המשתנה שנקרא "value2", ואז הוא מוקצה לסכום של כל הגבהים של כל מלבן כפול הרוחב הסטנדרטי של כל מלבן-זו התשובה הסופית שאנו רוצים המוצג על ידי התוכנית שלנו, ולכן הוא ערך ההחזרה של הפונקציה "אינטגרציה" של פייתון.
שלב 7: יצירת התוכנית חלק 4: הצגת התשובה
העתיקו את הקוד שבתמונה מתחת לקוד הקודם.
כעת, לאחר שניתן להשיג את התשובה באמצעות הפונקציה "אינטגרציה" של פייתון, אנו רוצים להיות מסוגלים להציג אותה. זהו רק עניין של הכנסת הערכים שהוזנו על ידי המשתמש ("N", "a" ו- "b") לפונקציית "אינטגרציה" של פייתון והדפסה על המסך. פקודה זו מוצגת בשורה 21, והיא בעצם כל מה שאתה צריך לעשות כדי לסיים את השלב הזה. הקוד בשורות 19 ו -20 נמצא שם רק כדי "לשפר" את הפלט של התוכנית כולה. "הדפס (" ………………………. ")" מפריד בין קטע הקלט של התוכנית לבין קטע הפלט, ו"הדפס ("הנה התשובה שלך:") "הוא רק ייעוד שהתשובה להדפיס אחרי שורת הטקסט.
שלב 8: הפעלת התוכנית חלק 1: הפעלת התוכנית כפי שהיא
אם אינך משתמש ב- Canopy, סביר להניח שבכלל אינך צריך לבצע את השלב הזה והפעלת התוכנית עשויה לדרוש הליכים שונים. ב- Canopy, לפני שתוכל להפעיל את התוכנית, יהיה עליך לשמור אותה. סוג הקובץ של תוכנית Python הוא קובץ.py-הוא נשמר באופן אוטומטי כך. בחר היכן אתה רוצה שהקובץ יישמר, ואז תוכל להריץ את התוכנית.
הפעלת התוכנית:
- לחץ על הכפתור הירוק שנראה כמו "כפתור הפעלה" הממוקם בסרגל הכלים ממש מעל למקום בו מופיע שם הקובץ שלך (עיין בתמונה).
- לאחר מכן התוכנית תפעל במסך התחתון של העורך המכונה סביבת ניתוח הנתונים של Canopy. בהנחה שהעתקת את ההנחיות כפי שכתבתי אותן, אתה אמור לראות בתחתית סביבת ניתוח הנתונים של חופה את ההנחיה: "הזן כמה פעמים אתה רוצה לסכם (יותר פעמים = מדויק יותר):." (עיין בתמונה)
- הזן ערך לכמה פעמים אתה רוצה לבצע את האיטרציה כלומר 10000 (כמה מלבנים אתה רוצה לדחוף לאזור שלך) ולאחר מכן הקש enter.
- יופיעו הנחיות נוספות עם הצהרות שאמורות להיות הנחיות הקלט המוכרות שקידדת לתוכנית בשלב 5. מלא אותן כהלכה בדיוק כמו במספר 3 לעיל.
- יש להעריך את האינטגרל, ולהופיע תוצאה.
אם קידדת את התוכנית כפי שמוצג בתמונות הקודמות, שילבת זה עתה f (x) = x^2 על פני כמה גבולות. האינטגרל של x^2 הוא קל להערכה ביד, לכן עליך לבדוק ולוודא שהתוכנית נתנה תשובה קרובה מאוד לערך האנליטי הנכון שנקבע ביד. כשאני מריץ את התוכנית עם הערכים N = 10000, a = 0 ו- b = 10, אני מקבל את התשובה 333.33333249999964. התשובה האנליטית הנכונה היא 333.333. זה מדויק ומהיר להפליא. בעצם סחטת 10, 000 מלבנים בין 0 ל -10 על ציר ה- x והשתמשת בהם כדי לקירב את השטח שמתחת לעקומה x^2!
שלב 9: הפעלת התוכנית חלק 2: שילוב פונקציות מתמטיות אחרות
בשלב הקודם, אם עקבת נאמנה, שילבת f (x) = x^2. זו לא הפונקציה המתמטית היחידה שתוכנית זו יכולה לשלב. כזכור משלב 5 ייבאת את מערך ספריית המתמטיקה של פונקציות Python לתוכנית. זה מאפשר לך להשתמש בפונקציות מתמטיות מסובכות יותר שניתן לשלב. בואו לתת לזריקה אחת. כמובן שאתה יכול להשתמש בכל פונקציה שתרצה, אך אני אדגים עוד יותר את דיוק קוד זה על ידי שילוב פונקציה מתמטית מסוימת המניבה ערך ידוע כאשר היא משולבת בטווח מסוים. פונקציה זו היא f (x) = Sin [x]. פונקציה מתמטית זו מוצגת בתמונה הנלווית הראשונה, המתואמת בין 0 ל -2π, ואזור העניין מוצל בצבע טורקיז. יש כמות שווה של שטח חיובי שכן יש אזור שלילי במרווח זה, כך שאם מוסיפים את השטח הכולל, אתה אמור לקבל אפס. בוא נראה אם זה באמת קורה:
הכנסת הפונקציה המתמטית f (x) = Sin [x] לתוכנית:
- לפני הפעלת התוכנית שוב, תחת ההערה "#הקלד את הפונקציה שלך לאחר החזרה", הקלד: sin (x) היכן x ** 2 נמצא כרגע. (עיין בתמונה).
- הפעל את התוכנית על ידי לחיצה על כפתור ההפעלה הירוק שוב.
- הקלד 10000 עבור ערך N (כמה פעמים אתה רוצה לסכם).
- הכנס את "0" לגבול התחתון.
- הכנס 6.2832 לגבול העליון (כ -2π).
- תראה איזה ערך אתה מקבל.
כשעשיתי את זה, בסופו של דבר קיבלתי ערך של 1.079e-10: זה שווה ל.0000000001079, שזה ממש קרוב לאפס, כך שזה נראה מדויק, ומראה שהאלגוריתם מטפל כראוי בשטח שלילי.
שלב 10: הפעלת התוכנית חלק 3: הרחבת התוכנית
בשלב זה סיימת: יש לך אלגוריתם אינטגרלי מוגדר עובד המקודד ב- Python הפועל בצורה חלקה ונותן תשובות מדויקות מאוד. עם זאת, ניתן לשפר תוכנית זו. אני לא מתכנת, ויש לי ניסיון מינימלי עם Python. למעשה, נאלצתי להתרענן על השימוש ב- Python להשלמת הדרכה זו, אך זה אמור לתת לך ביטחון שפייתון היא שפה כה קלה ללמידה. הנקודה שלי היא שאתה יכול להרחיב את התוכנית הזו על ידי הפיכתה ליעילה יותר, אולי ליישם קצת GUI ולהפוך אותה לידידותית יותר למשתמש.
דעתי לגבי הרחבת התוכנית:
- הטמעה של ממשק משתמש גרפי המאפשר לך להריץ את התוכנית ללא שימוש בסביבת ניתוח הנתונים האינטראקטיבית של Canopy
- הפוך את זה כך שהפונקציה המתמטית לשילוב לא חייבת להיות קלט בתוך התוכנית, אך ניתן להזין אותה לאחר הפעלת התוכנית (בתחילה ניסיתי לעשות זאת, אך לא הצלחתי להבין זאת).
- הגדר פונקציית "אינטגרציה" של פייתון כך שהיא לוקחת את הפונקציה f (x) כפי שמוגדרת שהפונקציה f (x) מוגדרת בתוכה.
אלו הן רק דוגמאות לתחומי שיפור, אך אני מבטיח שיש הרבה תחומים אחרים שניתן לשפר אותם. אז אני משאיר את השלב הזה כדוגמה לליקויים שיש לתוכנית הזאת ואולי תרגיל לכל מי שרוצה לשפר את התוכנית עוד יותר.
מוּמלָץ:
תצוגה אלפא-מספרית גדולה: 7 שלבים (עם תמונות)
תצוגה אלפא-מספרית גדולה: ישנן מספר אפשרויות אם אתה צריך תצוגה שניתן לראות ממרבית החדר, תצוגה גדולה. אתה יכול להכין אחד כמו 'הזמן בריבוע' או 'נוריות על זכוכית' אבל זה לוקח בערך 40 שעות של עבודה מייגעת. אז הנה קל ליצור תצוגה גדולה. ה
תוכנית הצפנת קיסר בפייתון: 4 שלבים
תוכנית צופן קיסר בפייתון: צופן קיסר הוא צופן עתיק ונפוץ, שקל להצפין ולפענחו. זה עובד על ידי העברת האותיות של האלף בית ליצירת אלפבית חדש לגמרי (ABCDEF יכול לעבור מעל 4 אותיות ויהפוך ל- EFGHIJ). קיסר ג
כיצד ליצור לולאת ויתור בפייתון: 9 שלבים
כיצד ליצור לולאת While Python: ישנם רגעים בתכנות שבהם עליך לחזור על סט שלבים על מנת לפתור בעיה. לולאת זמן מאפשרת לך לעבור בין קטע קוד מבלי לכתוב קוד חוזר. בעת התכנות, כותבים אותו קוד שוב ושוב
כיצד לחשב את שטח הטרפז בפייתון ?: 5 שלבים
כיצד לחשב את שטח הטרפז בפייתון ?: בעזרת המדריך הזה תוכל להכיר את השטח של כל טרפז נתון בעזרת תוכנית בפייתון
כיצד להכין תוכנית צ'אט פשוטה ב- Visual Basic באמצעות בקרת Microsoft Winsock: 7 שלבים
כיצד להכין תוכנית צ'אט פשוטה ב- Visual Basic באמצעות בקרת Microsoft Winsock: בהדרכה זו אראה לך כיצד להכין תוכנית צ'אט פשוטה ב- Visual Basic. אני אעבור על כל מה שהקוד עושה כדי שתלמד תוך כדי ביצועו, ובסוף אראה לך כיצד להשתמש בו