מייפל/השימוש ב-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 ובדומיו |