ورود

View Full Version : اعداد مختلط در متلب



anf-b
دوشنبه 27 مهر 1394, 20:17 عصر
سلام دوستان عزیز و محترم
من توی کدی که دارم مینویسم به یک مشکل برخوردم
به کد زیر توجه کنید:



for j=1:layers-1
ksh(j)=((w)/(vs(j)+d(j)*vs(j)*i))*(thick(j))
end


جوابی که برای ksh(j) داده میشه باید به صورت مختلط باشه یعنی عدد موهومی i که توی فرمول هست در جواب هم نشون داده بشه که هر کاری میکنم در خروجی نرم افزار جواب رو به صورت مختلط نشون نمیده
امکانش هست بنده رو راهنمایی کنید؟
با تشکر از شما

rahnema1
دوشنبه 27 مهر 1394, 20:57 عصر
سلام
مشکلی به نظر نمی رسه
مثلا این مثال شما را با مقادیر دخواه مقدار دهی کنیم جواب درست میده

layers = 6;
w = 3;
vs = rand(1, 5);
d = rand(1, 5);
thick = rand(1, 5);
for j=1:layers-1
ksh(j)=((w)/(vs(j)+d(j)*vs(j)*i))*(thick(j));
end

anf-b
سه شنبه 28 مهر 1394, 01:43 صبح
خیلی ممنون از پاسختون حالا فرض کنید من نیاز دارم که w هم به صورت پارامتریک در خروجی نشون داده بشه!
من کد رو به این شکل تغییر دادم اما ارور گرفتم:


layers = 6;
syms w
vs = rand(1, 5);
d = rand(1, 5);
thick = rand(1, 5);
for j=1:layers-1
ksh(j)=((w)/(vs(j)+d(j)*vs(j)*i))*(thick(j));
end




The following error occurred converting from sym to double:
Error using mupadmex
Error in MuPAD command: DOUBLE cannot convert the input expression into a double array.
If the input expression contains a symbolic variable, use the VPA function instead.

Error in Untitled2 (line 7)
ksh(j)=((w)/(vs(j)+d(j)*vs(j)*i))*(thick(j));

rahnema1
سه شنبه 28 مهر 1394, 06:44 صبح
این را امتحان کنید

layers = 6;
syms w
vs = rand(1, 5);
d = rand(1, 5);
thick = rand(1, 5);
ksh = sym();
for j=1:layers-1
ksh(j)=((w)/(vs(j)+d(j)*vs(j)*1i))*(thick(j));
end

anf-b
چهارشنبه 29 مهر 1394, 01:08 صبح
دوست عزیزم واقعا ازت ممنونم واقعا به بنده لطفا بزرگی کردی ؛ اون مشکلم حل شد اما توی این قسمت به مشکل بر خوردم ، تقریبا میشه گفت شبیه سوال قبلیه!



layers = 6;
syms B A
ksh = rand(1, 5);
alpha = rand(1, 5);
C = sym();
for k=2:layers
C(k)=((A(k-1)/2)*(1+alpha(k-1))*(exp(ksh(k-1)*1i)))+((B(k-1)/2)*(1-alpha(k-1))*(exp(ksh(k-1)*-1i)))
end


Error:


C =

[ 0, A*(901632419419599948326155357217/1267650600228229401496703205376 + (324824212670204469066506987721*i)/20282409603651670423947251286016) + B*(365696961045031221745405621215/1267650600228229401496703205376 - (131746845930633879515196266295*i)/20282409603651670423947251286016)]

Error using mupadmex
Error in MuPAD command: Index exceeds matrix dimensions.

Error in sym/subsref (line 687)
B = mupadmex('symobj::subsref',A.s,inds{:});

Error in Untitled2 (line 7)
C(k)=((A(k-1)/2)*(1+alpha(k-1))*(exp(ksh(k-1)*1i)))+((B(k-1)/2)*(1-alpha(k-1))*(exp(ksh(k-1)*-1i)))


توی این کد هم میخوام به صورت پارامتری بهم پاسخ بده که A و B فقط پارامتراند و i هم عدد موهومیه!
خیلی ممنون میشم مشکل بنده رو توی این قسمت هم حل کنید
واقعا ممنونم

rahnema1
چهارشنبه 29 مهر 1394, 15:42 عصر
این را امتحان کنید یعنی مشخص باشه از قبل سایز آرایه های A و B چه قدره:

