ورود

View Full Version : راهنمایی



bporreza
دوشنبه 19 مرداد 1394, 01:56 صبح
134106
باسلام و خسته نباشید
اگر امکانش هست راهنمایی بفرمایید چطور میتونم برنامه ای بنویسم که عناصر ماتریس A رو بدست بیاره.تمامی ماتریسهای در شکل معلوم هستند.فقط عناصر ماتریس مربعی A با بعد n+1 نامعلوم.وماتریس Aبار ماتریس قطری بلوکی با بعد2^(n+1) که هر بلوک آن ماتریس Aاست.به همین ترتیب برای Dبار و T بار

bporreza
دوشنبه 19 مرداد 1394, 17:58 عصر
اگه توضیح بیشتر لازمه ارائه میدم.به این برنامه نیاز دارم.

rahnema1
دوشنبه 19 مرداد 1394, 18:02 عصر
سلام
با تکه عکس بریده شده چیزی معلوم نمی شه
به نظرتون A نباید معلوم باشه؟

bporreza
دوشنبه 19 مرداد 1394, 18:47 عصر
اگه لازم فایله خود مقاله رو میذارم.نه A باید پیدا بشه.تو خود مثال هم همینطور عمل کرده

bporreza
دوشنبه 19 مرداد 1394, 18:49 عصر
در واقع هر سطر ماتریس حاصل یک معادله غیر خطی هست.انگار یک دستگاه معادلات غیر خطی قراره حل بشه

bporreza
پنج شنبه 22 مرداد 1394, 00:55 صبح
میدونم که معادلات غیرخطی رو باید با تعریف m فایل حل کرد اما با وجود این همه ماتریس نمیدونم اینکارو چطور انجام بدم به نتیجه نمی رسم.فایل مقاله هم اپلود نمیشه.ارور میده.اگه میل باشه به میلتون میفرستم

rahnema1
پنج شنبه 22 مرداد 1394, 07:27 صبح
مقاله را توی جایی مثل سایت زیر آپلود کنید و لینکش را بفرستید
http://www.sharefile.ir

bporreza
پنج شنبه 22 مرداد 1394, 16:27 عصر
http://www.sharefile.ir/uploads/1439539986.pdf
لینک فایل آپلود شده

rahnema1
پنج شنبه 22 مرداد 1394, 23:01 عصر
برای حل مساله از برنامه ای به نام Maxima استفاده کردم که رایگان و اپن سورس هست و می تونید دانلود کنید
این برنامه را اجرا کنید جوابش تقریبا مثل مثال داخل مقاله می شه

alpha: 0.75$
N:3$
c:0$
G :matrix([1],[1],[1],[1])$
A : matrix([a0],[a1],[a2],[a3])$
G : zeromatrix (4, 1) + 1$
t: matrix([0 ,1/3, 2/3, 1])$
K0 : ident(4)$
P1: K0$
C : ident(4) * -1$

T: lambda([alpha, tt], matrix([1 ,tt^alpha, tt^ (2*alpha), tt^ (3 * alpha)]))$

S : matrix(
[0, 3/4 * gamma(3/4), 0 , 0],
[0, 0, sqrt(%pi) /gamma(3/4), 0],
[0, 0 ,0 , 15/16 * sqrt(%pi*2)/gamma(3/4)],
[0,0,0,0]
)$
Ta :matrix(
[1,0,0,0],
[1, 3^(3/4), 3^(-3/2), 3^(-3/4)],
[1, 2^(3/4) * 3 ^ (-3/4), 2^(3/2) * 3 ^ (-3/2), 2^(9/4) * 3 ^ (-9/4)],
[1,1,1,1]
)$
DT :matrix(
[1,0,0,0],
[-3,3,0,0],
[3,-6,3,0],
[-1,3,-3,1]
)$

