ועוד שאלה קטנה במאטלאב:

ועוד שאלה קטנה במאטלאב:

נניח מכפלה של מטריצה ריבועית2X2 בוקטור עם נעלמים c1 c2, ומכפלתם שווה לוקטור אחר עם איברים מאופסים,כפי שרואים באיור(a,b,c,d ידועים ונתונים). איך במאטלאב אני מוצא את c1 ו c2 ? בתודה מראש.
 
ואם כבר,משהו קטן(נראה לי) על הדרך,

אם אפשר בבקשה: התוכנה מציגה לי כל פעם ביטויים עם פאי(3.14...) כתשובה חישובית במקום להציב 3.14.... ולתת תשובה קצת פשוטה יותר..אפשר לגרום לה להציג את זה באמת כמו שאני רוצה,ז"א לא עם פאי אלא עם הערך המספרי שלו(תשובה פשוטה יותר ז"א,לא ביטוי מסובך עם פאי)? ושוב,בתודה מראש..
 

אחמס1

New member
linsolve

במקרה שלך זה די טריביאלי - אם הדטרמיננט לא שווה אפס אז הפתרון הוא c1=c2=0. אם באגף ימין יש וקטור כלשהו V, והמטריצה היא A, אז פתרון המערכת Ax=V נתון ע"י:
x = linsolve(A,V)​
בקשר לשאלה השנייה, לצערי אני לא מבין בעבודה סימבולית במאטלב, לצרכים האלו אני משתמש במתמטיקה.
 
הוא טוען שיש שגיאה../images/Emo4.gif

>> A=[1 2; 3 4] A = 1 2 3 4 >> V=[0 0]; >> x=linsolve(A,V) ??? Error using ==> linsolve Matrix dimensions must agree.​
תודה שוב,על כל פנים...
 

אחמס1

New member
טעית בהגדרת V

אתה רוצה וקטור עמודה, אבל הגדרת וקטור שורה. השתמש ב-; בין שני האיברים ב-V.
 
טוב,התוכנה מייאשת ולכן אשאל שוב:

אנ יודע שללא התוכנה,יכולתי למצואאת המקדמים ככה: ac1+bc2=0 cc1+dc2=0 מהנ"ל ניתן להגיע ליחס בין המקדמים(משוואה אחת מיותרת למעשה,לרוב) ואז,לאור אורתונורמליות הוקטור (c1 c2), ניתן לומר ש: c1^2+c^2=1 ואז להציב את c1 או c2 כפונקציה של השני ולחשב אותם. אם אדע לחשב אותם-זהו,סיימתי לעשות מה שרציתי בתוכנה ה@%!#$!@$ הזו,בשעה טובה. אם כן...אם אפשר, אני רוצה לדעת איך אני מעביר בדיוק את מה שתיארתי כאן למעלה לתוכנה. אם,לחילופין יש פונקציית פלא שישר מחשבת לי את c1 ו c2 - גם טוב. ושוב,תודה....(הפונקציה לעיל לא עזרה,אחרי הכל)
 

אחמס1

New member
מאטלב מייאשת או התוכנה שאתה מנסה לכתוב?

בכל מקרה סטיב, אתה לא ממש מובן במה שאתה מנסה לעשות אז אני יכול רק לנחש איך לעזור לך. עכשיו, אני מדבר כל הזמן כאילו a,b,c... הם מספרים ולא משתנים סימבוליים (syms), כי איתם אני בכלל לא יודע מה קורה במאטלב. ייתכן ומה שאני אומר יעבוד ויתכן שלא. שים לב שבעבור מטריצה כללית כזו כמו שהבאת, הפתרון הוא הטריביאלי בלבד. כך שאתה חייב להוסיף את הדרישה שהדטרמיננט שלה יתאפס. אם זה מספרים באמת, פשוט תבדוק שזה מתאפס, או שבמקום לתת ל-d להיות חפשי תכריח אותו להיות bc/a. במקרה הזה כמו שאמרת אפשר למצוא תנאי c1=(-b/a)c2 ועם תנאי האורתונורמליות אתה מוצא את שניהם בקלות.
 
מאטלאב מייאשת-

כי על הנייר,הדבר הזה לא לוקח יותר מ 5 דקות....מלא פעם פתרתי ככה כמו שכתבתי(למשל לשם הגעה לקומב' לינארית של פונק' גל בקוונטים), ועם התוכנה המחורבנת הזו כל הערב ישתי וניסיתי כמה דרכים,ולא הלך...... על כל פנים,לא ממש הבנתי אותך ואשמח אם תסביר לי איך לעשות את מה שביקשתי בתוכנה(כי אם בנייר ,בבוחן ובמבחן זה הולך,למה שבתוכנה זה לא??). אם אין לך מושג על מה אני מדבר וכיו"ב,עזוב,חפיף, העיקר הכוונה.(תודה כאמור)..
 

prefect

New member
חוק פשוט בעבודה עם מחשבים:

garbage in -> garbage out במקרה הזה, אתה מנסה לגרום למטלב לפתור בעיה שאין שום צורך לפתור אותה, התפרון כבר מול עיניך: אם הדטרמיננטה של המטריצה שונה מאפס, הפתרון הוא טריוויאלי בלבד, ואם היא לא- יש תלות לינארית בין העמודות שלה, כלומר a/b=c/d. מכאן, עבור
c=K[b;-a]​
השיוויון יתקיים, כאשר K - מספר כלשהו. לא צריך פונקציות פלא, רק להבין מה אתה רוצה מהתוכנה המסכנה מאותה סיבה, במקרה היותר כללי, במטריצה בגודל n יהיה פתרון לא טריוויאלי לכזה דבר רק במקרה שהדרגה של המטריצה קטנה מ-n, והפתרון יהיה מרחב לינארי במימד n פחות הדרגה של המטריצה. על מנת למצוא את הבסיס של המרחב הזה בצורה חישובית, ניתן למשל ללכסן את המטריצה A ולבצע תהליך גרם-שמידט על כל וקטורי היחידה בעזרת הוקטורים שהתקבלו. הוקטורים הנוספים שמתקבלים מעבר לוקטורים של המטריצה הם בסיס אורתונורמלי לוקטורים שהכפלתם במטריצה תתן 0 קוד כללי:
o_b=orth(A); orig_rank=size(o_b,2); % Gram-Schmidt iterations for next_vec=(size(o_b,2)+1:size(A,1)), test=eye(size(A)); rem=test-(test*o_b)*o_b'; abs_rem=sum(abs(rem.^2),1); [m,place]=max(abs_rem); o_b=[o_b, rem(place,:)'/sqrt(abs_rem(place))]; end; return o_b:),orig_rank+1:end);​
יש מצב שקיימת פונקציה מוכנה לדבר הזה, אבל גם הגישה הישירה די פשוטה
 
אין לי מושג על מה אתה מדבר,

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

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