View Full Version : n بار محاسبه یک ماتریس بدون استفاده از حلقه for در متلب
anf-b
دوشنبه 18 آبان 1394, 19:56 عصر
سلام
امیدوارم حالتون خوب باشه
نمیدونم عنوان رو درست انتخاب کردم یا نه
چون استفاده از حلقه for مدت محاسبات رو زیاد میکنه آیا راهی وجود داره که کد زیر تا انتها محاسبه بشه؟
کد زیر رو در نظر داشته باشید:
n=10;
m=5;
A=zeros(n,m);
A(1,:)=[1];
A(2:end,:)=3*A(1:end-1,:)
ممنون
rahnema1
دوشنبه 18 آبان 1394, 19:59 عصر
سلام
تا انتها یعنی چی؟
anf-b
دوشنبه 18 آبان 1394, 20:01 عصر
یعنی مثل این عمل کنه:
for i=1:n-1
A(i+1,:)=3*A(i,:)
end
rahnema1
دوشنبه 18 آبان 1394, 20:06 عصر
این همون می شه که خودتون نوشتید
A(2:end, :) = 3 * A(1:end-1, :);
anf-b
چهارشنبه 20 آبان 1394, 04:33 صبح
اما برای این کد:
A(2:end,:)=3*A(1:end-1,:)
این جواب داده میشه:
A =
1 1 1 1 1
3 3 3 3 3
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
و برای این کد:
for i=1:n-1
A(i+1,:)=3*A(i,:)
end
این جواب داده میشه:
A =
1 1 1 1 1
3 3 3 3 3
9 9 9 9 9
27 27 27 27 27
81 81 81 81 81
243 243 243 243 243
729 729 729 729 729
2187 2187 2187 2187 2187
6561 6561 6561 6561 6561
19683 19683 19683 19683 19683
مشکل از کجاست؟
anf-b
پنج شنبه 21 آبان 1394, 05:23 صبح
دوست عزیزم rahnema1 عزیز ، لطفا میکنی بهم کمک کنی
rahnema1
پنج شنبه 21 آبان 1394, 07:32 صبح
درسته حق با شما بود به صورت زیر بنویسید
repmat(3 .^ (0:9)', 1, 5)
anf-b
دوشنبه 02 آذر 1394, 02:37 صبح
ممنون اما با دستور repmat هم امتحان کردم منتهی جواب درست نگرفتم:
n=10;
A=zeros(n,1);
A(1,:)=[1];
A(2:end,:)=repmat(3*A(1:end-1,:),1,1)
نتیجه:
A =
1
3
0
0
0
0
0
0
0
0
rahnema1
دوشنبه 02 آذر 1394, 19:42 عصر
به این صورت
A = repmat(3 .^ (0:9)', 1, 5)
یا
n = 10;
m = 5;
A = repmat(3 .^ (0:(n-1))', 1, m);
anf-b
یک شنبه 08 آذر 1394, 23:00 عصر
ممنون اما واسم اینجا مهمه که در محاسبه A از A قبل خودش استفاده کنه!
لطفا کمکم کنید
مرسی
rahnema1
یک شنبه 08 آذر 1394, 23:13 عصر
اگه منظورتون اینه که بسته به اینکه شما سطر اول A را چی بذارید نتیجه متفاوت بشه باید اینجور عمل کنید. مثلا سطر اول به صورت زیر باشه:
n = 10;
m = 5;
satr_avval = 1:m;
A = repmat(3 .^ (0:(n-1))', 1, m);
B = repmat(satr_avval, n, 1);
C = A .* B;
یا خیلی ساده تر
n = 10;
m = 5;
satr_avval = 1:m;
bsxfun(@times,3 .^ (0:(n-1))',satr_avval)
حامد حامد
دوشنبه 23 آذر 1394, 20:21 عصر
for i=1:2
if i==1
;[ A=[1 2;0 4
else if i==2
;[ A=[5 1;7 3
end
end
end
A_new= 4.*A1+5.*A2
چجور میشه متغیرهای A1,A2 رو که همون مقادیر A برای حالت های i=1 و i=2 هستند رو تعریف کنیم؟:متفکر:
rahnema1
دوشنبه 23 آذر 1394, 23:09 عصر
for i=1:2
if i==1
;[ A=[1 2;0 4
else if i==2
;[ A=[5 1;7 3
end
end
end
A_new= 4.*A1+5.*A2
چجور میشه متغیرهای A1,A2 رو که همون مقادیر A برای حالت های i=1 و i=2 هستند رو تعریف کنیم؟:متفکر:
سلام
سوال واضح نیست لطفا مثال عملی تری بزنید یعنی دقیقا مشخص کنید چی کار می خواهید بکنید
حامد حامد
سه شنبه 24 آذر 1394, 14:29 عصر
سلام
سوال واضح نیست لطفا مثال عملی تری بزنید یعنی دقیقا مشخص کنید چی کار می خواهید بکنید
برنامه زیر رو در نظر بگیرید.
clc
clear all
for i=1:2
if i==1
[A1=[1 2;0 4
G1=A1^2
else if i==2
[A2=[5 1;7 3
G2=A2^2
end
end
end
A_new= 4.*A1+5.*A2
G_new=5.*G1+3.*G2
میشه A1,A2 رو تو قسمت IF تعریف کرد و با توجه به این مقادیر G1,G2 رو بدست آورد و نهایتا A_new و G_new محاسبه میشن. حالا برنامه زیر رو در نظر بگیرید.
clc
clear all
for i=1:2
if i==1
[ A=[1 2;0 4
else if i==2
[ A=[5 1;7 3
end
end
G=A^2
end
A_new= 4.*A1+5.*A2
G_new=5.*G1+3.*G2
منظورم اینه که اگه نخوایم A1,A2,G1,G2 رو تو قسمت IF تعریف کنیم و به جاش (با توجه به برنامه دوم) تو هر قسمت IF مقدار A رو تعریف کنیم و بعد با توجه به مقدار i این A رو تو متغیرهای A1, A2 ذخیره کنیم چیکار میشه کرد؟
اگه i=1 باشه A رو تو A1 ذخیره کنه و i=2 باشه A رو تو A2 ذخیره کنه
rahnema1
سه شنبه 24 آذر 1394, 18:30 عصر
سلام
نمیدونم به چه علتی می خواهید این کار را بکنید اما مثلا می تونید از یک آرایه سه بعدی استفاده کنید
حالا نمیدونم اینجوری مشکل شما حل می شه یا نه؟
A = zeros([2 2 2]);
A(:,:,1) = [1 2; 0 4];
A(:,:,2) = [5 1; 7 3];
G = A .^ 2;
A_new = 4 * A(:,:,1) + 5 * A(:,:,2);
G_new = 5 * G(:,:,1) + 3 * G(:,:,2);
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.