Tbar : mat_unblocker (diag_matrix (T(alpha,t[1,1]), T(alpha,t[1,2]) ,T(alpha,t[1,3]), T(alpha,t[1,4])))$
Dbar : mat_unblocker (diag_matrix(DT, DT, DT, DT))$
Abar : mat_unblocker (diag_matrix(A,A,A,A))$
W : mat_unblocker(P1 . Ta . S . K0 . DT - C . Tbar . Dbar . Abar . Ta . DT)$
U0: matrix([1,0,0,0])$
beta0 : 0$
W[1] : U0[1]$
G[1,1] : beta0$
eqns : W . A - G$
load("minpack")$

minpack_solve (list_matrix_entries (eqns), [a0,a1,a2,a3],[.5,.5,.5,.5])

bporreza
جمعه 23 مرداد 1394, 02:21 صبح
خیلی ممنون و متشکر از راهنماییتون.اما من با این نرم افزار کار نکردم. با اینکه نصبش کردم فک نمی کنم فرصتم کافی باشه.برنامه متلب رو تا 1جایی رسوندم باید بتونم اون رو کامل کنم وبهش مسلط بشم.اگر امکانش هست لطفا در مورد متلب راهنمایی بفرمایید.اگر هزینه هم لازم هست میزان محدود میتونم پرداخت کنم

rahnema1
جمعه 23 مرداد 1394, 22:26 عصر
من متلب ندارم و از octave استفاده می کنم که در محاسبات سمبولیک قابلیت متلب را نداره به خاطر همین در maxima انجام دادم
در عین حال فکر کنم باید در متلب به صورت زیر بنویسید

syms a0 a1 a2 a3;
A = [a0 a1 a2 a3]';
alpha = 0.75;
N = 3;
c = 0;


G = ones (4,1);
t= [0 1/3 2/3 1];
K0 = eye(4);
P1 = K0;
C = eye(4) *(-1);
T =@(alpha,t) t .^ (alpha .* (0:3));
g34 = gamma(3/4);
S = [zeros(4,1), diag([3/4 * g34, sqrt(pi) / g34, 15/16 * sqrt(pi*2) / g34], 4, 3)];
powr = [3/4, 3/2, 9/4];
Ta = [1 0 0 0 ;
1, 3 .^ (-powr);
1, 2 .^ powr .* 3 .^ (-powr) ;
1 1 1 1];
DT = [1 0 0 0;
-3 3 0 0;
3 -6 3 0;
-1 3 -3 1];
Tbar = blkdiag(T(alpha,t(1)), T(alpha,t(2)) ,T(alpha,t(3)), T(alpha,t(4)));
Dbar = blkdiag(DT, DT, DT, DT);
Abar = blkdiag(A,A,A,A);
W = P1 * Ta * S * K0 * DT - C * Tbar * Dbar * Abar * Ta * DT;
U0 = [1 0 0 0];
beta0 = 0;
W(1, :) = U0;
G(1) = beta0;
eqns = W * A - G;

در هر سطر eqns یک فرمول قرار داره
ابتدا فرمولها را در نوت پد بذارید و a0 را با (a(1 ریپلیس کنید
همچنین اینها که در زیر گذاشتم با معادل روبرویش replace کنید

a0 --> a(1)
a1 --> a(2)
a2 --> a(3)
a3 --> a(4)

البته در متلب هم دستور subs برای replace کردن وجود داره
یک فایل به نام fcn.m درست کنید و داخل اون کد زیر را بذارید

function y = fcn(a)
y(1)=
y(2)=
y(3)=
y(4)=
end

روبروی y ها فرمول مربوط به اون که replace و اصلاح کرده بودید بذارید
نهایتا در متلب دستور زیر را بزنید
fsolve(@fcn, [.5 .5 .5 .5])
من فایل fcn.m را با توجه فرمول ایجاد شده در maxima تهیه کردم که برای شما اینجا میذاریم حالا خودتون با متلب هم اگه تونستید ایجاد کنید ببنید نتیجه fsolve چی می شه
http://www.sharefile.ir/uploads/1439638672.zip

bporreza
شنبه 24 مرداد 1394, 14:00 عصر
خیلی ممنون و متشکر.بسیار لطف کردین