מייפל/השימוש ב-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(%);

{x = 1.522588121, y = -.954823758}


(באותה מידה יכולנו להשתמש ב-fsolve(eqs, vars))

שימו לב כי זוהי הצגת תשובה בלבד ולא השמה. המשתנים x,y לא מכילים דבר. על מנת לבצע השמה של התוצאה האחרונה, יש לבצע:

assign(%); x;y;

1.522588121
-.954823758


שימו לב כי ה-% מתייחס בשתי הפקודות האחרונות לתוצאות שונות: תמיד לתוצאה האחרונה.

פתרון נומרי עם evalf

עריכה

השימוש הישר ב-evalf הוא כמו במחשבון כיס:

evalf(log(5));

1.609437912


היינו מקבלים אותה תוצאה על ידי הרצת log(5.0).

בברירת המחדל, מייפל מציגה חישובים נומריים בדיוק של עד 10 ספרות:

evalf(solve(x=cot(x)));

−.8603335890


ניתן להעביר ל-evalf את הדיוק הרצוי:

evalf(solve(x=cot(x)),50);

−.86033358901937976248389342413766233341188436323765


(באותה מידה יכולנו לבצע Digits:=50 לפני ביצוע הפקודה. העברת דיוק ל-evalf לא משנה את Digits אלא משפיעה על אותו חישוב בלבד.)

פתרון נומרי עם fsolve

עריכה

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

fsolve(x=cot(x));

−.8603335890


נגדיר תחום עבור הפתרון:

fsolve(x=cot(x),x=0..10);

6.437298179


ניתן בכל זאת לבקש מ-fsolve פתרונות מרוכבים עבור פולינומים:

fsolve(x^2+1=0,x,complex)

-1.000000000I,1.I


אם מעוניינים רק במספר מסוים של פתרונות, יש להשתמש בפרמטר maxsols כך:

fsolve(x^8=1,complex,maxsols=2)

 


מערכת משוואות

עריכה
fsolve({ln(3*x)+tan(y)=3,x+y=7}, {x, y});

 



הפרק הקודם:
עבודה עם נעלמים
השימוש ב-solve ובדומיו הפרק הבא:
השימוש ב-simplify ובדומיו