layers = 6;
B = sym(rand(1,5));
A = sym(rand(1,5));
ksh = rand(1, 5);
alpha = rand(1, 5);
C = sym();
for k = 2:layers
C(k) = ((A(k-1)/2)*(1+alpha(k-1))*(exp(ksh(k-1)*1i))) + ((B(k-1)/2)*(1-alpha(k-1))*(exp(ksh(k-1)*-1i)))
end

anf-b
چهارشنبه 29 مهر 1394, 19:13 عصر
مشکل اینجاست که نیاز دارم مثل بخش اول مشکلم، A و B هم مثل w فقط پارامتر باشند و عدد نباشند

rahnema1
چهارشنبه 29 مهر 1394, 19:36 عصر
مشکل اینجاست که نیاز دارم مثل بخش اول مشکلم، A و B هم مثل w فقط پارامتر باشند و عدد نباشند

این یکی:

layers = 6;
B = sym('b', [1, 5]);
A = sym('a', [1, 5]);

ksh = rand(1, 5);
alpha = rand(1, 5);
C = sym();
for k = 2:layers
C(k) = ((A(k-1)/2)*(1+alpha(k-1))*(exp(ksh(k-1)*1i))) + ((B(k-1)/2)*(1-alpha(k-1))*(exp(ksh(k-1)*-1i)))
end

anf-b
یک شنبه 03 آبان 1394, 03:46 صبح
ممنون بابت راهنماییتون
حالا به یک مشکل دیگه برخوردم: (داخل کد توضیح دادم مشکلم چیه)
باز هم ممنونم ازتون



syms w
layers = 6;
g = rand(1, 50);
n=length(g);
w = sym('w', [1, n]);
vs = rand(1, 5);
d = rand(1, 5);
f = rand(1, 50);
for j=1:layers
ksh(j)=((w)/(vs(j)+d(j)))
end
for i=2:layers
A(i)=vs(i-1)*ksh(i-1)
end
% Ta in ghesmat w parametr bashe
% az inja be bad faghat A(layers) ro niaz daram [A akhari]
% A(layers) be tedad n taksir beshe ke faghat toosh w motaghayer bashe
for i=1:n
w(i)=2*pi*f(i);
end
% bad az in ghesmat ro nemidonam bayad chi kar konam

rahnema1
یک شنبه 03 آبان 1394, 08:31 صبح
سلام
اون A آخر در واقع یک آرایه 1 در 50 هست که اگه بخواهیم به تعداد 50 تا تکرار کنیم می شه 50 در 50

syms w
layers = 6;
n = 50;
g = rand(1, n);
w = sym('w', [1, n]);
vs = rand(1, layers);
d = rand(1, layers);
f = rand(1, n);
ksh = sym(zeros(layers,n));
for j=1:layers
ksh(j,:)=((w)/(vs(j)+d(j)));
end
A = sym(zeros(layers , n));
for i=2:layers
A(i,:)=vs(i-1)*ksh(i-1,:);
end
A_Akhari = repmat(A(layers, :), n, 1);

anf-b
یک شنبه 03 آبان 1394, 14:19 عصر
ممنون اما ببخشید من هدفم از تکثیر A_Akhari به تعداد 50 تا به خاطر این شرط بود که w از حالت پارامتر خارج بشه و به عدد تبدیل بشه


for i=1:n
w(i)=2*pi*f(i);
end

rahnema1
یک شنبه 03 آبان 1394, 15:11 عصر
دقیقا منظور شما را متوجه نشدم ولی اگه می خواهید w با یک سری مقادیر جایگزین بشه می تونید به صورت زیر عمل کنید که نهایتا یک بردار عددی ( به جای سمبولیک) خواهید داشت

syms w
layers = 6;
n = 50
g = rand(1, n);
w = sym('w', [1, n]);
vs = rand(1, layers);
d = rand(1, layers);
f = rand(1, n);
ksh = sym(zeros(layers,n));
for j = 1:layers
ksh(j,:)=((w)/(vs(j)+d(j)));
end
A = sym(zeros(layers , n));
for i = 2:layers
A(i,:) = vs(i-1)*ksh(i-1,:);
end
A_Akhari = subs(A(layers, :), w, 2*pi*f);
A_Akhari = double(A_Akhari);