מייפל/השימוש ב-solve ובדומיו
אם לא צויין אחרת, אותיות משמען נעלמים אשר לא הושמו בהם ערכים מספריים.
solve היא פקודה מתוחכמת למציאת פתרונות של משואות מסוגים שונים. כאשר לא קיים פתרון, לא יוצג דבר.
פתרון משוואה בנעלם יחיד עם solve
[עריכה]solve מחזיר תמיד את הפתרון הראשון שהוא מוצא, אלא אם כן מדובר בפולינום.
פתרון ישיר
[עריכה]solve(x^2-6*x+2=0);
- solve יודעת במקרה זה כי יש לפתור עבור הנעלם x. שימו לב: אם x מכיל ערך מספרי הפקודה לא תחזיר דבר. על x להיות משתנה.
- ניתן לוותר על הסיומת "=0" מאחר וזו ברירת המחדל.
- הערך שמחזירה solve הוא התשובה. ניתן לבצע השמה באמצעות
sol:=solve(...)
- אם יש יותר מפתרון אחד, sol יהיה וקטור אשר ניתן יהיה לגשת לאיבריו באמצעות sol[1] וכדומה.
- אם שכחתם לבצע השמה, ניתן לעשות זאת כעת באמצעות
sol:=%;
- (בגרסאות ישנות יש להשתמש ב-'' במקום ב-%).
פתרון עם פרמטר
[עריכה]solve(x^2-6*x+c=0,x);
- כעת, כאשר יש יותר משני נעלמים, יש לציין עבור איזה נעלם לפתור.
פתרון מערכת משוואות עם solve
[עריכה]נניח ואנו מעוניינים בנקודות החיתוך בין ישר לפרבולה.
במקרה זה יש להעביר ל-solve מערכת משוואות ומערכת הנעלמים עבורם יש לפתור, אשר יופרדו בפסיקים (,) ויוגבלו בסוגריים מסולסלים. או לחילופין:
eqs:={y=2*x-4, y=-3*x^2+6}; vars:={x,y}; solve(eqs,vars);
קיבלנו פיתרון סימבולי. RootOf הינו ייצוג מיוחד אשר מייפל משתמש בו על מנת לייצג מספרים אלגבריים - באמצעות שורשי פולינום. על מנת לקבל את הפתרון הנומרי נבצע:
evalf(%);
- (באותה מידה יכולנו להשתמש ב-fsolve(eqs, vars))
שימו לב כי זוהי הצגת תשובה בלבד ולא השמה. המשתנים x,y לא מכילים דבר. על מנת לבצע השמה של התוצאה האחרונה, יש לבצע:
assign(%); x;y;
-.954823758
שימו לב כי ה-% מתייחס בשתי הפקודות האחרונות לתוצאות שונות: תמיד לתוצאה האחרונה.
פתרון נומרי עם evalf
[עריכה]השימוש הישר ב-evalf הוא כמו במחשבון כיס:
evalf(log(5));
- היינו מקבלים אותה תוצאה על ידי הרצת log(5.0).
בברירת המחדל, מייפל מציגה חישובים נומריים בדיוק של עד 10 ספרות:
evalf(solve(x=cot(x)));
ניתן להעביר ל-evalf את הדיוק הרצוי:
evalf(solve(x=cot(x)),50);
- (באותה מידה יכולנו לבצע Digits:=50 לפני ביצוע הפקודה. העברת דיוק ל-evalf לא משנה את Digits אלא משפיעה על אותו חישוב בלבד.)
פתרון נומרי עם fsolve
[עריכה]במקום להשתמש בפקודה המקוננת evalf(solve(expression)) ניתן להציב את expression ישירות לתוך fsolve, אך יש לכך מחיר: fsolve יחזיר רק את הפתרונות הממשיים, במידה וקיימים כאלו. בדומה ל-solve, יוחזר רק הפתרון הראשון שימצא (אלא אם כן מדובר בפולינום). אם לא נמצא פתרון אך מייפל סבורה כי בכל זאת קיים פתרון, fsolve תחזיר את הביטוי שהועבר אליה.
fsolve(x=cot(x));
נגדיר תחום עבור הפתרון:
fsolve(x=cot(x),x=0..10);
ניתן בכל זאת לבקש מ-fsolve פתרונות מרוכבים עבור פולינומים:
fsolve(x^2+1=0,x,complex)
אם מעוניינים רק במספר מסוים של פתרונות, יש להשתמש בפרמטר maxsols כך:
fsolve(x^8=1,complex,maxsols=2)
מערכת משוואות
[עריכה]fsolve({ln(3*x)+tan(y)=3,x+y=7}, {x, y});
הפרק הקודם: עבודה עם נעלמים |
השימוש ב-solve ובדומיו | הפרק הבא: השימוש ב-simplify ובדומיו |