کار با ماتریس ها

..:: civil ::..

عضو جدید
با عرض سلام خدمت شما دوستان محترم
سوالم راجع به دستوریه که پایین نوشتم .میخوام دو تا ماتریس رو با هم جمع و ضرب کنم بریزم تو مثلا r که یه ماتریس 3x1 هست در ضمن A , X ,b هم ماتریس هستن که 3x3,A..3X1,X...3X1,b و توی حلقه for بذارم اما نمی فهمه این r ماتریس هست هی error میده که error مربوط به پرانتزای جلوی r هست اما اگه اونارو بردارم تو حلقه for چه طوری بگم که r(1) رو از عبارت بالا بگیره؟؟؟؟؟؟(بقیه پارامترها هم تعریف شده اند)... تو رو خدا کمکم کنین:( ، من اینطوری می نویسم کهerror میده:

امیدوارم به هم نریزه چیزی که می نویسم


r(1)=zeros(3,1);

r(1)=b-A*x
for i=1:30
alfa(i)=dot(rstar(i),r(i))/dot(Ap(i),Pstar(i));;
 

behnam5670

عضو جدید
کاربر ممتاز
ها؟
میشه دقیقا بگین می خواین چی کار کنین؟ من هیچی از نوشته هاتون سر در نمیارم
ضمنا اگه امکانش هست متنتون رو توو word بنویسین بعدی اینجا کپیش کنید که منم بتونم با ورد توو فرمت اصلیش ببینم الان همه چیز بهم ریخته
 

..:: civil ::..

عضو جدید
سلام
چیو توضیح بدم بالا کاملللل توضیح دادم تو word نوشتم من که میبینم فقط دو تا پرانتز جابجا شده :( من تازه واردم بلد نیستم میشه فایل متلبمو بدم شما ران کنین متوجه بشین error چیه؟؟؟؟ اگه میشه چطوری بذارم؟؟
[FONT=&quot] [/FONT]​
[FONT=&quot]r(1)=zeros(3,1);

r(1)=b-A*x;
for i=1:30
alfa(i)=dot(rstar(i),r(i))/dot(Ap(i),Pstar(i))[/FONT]​
 

behnam5670

عضو جدید
کاربر ممتاز
کد بالای شما اولا اشتباهه، ولی اگه صحیح هم باشه، شما از (r(i که i از 1 تا 30 می شماره استفاده کردین در حالی که فقط (1)r رو تعریف کردین

به هر حال وقتی خط اول نوشتین (1)r، این یعنی فقط 1 درایه، در حالی که سمت راستش یک ماتریس 3 در 1 هست؛
اگه می خواین بر فرض 30 تا ماتریس n در m داشته باشین که هر بار در حلقه ی for یکیشون رو استفاده کنید باید اینجوری تعریف کنین:
(r = zeros(n, m, 30

وقتی هم می خواین مولفه ی K ام رو مقدار دهی کنین (مثلا اینجا B) می تونین اینجوری بنویسین:
r:), :, k) = B که B یک ماتریس n در m هست

اینجوری شما k تا ماتریس n در m دارین
البته اگه یکی از m یا n مقدارش 1 بود دیگه لازم نیست از ماتریس 3 مولفه ای استفادی کنین چون در عمل تبیل به یک ماتریس معمولی می شه

الان سوال اصلی من اینه که وقتی شما از 30 تا r استفاده می کنید کی اونا رو مقدار دهی کردین و هر کدوم از r ها ماتریس چند در چند هستند؟

اگه همه ی r ها 3 در 1 هستند و شما 30 تا از این r ها رو مقداردهی کردین کافیه که یک ماتریس 3 در 30 تعریف کنید و که هر کدوم از این r ها یکی از 30 ستون اون باشن، موقعی هم که می خواین یکی از این ستونها رو صدا بزنین باید این کار رو بکنین: (r:), i؛ اینجوری یک ماتریس 3 در 1 بهت برمیگردونه

فکر کنم مشکل شما همین آخری باشه
 

..:: civil ::..

عضو جدید
کد بالای شما اولا اشتباهه، ولی اگه صحیح هم باشه، شما از (r(i که i از 1 تا 30 می شماره استفاده کردین در حالی که فقط (1)r رو تعریف کردین

به هر حال وقتی خط اول نوشتین (1)r، این یعنی فقط 1 درایه، در حالی که سمت راستش یک ماتریس 3 در 1 هست؛
اگه می خواین بر فرض 30 تا ماتریس n در m داشته باشین که هر بار در حلقه ی for یکیشون رو استفاده کنید باید اینجوری تعریف کنین:
(r = zeros(n, m, 30

وقتی هم می خواین مولفه ی K ام رو مقدار دهی کنین (مثلا اینجا B) می تونین اینجوری بنویسین:
r:), :, k) = B که B یک ماتریس n در m هست

اینجوری شما k تا ماتریس n در m دارین
البته اگه یکی از m یا n مقدارش 1 بود دیگه لازم نیست از ماتریس 3 مولفه ای استفادی کنین چون در عمل تبیل به یک ماتریس معمولی می شه

الان سوال اصلی من اینه که وقتی شما از 30 تا r استفاده می کنید کی اونا رو مقدار دهی کردین و هر کدوم از r ها ماتریس چند در چند هستند؟

اگه همه ی r ها 3 در 1 هستند و شما 30 تا از این r ها رو مقداردهی کردین کافیه که یک ماتریس 3 در 30 تعریف کنید و که هر کدوم از این r ها یکی از 30 ستون اون باشن، موقعی هم که می خواین یکی از این ستونها رو صدا بزنین باید این کار رو بکنین: (r:), i؛ اینجوری یک ماتریس 3 در 1 بهت برمیگردونه

فکر کنم مشکل شما همین آخری باشه

****** من کل کد رو ننوشتم فقط مقدار r(1) رو براش تعریف میکنم همین یک ماتریس رو از بالا می گیره و r(2) و بقیه تا 30 تو حلقه for ساخته می شن و می آن جای این میشینن در واقع r ها همه 3x1 هستند. شما نوشتین
r=zeros(m,n,30)​
اما من می خوام بفهمه این r(1) هست تو حلقه for ... ای خدا بلد نیستم چه جوری بگم!!!!
 

behnam5670

عضو جدید
کاربر ممتاز
****** من کل کد رو ننوشتم فقط مقدار r(1) رو براش تعریف میکنم همین یک ماتریس رو از بالا می گیره و r(2) و بقیه تا 30 تو حلقه for ساخته می شن و می آن جای این میشینن در واقع r ها همه 3x1 هستند. شما نوشتین
r=zeros(m,n,30)​
اما من می خوام بفهمه این r(1) هست تو حلقه for ... ای خدا بلد نیستم چه جوری بگم!!!!

بالا هم حدس زدم مشکلتون این باشه قسمت آخرش هم عرض کردم؛

شما مثلا 30 تا ماتریس 3 در 1 دارین که می خواین با یک متغیری مثل i یکی از اون 30 تا رو بخونین (حالا یا مقدارهی کنین یا از مقدارش استفاده کنین)
شما باید اینکار رو بکنید:
برای مقدار دهی اول یک ماتریس 3 در 30 تعریف کنید که کل 30 تا ماتریس رو به صورت ستونهای خودش داشته باشه؛ (r = zeros(3, 30؛ البته اگه r رو از قبل تعریف نکنین هم اشکالی نداره.
بعد مثلا وقتی می خواین (1)r رو که یک ماتریس 3 در 1 هست مقدار دهی کنید باید به این صورت بنویسین: r:), 1)= A که A باید ماتریس 3 در 1 باشه

به همین ترتیب وقتی می خواین به قول خودتون (r(i رو بخونین باید بنویسین (r:), i که یک ماتریس 3 در 1 بر می گردونه
 
Similar threads
Thread starter عنوان تالار پاسخ ها تاریخ
J اتصال ماتریس ها MATLAB 1
S ماتریس MATLAB 4

Similar threads

بالا