View Full Version : پيش فرض نوشتن توابع ریاضی به فرمت متلب
sara joun
پنج شنبه 07 خرداد 1394, 12:59 عصر
سلام
من یک سری تابع تست دارم که میخام به شکل فرمت متلب نوشته بشه
مثلا زیگما از یک تا x ، n به توان 2 به شکل زیر میشه
f=sum(x.^2);
حالا میخام بدونم سایتی یا برنامه ای هست که توابع رو بهش بدیم و به فرمت قابل فهم برای متلب بهمون بده، یا اینکه کسی از دوستان هست که وارد باشه و مسلط باشه و بتونه این توابع رو برای من به شکل قابل فهم برای متل دربیاره؟؟؟
ممنون
rahnema1
پنج شنبه 07 خرداد 1394, 14:21 عصر
سلام، بهترین روش اینه که یک جزوه مقدماتی آموزش متلب را مطالعه کنید و تابعها را مطابق اون بنویسید. اگه وقت این کار را ندارید حالا تابعها را اینجا قرار بدید تا دوستان بررسی کنند
sara joun
جمعه 08 خرداد 1394, 11:43 صبح
سلام، بهترین روش اینه که یک جزوه مقدماتی آموزش متلب را مطالعه کنید و تابعها را مطابق اون بنویسید. اگه وقت این کار را ندارید حالا تابعها را اینجا قرار بدید تا دوستان بررسی کنند
سلام
ممنونم از پاسخ گوییتون
آره من خوندم، یکی دوتا رو هم تبدیل کردم اما خیلی وقتمو گرفت و تازه مطمئن نیستم از درست بودنش
من برنامه ای دارم مینویسم و میخام با این توابع چک کنم، اگه دوستان که وارد و سریع هستن لطف کنن و اینارو به فرمت متلب بنویسن ، ممنون میشم. از طرفی چون توابع تست مهم هستن فکر میکنم به درد بقیه دوستان هم بخوره.
131768
sara joun
جمعه 08 خرداد 1394, 11:53 صبح
اگه عکس واضح نیس،
131769
بگین فایلشو بفرستم، آخه خواستم مقاله ای که ابن توابع توش هست رو بفرستم اکا هرکار کردم ارور داد و ضمیمه نشد
rahnema1
جمعه 08 خرداد 1394, 21:59 عصر
فعلا این 11 تای اولش
n = 30
f1= sum(x(1:n) .^ 2);
f2= sum(abs(x(1:n))) + prod(abs(x(1:n)));
f3 = sum(cumsum(x(1:n)) .^ 2);
f4 = max(abs(x(1:n)));
f5 = sum(100 * (x(2:n) - x(1:(n-1)) .^ 2) .^ 2 + (x(1:(n-1)) - 1) .^ 2);
f6 = sum(floor(x(1:n) + 0.5) .^ 2);
f7 = sum((1:n) .* x(1:n) .^ 4) + rand;
f8 = sum(-x(1:n) .* sin(sqrt(abs(x(1:n)))));
f9 = sum(x(1:n) .^ 2 - 10 * cos(2 * pi * x(1:n)) + 10);
f10 = -20 * exp(-0.2 * sqrt(sum(x(1:n) .^ 2) / n)) - exp(sum(cos(2 * pi * x(1:n)) / n));
f11 = sum(x(1:n) .^ 2) / 4000 - prod(cos(x(1:n) ./ sqrt(1:n))) + 1;
sara joun
یک شنبه 10 خرداد 1394, 16:11 عصر
سلام
خیلی ممنونم از لطفتون
فقط مطمئن هستین از اینا، چون برناممو روشون تست میکنم یه وقت موردی نداشته باشه؟
میشه بقیشم بزارین؟
rahnema1
یک شنبه 10 خرداد 1394, 20:48 عصر
من تا جای ممکن دقت می کنم تا موردی نداشته باشه
حالا خودتون یه چند تای اون را بنویسید ببینیم چه طور می نویسید
sara joun
چهارشنبه 13 خرداد 1394, 17:49 عصر
سلام
اینارو تونستم بنویسم، اما فکر کنم اشتباه توش باشه. و اینکه عدد پی رو پیدا نکردم جاش P نوشتم
f14=(1/500+sum1/((1:25)+sum(x(1:2)-a(1:2)(1:25))^6))^-1
f15=sum(a(1:11)-(x1(b(1:11)^2+b(1:11)x2))/(b(1:11)^2+b(1:11)x3+x4))^2
f16=4(x1)^2-2.1(x1)^4+(x1^6)/3+x1x2-4(x2)^2+4(x2)^4
f17=(x2-(5.1(x1)^2)/(4(P)^2)+(5x1)/(P)-6)^2+10(1-1/8P)cosx1+10
f18=(1+((x1+x2+1)^2)(19-14x1+3(x1^2)-14x2+6x1x2+3(x2^2)))(30+(2x1-3x2)^2(18-32x1+12(x1^2)+48x2-36x1x2+27(x2^2)))
f19=-sum c(1:4) exp(-sum( a(1:4)(1:4)((x(1:4)-p(1:4)(1:4))^2)))
f20=-sum c(1:4) exp(-sum( a(1:4)(1:6)((x(1:4)-p(1:4)(1:6))^2)))
f21=-sum((x-a(1:5))((x-a(1:5))^T)+c(1:))^ -1
f22=-sum((x-a(1:7))((x-a(1:7))^T)+c(1:7))^ -1
f23=-sum((x-a(1:10))((x-a(1:10))^T)+c(1:10))^ -1
rahnema1
پنج شنبه 14 خرداد 1394, 18:14 عصر
میگم اونها که نوشتید توی متلب بذارید کلا خطا میده . مثلا علمت ضرب را حتما باید بذارید
اینم چند تا دیگه البته بعضی متغیرها را لازمه بدونیم مثل a و c که فکر کنم در مقاله باشه
y = @(x) 1 + (x + 1) ./ 4;
u =@(x,a,k,m) (x>a) .* k .* (x - a) .^ m + (x < -a) .* k .* (-x - a) .^ m ;
f12 = pi / n * (10 * sin(pi * y(1)) .^ 2 + sum(((y(x(1:(n-1))) - 1) .^ 2) .* (1 + 10 * sin(pi * y(x(2:n))) .^ 2)) + (y(x(n)) - 1) .^ 2) + sum(u(x(1:n),10,100,4));
f13 = @(x) 0.1 * ( sin(3 * pi * x(1)) .^ 2 + sum(((x(1:(n-1)) - 1) .^ 2) .* (1 + sin(3* pi * x(2:n)) .^ 2)) + ((x(n) - 1) .^ 2) .* (1 + sin(2 * pi * x(n)) .^ 2)) + sum(u(x(1:n),5,100,4));
f14 = @(x,a) 1 ./ (1 / 500 + sum(1 ./ ((1:25) + sum(bsxfun(x, a, @minus ) .^ 6 ,2) )));
f15 = @(x,a,b) sum((a(1:11) - x(1) * (b(1:11) .^ 2 + b(1:11) * x(2)) ./ (b(1:11) .^ 2 + b(1:11) * x(3) + x(4))) .^ 2);
f16 = @(x) 4 * x(1) ^ 2 - 2.1 * x(1) ^ 4 + (x(1) ^ 6) / 3 + x(1) * x(2) - 4 * x(2) ^ 2 + 4 * x(2) ^ 4;
f17 = @(x) (x(2) - 5.1 / (4 * pi ^ 2) * x(1) ^ 2 + 5 / pi * x(1) -6) ^ 2 + 10 * (1 - 1/ (8 * pi))* cos(x(1)) + 10;
f18 = @(x) (1 + (x(1) + x(2) + 1) ^ 2 * (19 - 14 * x(1) + 3 * x(1) ^ 2 - 14 * x(2) + 6 * x(1) * x(2) + 3 * x(2) ^ 2)) * (30 + (2 * x(1) - 3 * x(2)) ^ 2 * (18 - 32 * x(1) + 12 * x(1) ^ 2 + 48 * x(2) - 36 * x(1) * x(2) + 27 * x(2) ^ 2 ));
sara joun
جمعه 15 خرداد 1394, 11:37 صبح
آها
اون @ هایی ک گذاشتینو باید بردارم؟
بعضی جاها تو فرمولا هیچی نزاشته، که یعنی ضرب، اما بعضی جاهاش علامت ضربو گذاشته(مثلن فرمول f18) ، اون وقت این علامت ضرب که گذاشته با جاهایی که نزاشته، یک معنی میده؟چون شما جاهایی که علامت نداره رو * گذاشتین اونجایی که علامت ضرب داره رو هم * گذاشتین.
و اینکه a و b رو از کجا باید بیاریم چون توابع ما رو یک ورودی x کار میکنن؟ اگر نگاه کنین خودشم نوشته f(x) یعنی ورودی تابع یک ایکس هستش
sara joun
جمعه 15 خرداد 1394, 11:44 صبح
یک چیز دیگه، x1 و x2 رو شما x(1 و x(2 نوشتین، یعنی منظور از x1 وx2 اینه که x مقدار اولش و x مقدار دومش؟؟ یا اینکه x1وx2 دوتا متغیر جدان؟
rahnema1
جمعه 15 خرداد 1394, 21:21 عصر
آها
اون @ هایی ک گذاشتینو باید بردارم؟
نه نباید بردارید. این سری دوم را به صورت تابع نوشتم در واقع f13 برابر با یک تابع می شه که پارامتری به نام x می گیره اون 11 تای قبلی هم می شه به همین صورت به شکل تابع نوشت
بعضی جاها تو فرمولا هیچی نزاشته، که یعنی ضرب، اما بعضی جاهاش علامت ضربو گذاشته(مثلن فرمول f18) ، اون وقت این علامت ضرب که گذاشته با جاهایی که نزاشته، یک معنی میده؟چون شما جاهایی که علامت نداره رو * گذاشتین اونجایی که علامت ضرب داره رو هم * گذاشتین.
بله هر دو علامت ضرب می شه
و اینکه a و b رو از کجا باید بیاریم چون توابع ما رو یک ورودی x کار میکنن؟ اگر نگاه کنین خودشم نوشته f(x) یعنی ورودی تابع یک ایکس هستش
a و b را باید از همون مقاله ای که فرمولها را نوشته پیدا کنید
rahnema1
جمعه 15 خرداد 1394, 21:22 عصر
یک چیز دیگه، x1 و x2 رو شما x(1 و x(2 نوشتین، یعنی منظور از x1 وx2 اینه که x مقدار اولش و x مقدار دومش؟؟ یا اینکه x1وx2 دوتا متغیر جدان؟
جدا نیستند یک بردار هست که عنصر اول و دومش را پیدا می کنیم
sara joun
شنبه 16 خرداد 1394, 17:44 عصر
خیلی ممنون
ببخشید یک سوال دیگه، تو f14 مثلن xi و aij داریم، شما هر دو رو به یک صورت نوشتین x و a یعنی اندیساش که یکی فقط i هست و دیگری ij اینو چجوری نوشتین؟
چون میخواستم بقیه رو بنویسم دیدم بقیشون همشون اندیساشون ij هستش
rahnema1
یک شنبه 17 خرداد 1394, 09:55 صبح
تابعها را تموم کردم و داده های x مربوط به هر تابع را با شماره نشون دادم اما متغیرهایی مثل a و c و .. را توی مقاله نوشته که اگه بتونید اینجا بذارید که تکمیل می شه
مثلا برای اجرای تابع 1 اینجوری می نویسیم
f1 (x1)
این هم لیست تابعها:
f1= @(x) sum(x .^ 2);
f2= @(x) sum(abs(x)) + prod(abs(x));
f3 = @(x) sum(cumsum(x) .^ 2);
f4 = @(x) max(abs(x));
f5 = @(x) sum(100 * (x(2:end) - x(1:(end-1)) .^ 2) .^ 2 + (x(1:(end-1)) - 1) .^ 2);
f6 = @(x) sum(floor(x + 0.5) .^ 2);
f7 = @(x) sum((1:numel(x)) .* x .^ 4) + rand;
f8 = @(x) sum(-x .* sin(sqrt(abs(x))));
f9 = @(x) sum(x .^ 2 - 10 * cos(2 * pi * x) + 10);
f10 = @(x) -20 * exp(-0.2 * sqrt(sum(x .^ 2) / numel(x))) - exp(sum(cos(2 * pi * x) / numel(x)));
f11 = @(x) sum(x .^ 2) / 4000 - prod(cos(x ./ sqrt(1:numel(x)))) + 1;
y = @(x) 1 + (x + 1) ./ 4;
u =@(x,a,k,m) (x>a) .* k .* (x - a) .^ m + (x < -a) .* k .* (-x - a) .^ m ;
f12 = @(x) pi / numel(x) * (10 * sin(pi * y(x(1))) .^ 2 + sum(((y(x(1:(end-1))) - 1) .^ 2) .* (1 + 10 * sin(pi * y(x(2:end))) .^ 2)) + (y(x(end)) - 1) .^ 2) + sum(u(x ,10,100,4));
f13 = @(x) 0.1 * ( sin(3 * pi * x(1)) .^ 2 + sum(((x(1:(end-1)) - 1) .^ 2) .* (1 + sin(3* pi * x(2:end)) .^ 2)) + ((x(end) - 1) .^ 2) .* (1 + sin(2 * pi * x(end)) .^ 2)) + sum(u(x,5,100,4));
f14 = @(x, a) 1 ./ (1 / 500 + sum(1 ./ ((1:25) + sum(bsxfun(@minus, x', a ) .^ 6 ,1) )));
f15 = @(x,a,b) sum((a - x(1) * (b .^ 2 + b * x(2)) ./ (b .^ 2 + b * x(3) + x(4))) .^ 2);
f16 = @(x) 4 * x(1) ^ 2 - 2.1 * x(1) ^ 4 + (x(1) ^ 6) / 3 + x(1) * x(2) - 4 * x(2) ^ 2 + 4 * x(2) ^ 4;
f17 = @(x) (x(2) - 5.1 / (4 * pi ^ 2) * x(1) ^ 2 + 5 / pi * x(1) -6) ^ 2 + 10 * (1 - 1/ (8 * pi))* cos(x(1)) + 10;
f18 = @(x) (1 + (x(1) + x(2) + 1) ^ 2 * (19 - 14 * x(1) + 3 * x(1) ^ 2 - 14 * x(2) + 6 * x(1) * x(2) + 3 * x(2) ^ 2)) * (30 + (2 * x(1) - 3 * x(2)) ^ 2 * (18 - 32 * x(1) + 12 * x(1) ^ 2 + 48 * x(2) - 36 * x(1) * x(2) + 27 * x(2) ^ 2 ));
f19 = @(x, c, a, p) -sum(c .* exp(-sum(a .* bsxfun(@minus, x, p) .^ 2, 2)));
f20 = @(x, c, a, p) -sum(c .* exp(-sum(a .* bsxfun(@minus, x, p) .^ 2, 2)));
f21 = @(x, c, a) -sum(1 ./ (sum(bsxfun(@minus, x , a) .^ 2, 2) + c));
f22 = @(x, c, a) -sum(1 ./ (sum(bsxfun(@minus, x , a) .^ 2, 2) + c));
f23 = @(x, c, a) -sum(1 ./ (sum(bsxfun(@minus, x , a) .^ 2, 2) + c));
x1= (rand(1, 30) - 0.5) * 200;
x2= (rand(1, 30) - 0.5) * 20;
x3= (rand(1, 30) - 0.5) * 200;
x4= (rand(1, 30) - 0.5) * 200;
x5= (rand(1, 30) - 0.5) * 60;
x6= (rand(1, 30) - 0.5) * 200;
x7= (rand(1, 30) - 0.5) * 2.56;
x8= (rand(1, 30) - 0.5) * 1000;
x9= (rand(1, 30) - 0.5) * 10.24;
x10= (rand(1, 30) - 0.5) * 64;
x11= (rand(1, 30) - 0.5) * 1200;
x12= (rand(1, 30) - 0.5) * 100;
x13= (rand(1, 30) - 0.5) * 100;
x14= (rand(1, 2) - 0.5) * 131.07;
x15= (rand(1, 4) - 0.5) * 10;
x16= (rand(1, 2) - 0.5) * 10;
x17= rand(1, 2) * 15 + [-5 0];
x18= (rand(1, 2) - 0.5) * 4;
x19= rand(1, 3);
x20= rand(1, 6);
x21= rand(1, 4) * 10;
x22= rand(1, 4) * 10;
x23= rand(1, 4) * 10;
a14 = a = [repmat((-32:16:32), 1, 5)', reshape(repmat((-32:16:32), 5, 1), 25, 1)]';
a15 = [0.1957,0.1947, 0.1735, 0.1600, 0.0844, 0.0627, 0.0456, 0.0342, 0.0323, 0.0235, 0.0246];
b15 = 1 ./ [0.25, 0.5, 1, 2, 4, 6, 8, 10, 12, 14, 16];
a19 = [3, 10, 30; 0.1, 10, 35; 3, 10, 30; 0.1 , 10, 35];
c19 = [1; 1.2; 3; 3.2];
p19 = [0.3689, 0.117, .2673; .4699, .4387, .747; .1091, .8732, .5547; .03815, .5743, .8828];
a20 = [10 3 17 3.5 1.7 8;
.05 10 17 .1 8 14;
3 3.5 1.7 10 17 8;
17 8 .05 10 .1 14];
c20 = [1 ;1.2; 3; 3.2];
p20 =[.1312 .1696 .5569 .0124 .8283 .5886;
.2329 .4135 .8307 .3736 .1004 .9991;
.2348 .1415 .3522 .2883 .3047 .6650;
.4047 .8828 .8732 .5743 .1091 .0381];
a23 = [4 4 4 4;
1 1 1 1;
8 8 8 8;
6 6 6 6;
3 7 3 7;
2 9 2 9;
5 5 3 3;
8 1 8 1;
6 2 6 2;
7 3.6 7 3.6];
c23 = [.1; .2; .2; .4; .4; .6; .3; .7; .5; .5];
a21 = a23(1:5, :);
c21 = c23(1:5);
a22 = a23(1:7, :);
c22 = c23(1:7);
sara joun
شنبه 23 خرداد 1394, 10:16 صبح
سلام
نمیدونم چرا هر چی این توابع رو اجرا میکنم، جوابهای بزرگ میده تو خروجی، در حالی که مثلا برای سه تابع اول مقدار مینیمم رو نوشته صفر هستش. ولی خروجی ها اعداد خیلی بزرگی میشن.چرا؟
>> f1= @(x) sum(x .^ 2);
>> x1= (rand(1, 30) - 0.5) * 100;
>> f1(x1)
ans =
2.8442e+004
>> f2= @(x) sum(abs(x)) + prod(abs(x));
>> x2= (rand(1, 30) - 0.5) * 10;
>> f2(x2)
ans =
3.7780e+008
>> f3 = @(x) sum(cumsum(x) .^ 2);
>> x3= (rand(1, 30) - 0.5) * 100;
>> f3(x3)
ans =
1.6606e+005
rahnema1
شنبه 23 خرداد 1394, 18:15 عصر
یه سری اصلاح روی تابعها انجام دادم اون متغیرها a و b هم که لینکش را فرستادید داخل کد بالا گذاشتم
اینکه جواب زیاد میده اشکال نداره منظورش اینه که از صفر نباید کمتر بشه
sara joun
شنبه 23 خرداد 1394, 19:45 عصر
خیلی ممنونم
اینکه میگین یک سری اصلاحات رو توابع انجام دادین، یعنی تغییرشون دادین، اینا رو اضافه کنم، قبلی ها اشتباه بوده؟؟
میشه این مقادیر a,b,p رو بگین از کجا نوشتین، شماره صفحشو بگین ببینم چجوری نوشته بوده اینارو؟
rahnema1
شنبه 23 خرداد 1394, 19:47 عصر
بله چند تا اشتباه بود
اونها در صفحه 100 به بعد در قسمت ضمیمه هست
sara joun
شنبه 23 خرداد 1394, 20:00 عصر
صفحه صد به بعد؟؟ اینکه 32 صفحه بیشتر نداره؟؟
sara joun
شنبه 23 خرداد 1394, 20:07 عصر
آها دیدم تو صفحاه 29 و 30 و ایناهاس، ممنون.
sara joun
یک شنبه 31 خرداد 1394, 18:17 عصر
سلام
ببخشید من یک چیزو متوجه نمیشم، اینکه مثلن توی f20 زیگما اولیمون از یک تا چهار هست و زیگما دوم از یک تا شش، این چجوری مشخص شده، تابع از کجا میفهمه زیگما اول از یک تا چهاره و زیگما دوم از یک تا شش هستش؟؟
rahnema1
یک شنبه 31 خرداد 1394, 20:43 عصر
اینها را توی داده ها مشخص کردیم
یعنی a20 تعداد 4 تا سط و 6 تا ستون داره که تابع هم بر اساس داده های ورودی عمل می کنه مثل x و a
Eng.sohrabi
چهارشنبه 10 تیر 1394, 16:59 عصر
سلام دوستان
می خواستم کمکم کنید
من برای پایان نامم یه معادله کوپل رو که به صورت معادله دیفرانسیل هست رو باید حل کنم . با استفاده از یک function و ode 45
مشکلم در وارد کردن معادلات هس به فرمت متلب نمیتونم بنویسم تازه کارم:ناراحت::گریه: . معادلات رو میزام نیگاه کنید
http://cld.persiangig.com/download/RsUWlr/dl
به صورت pdf هست
sara joun
پنج شنبه 11 تیر 1394, 03:05 صبح
سلام
برای توابع f12 و f13 به اون توابع u و y که نوشتین احتیاج داریم، اما خوده تابع u هم به یک سری مقادیر مثل a,m,k نیاز داریم، اونا رو در انتها که مقادیر رو مشخص کردین ننوشتین، درسته؟
بعد تابع y فقط x میخاد، این x همون ایکسی هست که به توابعf12 و f13 میدیم، درسته؟ یعنی مجدد لازم نیس X تعریف بشه
sara joun
پنج شنبه 11 تیر 1394, 04:49 صبح
راسی تابع f19 رو هم اجرا میکنم این پیامو میده
??? Error using ==> bsxfun
Non-singleton dimensions of the two input arrays must match each other.
rahnema1
پنج شنبه 11 تیر 1394, 07:22 صبح
سلام
واسه تابع u که توی فرمول مقادیر x و 10 و 100 ,4 گذاشته که ما هم همون را به کار می بریم و تعریف مجدد x لازم نیست
من f19 را به صورت زیر اجرا می کنم بدون مشکل اجرا می شه
f19(x19,c19,a19,p19)
sara joun
پنج شنبه 11 تیر 1394, 17:03 عصر
سلام
ببینین شما برای x19 سه مقدار تعریف کردین، یعنی x19 هر دفعه سه عدد رندوم میگیره، برای همین درست اجرا میشه و ارور نمیده
من برای x19 چهار مقدار تعریف کردم، آخه اگر فرمول f19 رو ببینین تو زیگما دوم j از یک تا چهاره و ماهم xj داریم، پس باید چهار مقدار به x تخصیص بدیم، درسته؟
rahnema1
پنج شنبه 11 تیر 1394, 17:25 عصر
سلام
ببینین شما برای x19 سه مقدار تعریف کردین، یعنی x19 هر دفعه سه عدد رندوم میگیره، برای همین درست اجرا میشه و ارور نمیده
من برای x19 چهار مقدار تعریف کردم، آخه اگر فرمول f19 رو ببینین تو زیگما دوم j از یک تا چهاره و ماهم xj داریم، پس باید چهار مقدار به x تخصیص بدیم، درسته؟
نه لازم نیست 4 مقدار تخصیص بدیم شما همون طور که در پست بالا نوشتم بنویسید مشکلی ایجاد نمی شه. توی فرمول که نوشته 4 اشتباه نوشته درستش می شه 3 چون آخر مقاله در قسمت ضمیمه نوشته 3 و برای اطمینان توی اینترنت نام تابع مربوطه را زدم و دیدم در جاهای دیگه هم 3 استفاده شده و 4 اشتباهه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.