# مباحث متفرقه برنامه نویسی > برنامه نویسی Matlab >  هفتِ بیجار

## coronaa

سلام مهندس عزیز
یه سوال :
من اگه یه آرایه 1 در 100 داشته باشم. چطوری میتونم هر 10 تا 10 تا عدد رو در یک سطر قرار بدم؟
m = rand(1,100)
مثلاً 10 تای اول در سطر اول، 10 تا دوم در سطر دوم و ...

----------


## rahnema1

> سلام مهندس عزیز
> یه سوال :
> من اگه یه آرایه 1 در 100 داشته باشم. چطوری میتونم هر 10 تا 10 تا عدد رو در یک سطر قرار بدم؟
> m = rand(1,100)
> مثلاً 10 تای اول در سطر اول، 10 تا دوم در سطر دوم و ...


سلام
m1 = reshape(m , 10 ,10 )'; 

هفت بیجار چیه؟

----------


## coronaa

مرسی. تازه با دستور reshape آشنا شدم :)

----------


## rahnema1

> مرسی. تازه با دستور reshape آشنا شدم :)


یادم میاد توی هفت بیجار قبلی گفته بودم یه نگاهی به یک فایل pdf به نام refcard متلب بندازید که دستورات مهم و پرکاربرد متلب داخلش هست مثل این:
http://www.geog.ucsb.edu/~pingel/210...ab_refcard.pdf

----------


## coronaa

بله. چندتا از اون فایل ها رو هم دانلود کردم ولی بعضیا رو نمیدونم که کاربردشون کجاست.
واسه همین سوال هم من فکر میکردم که باید برنامه بنویسیم!
دوباره باید یه نگاهی بندازم. ممنونم که یادآوری کردین :)

----------


## coronaa

اینو چطوری میتونم توی متلب اجرا کنم :

u = K D

که K یک عدد ثابت و *D اپراتور مشتق نسبت به زمان* است. برای من D مهمه که چطوری باید نوشته بشه!

----------


## rahnema1

> اینو چطوری میتونم توی متلب اجرا کنم :
> 
> u = K D
> 
> که K یک عدد ثابت و *D اپراتور مشتق نسبت به زمان* است. برای من D مهمه که چطوری باید نوشته بشه!


سلام
شاید منظور ماتریس ژاکوبی jacobian باشه. لطفا توضیحات بیشتری بدید

----------


## coronaa

> سلام
> شاید منظور ماتریس ژاکوبی jacobian باشه. لطفا توضیحات بیشتری بدید


بیشتر از این نمیدونم. چون یکمی برام مبهم بود اینجا مطرح کردم.
پس اجازه بدین بیشتر مطالعه کنم.

----------


## coronaa

اینو میشه به ماتریس تبدیل کرد؟


RA = {1 [1 0];[-1 2] 3}


خواستم از دستور cell2mat استفاده کنم ولی خطا داد!
??? Error using ==> cat
CAT arguments dimensions are not consistent.

Error in ==> cell2mat at 89
            m{n} = cat(1,c{:,n});

----------


## rahnema1

چه ماتریسی باید بشه؟ چند در چند؟ عناصر در کدام خانه ماتریس قرار بگیرند؟

----------


## coronaa

> چه ماتریسی باید بشه؟ چند در چند؟ عناصر در کدام خانه ماتریس قرار بگیرند؟


خب مشخصه دیگه. RA باید یک ماتریس 2 در 3 بشه. بصورت سلولی اینطوری میشه :
RA = 

    [         1]    [1x2 double]
    [1x2 double]    [         3]
و بصورت ماتریسی باید بصورت زیر بشه :
RA =

     1     1     0
    -1     2     3
اینطوری نباید بشه؟
با دستور cell2mat انجام نمیشه!

----------


## rahnema1

فکر کنم اینجور بهتر باشه

arr = [];
for i = 1:size(RA, 1)
	arr = [arr; cell2mat(RA(i, :))];
end
disp(arr)

----------


## coronaa

ممنونم. با این کد انجام شد ولی دلیل اینکه مستقیم با دستور cell2mat انجام نمیشه چیه؟
مگه سلول باید مربعی باشه؟ چون یه سلول مربعی رو تست کردم شده بود!

----------


## rahnema1

علتش اینه که ابتدا عناصری که در یک ستون قرار دارند به صورت سطری با هم تر کیب میشن. سپس اون ترکیب به صورت ستونی با هم انجام می گیره اگه ابعاد اونها جوری باشه که نتونن ترکیب بشن خطا میده
مثلا این را ببینید

C = {[1],    [2 3 4];
     [5; 9], [6 7 8; 10 11 12]}

1       2  3  4

5       6  7  8
9       10 11 12

روند ترکیب به این صورته:

1       2  3  4
5       6  7  8
9       10 11 12

1 2  3  4
5 6  7  8
9 10 11 12

اما در مثال شما یه همچین چیزی داریم

[1]      [1  0]
[-1  2]  [3]

حالا عناصر موجود در ستون 1 می خواهند باهم ترکیب بشن به این صورت
[1; -1 2]
به علت اینکه ابعادشون متناسب نیست خطا میده
با این حساب میشه از عناصر داخل سلول ترانسپوز بگیرید که ابعاد عناصر موجود در یک ستون باهم هماهنگ بشه

transRA = cellfun('transpose', RA', 'UniformOutput', false)
cell2mat(transRA)'

----------


## coronaa

توی متلب دستوری وجود داره که یک رشته رو بگیره و تک تک حروف رو از هم جدا کنه؟ و بعدش بتونه حروف رو بصورت رندوم قاطی کنه؟

----------


## rahnema1

> توی متلب دستوری وجود داره که یک رشته رو بگیره و تک تک حروف رو از هم جدا کنه؟ و بعدش بتونه حروف رو بصورت رندوم قاطی کنه؟



reshte = 'This page was last modified on'
reshte(randperm( length(reshte)))

----------


## coronaa

ممنونم.
 اگه بخوام هر حرفی که چاپ شد، یک فاصله قرار بده چی؟یا بینشون با ویرگول جدا شده باشه!
مثلاً همین رشته ی بالا رو بصورت زیر نشون بده :

d p i a w n a s g o o i d e l T i h s t f s e m a

----------


## rahnema1

> ممنونم.
>  اگه بخوام هر حرفی که چاپ شد، یک فاصله قرار بده چی؟یا بینشون با ویرگول جدا شده باشه!
> مثلاً همین رشته ی بالا رو بصورت زیر نشون بده :
> 
> d p i a w n a s g o o i d e l T i h s t f s e m a


این شکلی میشه نوشت

reshte = 'This page was last modified on'
L = length(reshte);
reshape([reshte(randperm(L)); repmat(' ', 1, L)], 1, L * 2)

----------


## coronaa

کار repmat چیه؟ مثل reshape عمل میکنه؟
دقیقاً متوجه نشدم آرگومان داخل repmat چیکار میکنه!
یه سوال دیگه :
میشه کاری کرد که space داخل رشته جز کاراکتر حساب نشه؟

----------


## rahnema1

repmat برای تکرار یک چیز به تعداد دلخواهه
مثلا میخوام به تعداد 5 بار حرف اسپیس پشت سر هم تکرار بشه یا اینکه بخوام یک آرایه را چند بار پشت سر هم تکرار کنم
برای حذف اسپیس:
reshte(reshte ~= ' ')

----------


## coronaa

سلام
میخوام یه برنامه بنویسم که اعداد تصادفی ایجاد کنه بین 0 تا 100 برای x و y . بعد پلات کنه. ضمن اینکه مقادیری که در بازه ی 40 تا 60 قرار دارند رو با یه رنگ جداگانه ای نشون بده. من اینطوری نوشتم ولی جواب نمیده :
clc;
clear all;
close all;

x=unifrnd(0,100,50,1);
y=unifrnd(0,100,50,1);
if x>40 & x<60
    plot(x,y,'ro')

else
plot(x,y,'o')
end

----------


## rahnema1

سلام
نمیدونم نظورتون را درست دریافت کردم یا نه

x=unifrnd(0,100,50,1);
y=unifrnd(0,100,50,1);
indexX = x > 40 & x <  60;
plot(x(indexX),y(indexX),'ro')
hold on;
plot(x(~indexX),y(~indexX),'go')

----------


## coronaa

ممنونم. دقیقاً همینو میخواستم. حالا اگه بخوایم برای y هم محدوده بذاریم باید indexY درست کنیم؟
من به صورت زیر نوشتم ولی خطا میده :
x=unifrnd(0,100,50,1); 
y=unifrnd(0,100,50,1); 
indexX = x > 40 & x <  60; 
indexY = y > 40 & y <  60; 
plot(x(indexX),y(indexY),'ro') 
hold on; 
plot(x(~indexX),y(~indexY),'go')

----------


## rahnema1

> ممنونم. دقیقاً همینو میخواستم. حالا اگه بخوایم برای y هم محدوده بذاریم باید indexY درست کنیم؟
> من به صورت زیر نوشتم ولی خطا میده :
> x=unifrnd(0,100,50,1); 
> y=unifrnd(0,100,50,1); 
> indexX = x > 40 & x <  60; 
> indexY = y > 40 & y <  60; 
> plot(x(indexX),y(indexY),'ro') 
> hold on; 
> plot(x(~indexX),y(~indexY),'go')



x=unifrnd(0,100,50,1); 
y=unifrnd(0,100,50,1); 
indexXY = x > 40 & x <  60 & y > 40 & y <  60; 
plot(x(indexXY),y(indexXY),'ro') 
hold on; 
plot(x(~indexXY),y(~indexXY),'go')

----------


## coronaa

مهندس ببخشید،
قبلاً یه کد فازی نوشته بودی که میومد یک رنج از اعداد رو به دو گروه تقسیم می کردد. من یه مقاله دیدم که میومد قوانین فازی و توابع عضویت رو با استفاده از الگوریتم بهینه سازی، بهینه میکرد تا جواب بهتری بگیریم. حالا این کدی که پایین میذارم زیاد قانون و توابع عضویت نداره. اگه زیاد باشه میشه از این الگوریتمها استفاده کرد. میخوام بدونم چطوری این فازی با این الگوریتم ها ارتباط برقرار میکنه؟شما اطلاعی دارید؟
مثلاً بشه قوانین و توابع عضویت یک سیستم فازی رو با الگوریتم ژنتیک، PSO و یا cuckoo بهینه سازی کرد!
clc;
clear all;
close all;

P =unifrnd(1,100,1,20);
Range=0:100;
aa = newfis ('sefroyek', 'sugeno', ...
    'min', 'max', ...
    'min', 'max', 'wtaver');
aa = addvar (aa, 'input', 'P', [min(Range) max(Range)]);
aa = addmf (aa, 'input', 1, 'Low', 'trapmf', [min(Range)-5 min(Range) range(Range)*0.45+min(Range) range(Range)*0.55+min(Range)]);
aa = addmf (aa, 'input', 1, 'High', 'trapmf', [range(Range)*0.45+min(Range) range(Range)*0.55+min(Range) max(Range) max(Range)+5]);
aa = addvar (aa, 'output', 'sefroyek', [0 1]);
aa = addmf (aa, 'output', 1, 'Low', 'constant', 0);
aa = addmf (aa, 'output', 1, 'High', 'constant',1);
aa = addrule (aa, [1 1 1 1;2 2 1 1]);
% plotfis(aa)
figure
plotmf (aa, 'input', 1);
% plotmf (aa, 'output', 1);
pp=evalfis(P,aa) ;
fprintf('\n\nCoalition of Group 1 :\n  P1 =');
iGroup1=find(pp<0.5);
P1=P(iGroup1); disp(P1);
fprintf('\n\nCoalition of Group 2 :\n  P2 =');
iGroup2=find(pp>=0.5);
P2=P(iGroup2); disp(P2);

----------


## rahnema1

ANFIS با استفاده از شبکه عصبی پارامترهای تابع عضویت را بهینه می کنه

----------


## coronaa

سلام.
 من دو  قسمت داده دارم که اومدم رگرسیون خطی رو بدست آوردم. میخوام ایندو تا رو با subplot توی یک figure قرار بدم. کد پایین رو نوشتم ولی نشد!
کجاش اشتباهه؟
clc;
clear;
close all;

x1=rand(1,100);
y1=x1+0.1*rand(1,100);
subplot(1,2,1)
plotregression(x1,y1);
x2=rand(1,100);
y2=x2+0.1*rand(1,100);
 subplot(1,2,2)
plotregression(x2,y2);

----------


## coronaa

یه سوال دیگه :
من یه رشته دارم بصورت زیر :
st='ABC def:1393'

اگه بخوام یک قسمتی از رشته رو حذف کنم چطوریه؟ مثلاً بخوام سه حرف اول که ABC هست رو حذف کنم.

----------


## rahnema1

> سلام.
>  من دو  قسمت داده دارم که اومدم رگرسیون خطی رو بدست آوردم. میخوام ایندو تا رو با subplot توی یک figure قرار بدم. کد پایین رو نوشتم ولی نشد!
> کجاش اشتباهه؟
> clc;
> clear;
> close all;
> 
> x1=rand(1,100);
> y1=x1+0.1*rand(1,100);
> ...


سلام
شما اومدید رگرسیون بگیرید نشد یا subplot بگیرید نشد؟

----------


## rahnema1

> یه سوال دیگه :
> من یه رشته دارم بصورت زیر :
> st='ABC def:1393'
> 
> اگه بخوام یک قسمتی از رشته رو حذف کنم چطوریه؟ مثلاً بخوام سه حرف اول که ABC هست رو حذف کنم.


درست شبیه آرایه
st(4:end)

----------


## coronaa

> سلام
> شما اومدید رگرسیون بگیرید نشد یا subplot بگیرید نشد؟


رگرسیون میگیره ولی دو تا تصویر رو در یک figure قرار نمیده. یعنی subplot عمل نمیکنه!
دو تا تصویر جدا جدا میسازه.

----------


## coronaa

ببخشید یه سوال دیگه هم دارم:
روابطی که پایین گذاشتم، بدست آورن انتگرال خطای مطلق یا همون Integral of Absolute Error (IAE) یک سیستم برای ارزیابی نتایج هست :IAE.jpg
من یه قسمتی از این روابط رو با کد نوشتم. نمیدونم درسته اینطوری یا نه!
 حالا نمیدونم چطوری باید وزنگذاری بکنم.

t=0:0.5:200;
out1=rand(1,100);
out2=rand(1,100);
e1=.1*out1;
e2=.1*out2;
f1=int(abs(e1),0,t)+int(abs(e2),0,t);
f2=int(abs(out1(t)-out1(t-1)),0,t)+int(abs(out2(t)-out2(t-1)),0,t);

----------


## rahnema1

> رگرسیون میگیره ولی دو تا تصویر رو در یک figure قرار نمیده. یعنی subplot عمل نمیکنه!
> دو تا تصویر جدا جدا میسازه.


octave دستور plotregression نداره اما این دستور plotregression  را به دو شکل می شه نوشت که شکل دوم چند تا پلات با هم می کشه به هلپ متلب مراجعه کنید

----------


## rahnema1

> ببخشید یه سوال دیگه هم دارم:
> روابطی که پایین گذاشتم، بدست آورن انتگرال خطای مطلق یا همون Integral of Absolute Error (IAE) یک سیستم برای ارزیابی نتایج هست :IAE.jpg
> من یه قسمتی از این روابط رو با کد نوشتم. نمیدونم درسته اینطوری یا نه!
>  حالا نمیدونم چطوری باید وزنگذاری بکنم.
> 
> t=0:0.5:200;
> out1=rand(1,100);
> out2=rand(1,100);
> e1=.1*out1;
> ...


دستور int برای انتگرال سمبولیک روی یک تابع هست در صورتی که شما اینجا یک بردار دارید که کافیه از دستور sum استفاده کنید
باید اون مقاله یا مقاله های مرتیط را بهدقت مطالعه کنید تا معلوم بشه وزن ها چه طوریه

----------


## coronaa

> octave دستور plotregression نداره اما این دستور plotregression  را به دو شکل می شه نوشت که شکل دوم چند تا پلات با هم می کشه به هلپ متلب مراجعه کنید


مهندس مرسی. حل شد. ولی هنوز یه مشکلی دارم!
کدش به این صورته :
x1=rand(1,100);
y1=x1+0.1*rand(1,100);
x2=rand(1,100);
y2=x2+0.1*rand(1,100);
plotregression(x1,y1,'Link(1)',x2,x2,'Link(2)');
تصویرش به این صورت شد:
regr.jpg
حالا میخوام این عبارت Link(1) که مینویسم سطر اول باشه و مقدار رگرسیون رو که خودش نمایش میده سطر پایین باشه. نمیشه؟
بعد میخوام یه مقادیری رو هم بعد از مقدار رگرسیون اضافه کنم. مثل RMSE و ....
وقتی یه تصویر بود تونستم با دستور title این کار رو انجام بدم ولی الآن که دوتایی شد نمیشه!

----------


## coronaa

> دستور int برای انتگرال سمبولیک روی یک تابع هست در صورتی که شما اینجا یک بردار دارید که کافیه از دستور sum استفاده کنید
> باید اون مقاله یا مقاله های مرتیط را بهدقت مطالعه کنید تا معلوم بشه وزن ها چه طوریه


خب اگه از دستور sum استفاده کنیم که فقط یک عدد اسکالر داریم!
من باید باید انتگرال رو در هر زمان جدا گانه حساب کنم تا یک بردار داشته باشم. مگه اینطوری نیست؟
چون میخوام مثل همون رگرسیون یه نمودار رسم کنم.
در مورد وزن هم چیزی صحبت نکرده. احتمالاً مانند ماتریس هست که باید برای هر درایه ارزش گذاری کنیم.
نظر شما چیه؟

----------


## rahnema1

> مهندس مرسی. حل شد. ولی هنوز یه مشکلی دارم!
> کدش به این صورته :
> x1=rand(1,100);
> y1=x1+0.1*rand(1,100);
> x2=rand(1,100);
> y2=x2+0.1*rand(1,100);
> plotregression(x1,y1,'Link(1)',x2,x2,'Link(2)');
> تصویرش به این صورت شد:
> regr.jpg
> ...


خب شما می تونید از فرمولی که به شما میده
1*Target + 0.043
استفاده کنید و یک نمودار دلخواه را ایجاد کنید

----------


## rahnema1

> خب اگه از دستور sum استفاده کنیم که فقط یک عدد اسکالر داریم!
> من باید باید انتگرال رو در هر زمان جدا گانه حساب کنم تا یک بردار داشته باشم. مگه اینطوری نیست؟
> چون میخوام مثل همون رگرسیون یه نمودار رسم کنم.
> در مورد وزن هم چیزی صحبت نکرده. احتمالاً مانند ماتریس هست که باید برای هر درایه ارزش گذاری کنیم.
> نظر شما چیه؟


مگه قرار نیست انتگرال در طول زمان گرفته بشه؟ پس یک عدد به دست میاد

----------


## coronaa

> خب شما می تونید از فرمولی که به شما میده
> 1*Target + 0.043
> استفاده کنید و یک نمودار دلخواه را ایجاد کنید


خب من که Target رو ندارم. توی workspace چنین مقداری وجود نداره که بخوام نمودار جداگانه ای رسم کنم.

----------


## coronaa

> مگه قرار نیست انتگرال در طول زمان گرفته بشه؟ پس یک عدد به دست میاد


بله درسته. فکر کنم اشتباه کردم!
ولی باید مقداری بین صفر تا 1 باشه.
حالا این کدی که میذارم کجاش اشتباهه؟ 
t=0:0.5:200;
out1=rand(1,100);
out2=rand(1,100);
e1=.1*out1;
e2=.1*out2;
f1=sum(abs(e1))+sum(abs(e2));
f2=sum(abs(out1(t+1)-out1(t)))+sum(abs(out2(t+1)-out2(t)));

----------


## nina222

> سلام
> m1 = reshape(m , 10 ,10 )'; 
> 
> هفت بیجار چیه؟


هفت بیجار چیه؟[/QUOTE]

 سلام داشتم این پست رو می خوندم که به این سئوال بر خوردم  هفت بیجار چیه؟
هفت بیجار اسم یه نوع ترشی خوش مزه تو شمال هستش .
اگه بخوام  معنی این جمله رو هم بگم  (هفت که همون 7 خودمون هست و بیجار هم به معنی شالیزار هست). :خجالت:

----------


## ehsan_faal

حالا این اسم چه ربطی به این تاپیک داره.... :متفکر:

----------


## nina222

> حالا این اسم چه ربطی به این تاپیک داره....


 شاید منظورشون این بوده که سئوالاتشون متنوع هست ( که البته خیلی هم جالب بود :تشویق: ) و حالا اگه باز می پرسید چه ربطی داره؟  اون دیگه بر می گرده به طرز تهیه این ترشی. :چشمک:

----------


## rahnema1

> شاید منظورشون این بوده که سئوالاتشون متنوع هست ( که البته خیلی هم جالب بود) و حالا اگه باز می پرسید چه ربطی داره؟  اون دیگه بر می گرده به طرز تهیه این ترشی.


آقای (مهندسسسسسس) کرونا جوابشو تو پیام خصوصی بهم دادن که اینجا میذارم البته ایشون کلا 2 تا تاپیک بیشتر تو این سایت ایجاد نکردن اولیش به نام حل تابع چند جمله ای بود که حدود 500 تا پست داخلش ایجاد شد از مطالب مختلف:
https://barnamenevis.org/showthread.php?460429
دومیش هم هفت بیجاره



> نوشته شده توسط rahnema1
> 
> 
> 
> 
> 
> 
>  نوشته شده توسط coronaa
> 
> ...

----------


## coronaa

مهندس من به این صورت میخوام :
regr1.jpg
تصویر رگرسیون هست ولی من تایتلش رو ادیت کردم و خودم یه سری رشته و عدد بهش اضافه کردم. کد بصورت زیره :
plotregression(reff1,q1);
h1=get(gca,'Title');
st1=get(h1,'String');
st1=st1(12:end);
title({'Validation of Link(1)';[st1,'  &  ' 'R^2 = ' num2str(R2_1),' & ' 'RMSE = ' num2str(sqrt(MSE1))]});

*ولی برای دوتا تصویر یکجا نمیشه!*

----------


## rahnema1

فکر کنم دستور رگرسیون تو متلب زیاد باشه اگه بتونی از یکی دیگه استفاده کن

----------


## coronaa

> فکر کنم دستور رگرسیون تو متلب زیاد باشه اگه بتونی از یکی دیگه استفاده کن


من میخوام سعی بکنم از دستور subplot یکاری بکنم که این دوتا تصویر توی یک figure قرار بگیرن. اینطوری برام راحتتره. ولی فعلن که نتونستم سر در بیارم چرا اینا توی subplot نمیرن.
اگه نشد که هیچی. بیخیال میشم.
ممنونم.

----------


## rahnema1

متاسفانه برنامه octave دستور plotregression نداره وگرنه حتما امتحانش میکردم

----------


## coronaa

> بله درسته. فکر کنم اشتباه کردم!
> ولی باید مقداری بین صفر تا 1 باشه.
> حالا این کدی که میذارم کجاش اشتباهه؟ 
> t=0:0.5:200;
> out1=rand(1,100);
> out2=rand(1,100);
> e1=.1*out1;
> e2=.1*out2;
> f1=sum(abs(e1))+sum(abs(e2));
> f2=sum(abs(out1(t+1)-out1(t)))+sum(abs(out2(t+1)-out2(t)));


مهندس ببخشید.
تا f1 فکر کنم درست نوشتم. الآن روی f2 خطا میده. میشه بگید مشکلش چیه؟
فعلاً به وزنها کاری ندارم.

----------


## rahnema1

باید اینجور باشه قاعدتا
f2 = sum(abs(diff(out1))) + sum(abs(diff(out2)));

----------


## coronaa

> باید اینجور باشه قاعدتا
> f2 = sum(abs(diff(out1))) + sum(abs(diff(out2)));


وقتی delat T داره دیگه زمان دخیل نیست؟

----------


## rahnema1

شاید لازم باشه اون جمع ضربدر واحد اپسیلون زمان بشه که این هم تنها یک ضریبه که نهایتا در فرمول بهینه سازی تاثیری نداره

----------


## coronaa

میدونیم که با دستور rand میشه یه نویز تصادفی ساخت. به نظرت میشه بگیم به مدت مثلاً 4 ثانیه داده تصادفی ایجاد کن؟

----------


## rahnema1

بسته به این داره که در هر ثانیه چند تا نمونه گرفته باشیم  اگه در هر ثانیه صد تا نمونه بگیریم میشه 400 عدد رندوم

----------


## coronaa

> بسته به این داره که در هر ثانیه چند تا نمونه گرفته باشیم  اگه در هر ثانیه صد تا نمونه بگیریم میشه 400 عدد رندوم


یعنی این دستور rand برای یک ثانیه رو تولید میکنه؟
یعنی باید بگم :
rand(1,400)
درسته؟

----------


## rahnema1

اصلا rand نمیدونه ثانیه چیه. این ما هستیم که مشخص می کنیم که چند تا تولید بشه بله همین دستور درسته

----------


## coronaa

> اصلا rand نمیدونه ثانیه چیه. این ما هستیم که مشخص می کنیم که چند تا تولید بشه بله همین دستور درسته


با این میشه یه داده تصادفی با میانگین صفر و واریانس 1 تولید کرد :
random('Normal',0,1,1,400)

----------


## rahnema1

این توزیع نرماله قبلی توزیع یکنواخت بود

----------


## coronaa

> این توزیع نرماله قبلی توزیع یکنواخت بود


برای ایجاد نویز، کدوم بهتره؟

----------


## rahnema1

بستگی به سیستم شما داره. انواع و اقسام نویز داریم

----------


## coronaa

سلام
 از نویسنده مقاله در مورد وزنها پرسیدم. گفت هرکدوم رو 0.5 بگیر.
کد بصورت زیر شد ولی مقدار نهایی بین صفر و یک نمیشه. چرا؟
w1=0.5;
w2=0.5;
out1=rand(1,100);
out2=rand(1,100);
e1=.1*out1;
e2=.1*out2;
f1 = sum(abs(e1))+sum(abs(e2))
f2 = sum(abs(diff(out1))) + sum(abs(diff(out2)))
F = w1*f1+w2*f2

طبق مقاله ای که براتون فرستاده بودم، همه ی مقادیر IAE بین صفر و یک هست.

----------


## rahnema1

باید چند دور مقاله را مطالعه کرد تا مشخص بشه چی به چیه
حالا مثلا هر جا خیلی سخت باشه و درکش هم خیلی مشکل باشه من خودم میام پیش نیازهای اون را مطالعه می کنم تا بتونم مطلب را درک کنم

----------


## coronaa

ممنونم.
توی این مقاله که زیاد توضیح نداد.
خودمم جداگانه سرچ کردم هم اون چیزی که میخواستم نبود.
حالا منم بیشتر مطالعه میکنم تا ببینم چطوریه؟

----------


## coronaa

با سلام مجدد خدمت دوست عزیزمون :)
این رابطه رو چطوری میشه پیاده سازی کرد؟
باید از sum استفاده کنیم یا حلقه for ؟؟؟Grunvald.jpg

----------


## rahnema1

> با سلام مجدد خدمت دوست عزیزمون :)
> این رابطه رو چطوری میشه پیاده سازی کرد؟
> باید از sum استفاده کنیم یا حلقه for ؟؟؟Grunvald.jpg


سلام
برای محاسبات سمبولیک من از Maxima استفاده می کنم که این فرمول به این صورت میتونه داخل اون نوشته بشه:
limit(sum((-1)^ k* binomial(alpha, k)*f(t-k*h), k, 0, (t-a)/ h)/ h^alpha, h, 0)

----------


## coronaa

> سلام
> برای محاسبات سمبولیک من از Maxima استفاده می کنم که این فرمول به این صورت میتونه داخل اون نوشته بشه:
> limit(sum((-1)^ k* binomial(alpha, k)*f(t-k*h), k, 0, (t-a)/ h)/ h^alpha, h, 0)


 ممنونم ولی توی این نرم افزار به دردم نمیخوره. اگه با maxima انجام بدم میتونم از متلب Import کنم؟
چون بقیه ی شبیه سازیها که قبل و بعد از   این فرمولی که قراره بیاد باید توی متلب  انجام بشه!

----------


## rahnema1

> ممنونم ولی توی این نرم افزار به دردم نمیخوره. اگه با maxima انجام بدم میتونم از متلب Import کنم؟
> چون بقیه ی شبیه سازیها که قبل و بعد از   این فرمولی که قراره بیاد باید توی متلب  انجام بشه!


من فقط maxima در اختیار دارم. نتایج هم اگه عدد باشه که دیگه با کپی و پیست هم میشه انجام داد. به نظرم نباید روی ابزار تعصب داشت
حالا شاید کسی به این تاپیک توجه نکنه اگه بتونید یک تاپیک جدید ایجاد کنید و توی اون بپرسید شاید دوستان در خصوص متلب اطلاع داشته باشن

----------


## coronaa

> من فقط maxima در اختیار دارم. نتایج هم اگه عدد باشه که دیگه با کپی و پیست هم میشه انجام داد. به نظرم نباید روی ابزار تعصب داشت
> حالا شاید کسی به این تاپیک توجه نکنه اگه بتونید یک تاپیک جدید ایجاد کنید و توی اون بپرسید شاید دوستان در خصوص متلب اطلاع داشته باشن


بحث تعصب داشتن روی یک نرم افزار خاص نیست. بلکه من باید چند موضوع رو با هم ادغام کنم که شاید فط maxima یا octave نتونه اون کار رو انجام بده.
من ابتدا باید با فازی یه سری پارامترها رو بدست بیارم که مسلماً توی متلب باید باشه. بعد باید روابط مرتبه کسری رو پیاده سازی کنم (همین فرمول و چندتا دیگه) و سپس باید با متلب کنترلرم رو طراحی کنم. پس نمیشه که من با maxima انجام بدم و چون این کدها باید به هم پیوسته باشن نمیشه فقط نتایج رو از این بگیرم و ببرم توی متلب.
*در ضمن، من اینجا فقط شما رو قبول دارم :)
*پیشاپیش سال نو شما هم مبارک  :لبخند:

----------


## rahnema1

> بحث تعصب داشتن روی یک نرم افزار خاص نیست. بلکه من باید چند موضوع رو با هم ادغام کنم که شاید فط maxima یا octave نتونه اون کار رو انجام بده.
> من ابتدا باید با فازی یه سری پارامترها رو بدست بیارم که مسلماً توی متلب باید باشه. بعد باید روابط مرتبه کسری رو پیاده سازی کنم (همین فرمول و چندتا دیگه) و سپس باید با متلب کنترلرم رو طراحی کنم. پس نمیشه که من با maxima انجام بدم و چون این کدها باید به هم پیوسته باشن نمیشه فقط نتایج رو از این بگیرم و ببرم توی متلب.


حالا شاید بشه بعضی قسمتها را از جای دیگه گرفت که در هر صورت بستگی به کار شما داره داره



> در ضمن، من اینجا فقط شما رو قبول دارم :)


:) این نظر لطفتونه. متاسفانه این تالار خیلی سوت و کوره و کمتر کسی تمایل داره بیاد فعالیت کنه مطلبی بذاره و یا به سوالی پاسخ بده به این خاطر هست که شاید پستهای یکی مثل من به چشم بیاد



> پیشاپیش سال نو شما هم مبارک


سال نو شما هم مبارک. :) شما هم سال خوبی داشته باشید خدا کنه سال جدید بهتر از سال کهنه باشه

----------


## coronaa

سلام
من دارم با الگوریتم ژنتیک کار میکنم.
 یه function دارم که دو تا ورودی داره. حالا نمیدونم توی دستور ga چطوری برای هر کدوم باند بالا و پایین انتخاب کنم و یا اصلاً چطوری برای توابع چند متغیره کار میکنه!
شما آشنایی دارید؟

این تابع :
function [ p ] = sys_performance( K1 , K2 )
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here

set_param('exam/Gain1', 'Gain', num2str(K1))
set_param('exam/Gain2', 'Gain', num2str(K2))
simout=sim('exam');
p = ITAE;

end

این هم دستور ga در یک m-file دیگه :

clc
clear all
load_system('exam')


options=gaoptimset('PlotFcn', @gaplotbestf);
K_opt = ga(@sys_performance, 1 , [], [], [], [], 0.001 , 10, [], options);

----------


## rahnema1

سلام نه با تابع ga متلب  کار نکردم الان اجرا نمیشه؟

----------


## coronaa

> سلام نه با تابع ga متلب  کار نکردم الان اجرا نمیشه؟


پیداش کردم. قبلاً همه ی lb و ub هر دو متغیر از 0.001 تا 10 بود. الآن درستش کردم. باید بصورت برداری مینوشتم.
به اینصورت :

K_opt = ga(@sys_performance, 2 , [], [], [], [], [1,1] , [10,2], [], options);

----------


## coronaa

سلام
یه سوال :

چرا عملیاتی که توی یک فانکشن صورت میگیره در workspace ذخیره نمیشه؟
من یه فانکشن دارم که در حال اجرای برنامه اصلی، ممکنه 100 بار (و یا بیشتر) تکرار بشه. میخوام نتایجی که توی فانکشن بدست میاد رو ذخیره کنم. ولی وقتی اجرای برنامه تموم میشه، هیچی ذخیر ه نمیشه!

این فانکشن :

function [ p ] = sys_performance( K )


kp1 = K(1,1);
ki1 = K(1,2);
kd1 = K(1,3);
L1 = abs(K(1,4));
M1 = abs(K(1,5));

set_param('exam2/FOPID1',...
    'kp', num2str(kp1) ,'ki', num2str(ki1),'kd', num2str(kd1),...
    'vi',num2str(-L1),'vd', num2str(M1))

simout=sim('exam2');
p = ITAE;

c = {};
for i = 1:100
    c{i} = [kp1 , ki1 , kd1 , L1 , M1];
end
m = zeros(100,5);
for i = 1:100
    m(i, :) = c{i};
end

end

و این برنامه ی اصلی :

clc
clear all
tic
% load nintblocks
load_system('exam')


options=gaoptimset('PlotFcn', @gaplotbestf, 'Display','iter');
K_opt = ga(@sys_performance, 5 , [], [], [], [],...
    [0.01 , 0.01 , 0.01 , 0.01 , 0.01 ] ,...
    [30 , 60 , 100 , 1.2 , 1 ], [], options);


m-file هر کدوم جداست. البته شما نمیتونید اجراش کنید. از الگوریتم ژنتیک استفاده شدهکه نمیدونم توی octave کار میکنه یا نه!

----------


## rahnema1

شما می تونید از یه سری متغیر global استفاده کنید که نتایج را برای شما ذخیره کنه مثلا یک تابع هست که یک بردار را می گیره و مین وماکس اون را به دست میاره و نتیجه تابع برابره با min+max
اما ما می خواهیم اون مین و ماکسی هم که در تابع به دست اومده یه جایی ذخیره داشته باشیم حالت اول با به صورت سلولی از سلولها
و روش دوم به صورت سلولی از آرایه ها می شه انجام داد

clear all;
function ret = myfunc(v)
	global natayej;
	global index;
	mn = min(v);
	mx = max(v);
	natayej{index} = {mn , mx};
	index = index + 1;
	ret = min(v) + max(v);
end

global natayej;
global index;
natayej = {};
index = 1;
a = zeros(1,10);
for i = 1:10
	a(i) = myfunc(rand(1,16));
end



clear all;
function ret = myfunc(v)
	global natayej;
	global index;
	mn = min(v);
	mx = max(v);
	natayej(index) = [mn , mx];
	index = index + 1;
	ret = min(v) + max(v);
end


global natayej;
global index;
natayej = {};
index = 1;
a = zeros(1,10);
for i = 1:10
	a(i) = myfunc(rand(1,16));
end

----------


## coronaa

برا من با آرایه بهتره فکر کنم. ولی هر دو الآن خطا میده :

??? Undefined function or method 'myfunc' for input arguments of type 'double'.

Error in ==> test at 10
a(i) = myfunc(rand(1,16));

این ذخیره کردنها باید توی همون فانکشنی که مقادیری که میخوام ذخیره کنم باید انجام باشه.
و میخوام اینطوری باشه که مثلاً اگه دو تا مقدار میخواد ذخیره بشه و اون تابع 100 بار تکرار میشه همه ی اینها توی یه آرایه ی 100 در 2 ذخیره بشه. البته تعداد تکرار تابع دست من نیست!

----------


## rahnema1

بذارید دقیقتر توضیح بدم یک فایل به نام myfunc.m ایجاد کنید و داخلش تابع myfunc را بذارید و این تابع مثلا همون تابعی هست که در الگوریتم ژنتیک استفاده میشه که نهایتا مقادیر مین و ماکس توی natayej ذخیره میشه

----------


## coronaa

نشد باز!
اشتباه میذارم؟
این تابعی که باید با ژنتیک اجرا بشه :

function [ p ] = sys_performance( K )

global natayej; 
global index;
   

kp1 = K(1,1);
ki1 = K(1,2);
kd1 = K(1,3);
L1 = abs(K(1,4));
M1 = abs(K(1,5));

 natayej(index) = [kp1 , ki1 , kd1 , L1 , M1 ]; 
    index = index + 1;

set_param('exam2/FOPID1',...
    'kp', num2str(kp1) ,'ki', num2str(ki1),'kd', num2str(kd1),...
    'vi',num2str(-L1),'vd', num2str(M1))

simout=sim('exam2');
p = ITAE;

end

و این کد اصلی که من اجراش میکنم :

clc
clear all
tic
global natayej; 
global index; 
natayej = {}; 
index = 1; 
load_system('exam2')


options=gaoptimset('PlotFcn', @gaplotbestf, 'Display','iter');
K_opt = ga(@sys_performance, 5 , [], [], [], [],...
    [0.01 , 0.01 , 0.01 , 0.01 , 0.01 ] ,...
    [30 , 60 , 100 , 1.2 , 1 ], [], options);

toc

این پیغام رو میده :

???  In an assignment  A(I) = B, the number of elements in B and
 I must be the same.

Error in ==> sys_performance at 15
 natayej(index) = [kp1 , ki1 , kd1 , L1 , M1 ];

----------


## rahnema1

شما از همون cell استفاده کنید. اون را عمدا گذاشتم که اگه پارامترهایی که بخواهند در natayej قرار بگیرند و در صورتیکه هم اندازه نباشند به راحتی در cell جا بشن ولی وقتی که هم اندازه نباشند نمیتونن در یک آرایه جا بشن

----------


## coronaa

مرسی. انجام شد.
ولی نفهمیدم از اینکه گفتید هم اندازه نباشن!
خب 5 تا پارامتر بدست میاد. که هر 5 تا هم یه مقدار عددی هستن. مگه تعداد رقمهاشونم مهمه؟

----------


## coronaa

xxxxxxxxxxxxxxx
یه سوال پرسیده بودم که حلش کردم :)

----------


## coronaa

من باید یه کدوم از این کامپایلرها رو برای متلب انتخاب کنم. آیا از نظر سرعت فرقی با هم دارن؟ کدومش در اجرا کردن سرعت بیشتری داره؟


[1] Intel C++‎ 13.0 (with Microsoft Software Development Kit (SDK) linker) 
[2] Intel C++‎ 13.0 (with Microsoft Visual C++‎ 2010 linker) 
[3] Intel C++‎ 13.0 (with Microsoft Visual C++‎ 2012 linker) 
[4] Intel C++‎ 12.0 (with Microsoft Software Development Kit (SDK) linker) 
[5] Intel C++‎ 12.0 (with Microsoft Visual C++‎ 2008 SP1 linker) 
[6] Intel C++‎ 12.0 (with Microsoft Visual C++‎ 2010 linker) 
[7] Intel C++‎ 11.1 (with Microsoft Visual C++‎ 2008 SP1 linker) 
[8] Intel Visual Fortran 13 (with Microsoft Software Development Kit (SDK) linker) 
[9] Intel Visual Fortran 13.0 (with Microsoft Visual C++‎ 2010 linker) 
[10] Intel Visual Fortran 13.0 (with Microsoft Visual C++‎ 2012 linker) 
[11] Intel Visual Fortran 12 (with Microsoft Software Development Kit (SDK) linker) 
[12] Intel Visual Fortran 12.0 (with Microsoft Visual C++‎ 2008 SP1 linker) 
[13] Intel Visual Fortran 12.0 (with Microsoft Visual C++‎ 2008 Shell linker) 
[14] Intel Visual Fortran 12.0 (with Microsoft Visual C++‎ 2010 linker) 
[15] Intel Visual Fortran 11.1 (with Microsoft Visual C++‎ 2008 SP1 linker) 
[16] Intel Visual Fortran 11.1 (with Microsoft Visual C++‎ 2008 Shell linker) 
[17] Microsoft Software Development Kit (SDK) 7.1 
[18] Microsoft Visual C++‎ 2005 SP1 
[19] Microsoft Visual C++‎ 2008 SP1 
[20] Microsoft Visual C++‎ 2010 
[21] Microsoft Visual C++‎ 2012

----------


## rahnema1

> من باید یه کدوم از این کامپایلرها رو برای متلب انتخاب کنم. آیا از نظر سرعت فرقی با هم دارن؟ کدومش در اجرا کردن سرعت بیشتری داره؟
> 
> 
> [1] Intel C++‎ 13.0 (with Microsoft Software Development Kit (SDK) linker) 
> [2] Intel C++‎ 13.0 (with Microsoft Visual C++‎ 2010 linker) 
> [3] Intel C++‎ 13.0 (with Microsoft Visual C++‎ 2012 linker) 
> [4] Intel C++‎ 12.0 (with Microsoft Software Development Kit (SDK) linker) 
> [5] Intel C++‎ 12.0 (with Microsoft Visual C++‎ 2008 SP1 linker) 
> [6] Intel C++‎ 12.0 (with Microsoft Visual C++‎ 2010 linker) 
> ...


سلام
همون visual C++‎ 2012 انتخاب کنید که فکر کنم دردسرش کمتر باشه و سرعت هم خوبه

----------


## coronaa

سلام

این یه سری نقاطی هست که رسم کردم.

clc; clear ; close all;

x=[-18 -16.17 -14.43 -12.6 -10.67 -9.005 -7.2 -5.461 -3.653 -1.844 0.03617 1.7 3.58 5.244 6.908 9 10.6 12.48 14.29 16.09 18;
    0 -0.7306 -1.507 -2.146 -2.922 -3.516 -4.008 -4.384 -4.658 -4.886 -4.932 -4.886 -4.703 -4.475 -4.064 -3.471 -2.968 -2.237 -1.553 -0.7306 0];
plot(x(1,:),x(2,:))

حالا چطوری میتونم در بیارم که مقدار y در نقطه x برابر با 5 چنده؟ یا هر مقدار دیگه!
x مقادیر افقیه و y مقادیر عمودی.

----------


## rahnema1

> سلام
> 
> این یه سری نقاطی هست که رسم کردم.
> 
> clc; clear ; close all;
> 
> x=[-18 -16.17 -14.43 -12.6 -10.67 -9.005 -7.2 -5.461 -3.653 -1.844 0.03617 1.7 3.58 5.244 6.908 9 10.6 12.48 14.29 16.09 18;
>     0 -0.7306 -1.507 -2.146 -2.922 -3.516 -4.008 -4.384 -4.658 -4.886 -4.932 -4.886 -4.703 -4.475 -4.064 -3.471 -2.968 -2.237 -1.553 -0.7306 0];
> plot(x(1,:),x(2,:))
> ...


سلام
از تابع interp1 استفاده کنید

----------


## coronaa

ممنونم. یه چیز جدید یاد گرفتم :)

----------


## coronaa

سلام
من 10 تا فایل اکسل دارم که اعداد بصورت سطری هستن داخلش که میخوام همه رو با یه حلقه ی for بیارم توی متلب و سپس همه در یک آرایه و زیر هم قرار بگیرن. قسمت فراخوانی کدرو اینطوری نوشتم :

for i=1:10
    
    p=xlsread('myfile (i).xlsx')
    
end

ولی i جایگزین نمیشه. با d% هم نشد. چطوریه؟

----------


## rahnema1

سلام
این صورت بویسید
p = xlsread(sprintf('myfile(%d).xlsx', i));

----------


## coronaa

> سلام
> این صورت بویسید
> p = xlsread(sprintf('myfile(%d).xlsx', i));


حالا وقتی بخوام این فایل های فراخونی شده رو در یک آرایه قرار بدم چطوریه؟
من بصورت زیر نوشتم ولی خطا میده :

clc
P =[ ];
k=1;
for i=1:10
     
  p(k) = xlsread(sprintf('myfile (%d).xlsx', i));
   
   k=k+1;
end
P=p

----------


## rahnema1

p(k,:)= xlsread(sprintf('myfile (%d).xlsx', i));

----------


## coronaa

سلام

در مورد کامپایلری که گفتید رونصب کردم ولی میخوام به متلب معرفی کنم نمیشناسه و میگه باید the Microsoft Windows Software  
         Development Kit (SDK) رو نصب کنی. یه مدل رو دانلود کردم ولی درست نشد.
مراحلش به این صورته :

>> mex -setup
 
Welcome to mex -setup.  This utility will help you set up  
a default compiler.  For a list of supported compilers, see  
http://www.mathworks.com/support/com...13a/win64.html 
 
Please choose your compiler for building MEX-files: 
 
Would you like mex to locate installed compilers [y]/n? n
 
Select a compiler: 
[1] Intel C++‎‎‎‎‎‎‎ 13.0 (with Microsoft Software Development Kit (SDK) linker) 
[2] Intel C++‎‎‎‎‎‎‎ 13.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2010 linker) 
[3] Intel C++‎‎‎‎‎‎‎ 13.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2012 linker) 
[4] Intel C++‎‎‎‎‎‎‎ 12.0 (with Microsoft Software Development Kit (SDK) linker) 
[5] Intel C++‎‎‎‎‎‎‎ 12.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2008 SP1 linker) 
[6] Intel C++‎‎‎‎‎‎‎ 12.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2010 linker) 
[7] Intel C++‎‎‎‎‎‎‎ 11.1 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2008 SP1 linker) 
[8] Intel Visual Fortran 13 (with Microsoft Software Development Kit (SDK) linker) 
[9] Intel Visual Fortran 13.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2010 linker) 
[10] Intel Visual Fortran 13.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2012 linker) 
[11] Intel Visual Fortran 12 (with Microsoft Software Development Kit (SDK) linker) 
[12] Intel Visual Fortran 12.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2008 SP1 linker) 
[13] Intel Visual Fortran 12.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2008 Shell linker) 
[14] Intel Visual Fortran 12.0 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2010 linker) 
[15] Intel Visual Fortran 11.1 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2008 SP1 linker) 
[16] Intel Visual Fortran 11.1 (with Microsoft Visual C++‎‎‎‎‎‎‎ 2008 Shell linker) 
[17] Microsoft Software Development Kit (SDK) 7.1 
[18] Microsoft Visual C++‎‎‎‎‎‎‎ 2005 SP1 
[19] Microsoft Visual C++‎‎‎‎‎‎‎ 2008 SP1 
[20] Microsoft Visual C++‎‎‎‎‎‎‎ 2010 
[21] Microsoft Visual C++‎‎‎‎‎‎‎ 2012 
 
[0] None 
 
Compiler: 21 
Warning: The default location for Microsoft Visual C++‎‎‎‎‎‎‎ 2012 compiler is: 
         "C:\Program Files (x86)\Microsoft Visual Studio 11.0" 
         but either that directory does not exist or the configuration 
         is invalid. 
 
Use C:\Program Files (x86)\Microsoft Visual Studio 11.0 anyway [y]/n? y 
Please verify your choices: 
 
Compiler: Microsoft Visual C++‎‎‎‎‎‎‎ 2012  
Location: C:\Program Files (x86)\Microsoft Visual Studio 11.0 
 
Are these correct [y]/n? y
 
**************************************************  *************************** 
  Error: Microsoft Visual C++‎‎‎‎‎‎‎ 2012 requires the Microsoft Windows Software  
         Development Kit (SDK), but the SDK cannot be found.  Examine your   
         Microsoft Visual C++‎‎‎‎‎‎‎ 2012 installation. 
**************************************************  *************************** 
 
Error using mex (line 206)
Unable to complete successfully.
 
>>

شما میتونید لینکی از SDK بذارید تا دانلود کنم؟
یا یه راه حلی بدین.
تشکر

----------


## rahnema1

سلام
شاید ویژوال ++C را کامل نصب نکردید وگرنه فکر کنم sdk با اون نصب میشه
اینجا هم لینک sdk هست:
https://msdn.microsoft.com/en-us/win.../hh852363.aspx
فکر کنم نصب آنلاین هست

----------


## coronaa

> سلام
> شاید ویژوال ++C را کامل نصب نکردید وگرنه فکر کنم sdk با اون نصب میشه
> اینجا هم لینک sdk هست:
> https://msdn.microsoft.com/en-us/win.../hh852363.aspx
> فکر کنم نصب آنلاین هست


نمیدونم!
من امروز sdk رو بصورت آنلاین داشتم نصب میکردم. دیدم اصلاً جلویی نمیره. قطعش کردم.
من واسه ویندوز 7 داشتم نصب میکردم.

----------


## rahnema1

داخل ویژوال استادیو باید sdk باشه یه بار دیگه کامل نصب کنید

----------


## coronaa

این لینکی که گذاشتم الآن توش sdk هست؟؟؟

----

جدا نمیشه پیدا کرد؟ این حجمش زیاده!

من این ++C رو نصب کرده بودم :

aa.jpg

----------


## rahnema1

> این لینکی که گذاشتم الآن توش sdk هست؟؟؟
> 
> http://ariadl.com/2266-دانلود-نرم-اف...ک-شده.html
> 
> جدا نمیشه پیدا کرد؟ این حجمش زیاده!
> 
> من این ++C رو نصب کرده بودم :
> 
> aa.jpg


شما اصلا ویژوال سی پلاس پلاس نصب نکردید!
این نسخه رایگان برنامه به همراه sdk و بدون کرک و ویروس هست حدود 600 مگ
http://www.microsoft.com/en-us/downl....aspx?id=34673
اگه نمیشه دانلود کرد هر جا برید میتونید سی دی برنامه را گیر بیارید

----------


## coronaa

> شما اصلا ویژوال سی پلاس پلاس نصب نکردید!
> این نسخه رایگان برنامه به همراه sdk و بدون کرک و ویروس هست حدود 600 مگ
> http://www.microsoft.com/en-us/downl....aspx?id=34673
> اگه نمیشه دانلود کرد هر جا برید میتونید سی دی برنامه را گیر بیارید


نصبش کردم. فولدر sdk ساخته شد ولی داخلش خالیه!
و متلب همچنان میگه sdk وجود نداره.

vvv.jpg

----------


## rahnema1

در سایت زیر
http://blog.airesoft.co.uk/2014/05/windows-sdk-8-1-iso
 شما فایل 
http://www.airesoft.co.uk/files/DLIsos.zip
را دانلود کنید داخلش فایل Win8SDKFiles.txt هست که لینک تمام فایلهای sdk داخلشه
این لینکها را بدید به دانلود منیجر و همه داخل یه فولدر خاص دانلود بشن
بعد فایل sdksetup.exe را اجرا کنید تا sdk نصب بشه

----------


## coronaa

> در سایت زیر
> http://blog.airesoft.co.uk/2014/05/windows-sdk-8-1-iso
>  شما فایل 
> http://www.airesoft.co.uk/files/DLIsos.zip
> را دانلود کنید داخلش فایل Win8SDKFiles.txt هست که لینک تمام فایلهای sdk داخلشه
> این لینکها را بدید به دانلود منیجر و همه داخل یه فولدر خاص دانلود بشن
> بعد فایل sdksetup.exe را اجرا کنید تا sdk نصب بشه


سیستمی که دارم روش کار میکنم وینوز 7 نصبه. نکنه اونی هم که دانلود کردم واسه ویندوز 8 بود!؟؟

----------


## rahnema1

اشکال نداره sdk8 برای ویندوز 7 هم کار می کنه

----------


## coronaa

> اشکال نداره sdk8 برای ویندوز 7 هم کار می کنه


دستت درد نکنه. خیلی زحمت کشیدی مهندس.
حجم کلیش حدوداً چقدر میشه؟ جایی نوشته نیست؟

----------


## rahnema1

فکر کنم 300 مگ

----------


## coronaa

سلام

میدونید برای رسم این نوع تصویر از چه دستوری باید استفاده کنم؟
 با plot3 که اینطوری طبقه طبقه در نمیاد! دستور خاصی داره؟؟؟


range.jpg

----------


## rahnema1

سلام، داده های شما به چه صورت هست؟

----------


## coronaa

> سلام، داده های شما به چه صورت هست؟


چطوری نشون بدم؟
 مثلاً سه تا پارامتر دارم که هر کدوم 11000 تا عدد هستن بین 0 تا 100

یکیش رو پلات کردم :untitled.jpg

----------


## rahnema1

شما لازمه ابتدا تولباکس geom3d را از این سایت دریافت کنید:
http://www.mathworks.com/matlabcentr...e/24484-geom3d
این تابع برای ترسیم استفاده کنید:

function plotSlices(NODES, level)
    FACES = minConvexHull(NODES);
    figure, hold on;
    for i = level
        PLANE = createPlane([0 0 i],[0 1 i], [ 1 1 i]) ;
        SLICE = polyhedronSlice(NODES, FACES, PLANE);
        fillPolygon3d(SLICE);
    end
end

این هم نحوه استفاده

NODES = randn(50, 3);
plotSlices(NODES, (-1:1))

NODES که نقاط شماست و level هم که ارتفاع سطوحی هست که می خواد رسم بشه

----------


## coronaa

سلام
دستت درد نکنه. نصبش کردم.
کد شما رو هم اجرا کردم ولی چرا سه بعدی نشون نمیده؟؟؟

untitled.jpg

----------


## rahnema1

> سلام
> دستت درد نکنه. نصبش کردم.
> کد شما رو هم اجرا کردم ولی چرا سه بعدی نشون نمیده؟؟؟
> 
> untitled.jpg


خب توی متلب ابزار برای چرخش نمودار باید باشه از توی منوها پیدا کنید وقتی با ماوس روی تصویر می کشید باید بچرخه من توی اکتاو به راحتی شکل را به صورت سه بعدی می چرخونم

----------


## coronaa

باشه امتحان میکنم.
فعلن شبیه سازیم در حال اجراست که حدود 18 ساعت طول میکشه :)
بعد از اون تستش میکنم.
بازم ممنونم.

----------


## coronaa

سلام
آقا من کد رو با داده های خودم اجرا کردم ولی خطا میده.
من سه پارامتر Kp1 , Ki1 , Kd1 دارم که هر کدوم 10857 نقطه دارند و همچنین همه بین 0 تا 100 رنجشون هست. به صورت زیر نوشتم :

load Data_Conventional

Kp1 = kp1co;
Ki1 = ki1co;
Kd1 = kd1co;

NODES = [Kp1 Ki1 Kd1]; 
plotSlices(NODES, (0:100))

با داده های شما اجرامیکنم پلات میکنه. ولی با داده های خودم نه. خطاش به این صورته :

??? Attempted to access px(1); index out of bounds because numel(px)=0.

Error in ==> fillPolygon3d at 71
px = [px; px(1)];

Error in ==> plotSlices at 7
        fillPolygon3d(SLICE);

Error in ==> plottt3d at 10
plotSlices(NODES, (0:100))

----------


## rahnema1

نمیدونم دقیقا مشکل کجاست ولی سعی کنید تعداد level ها را کم کنید مثلا
10:10:90

----------


## coronaa

تعداد level چه تاثیری داره و اون عکس اصلی که گذاشتم اصلن چطوری میشه فهمید که اعدا kp , ki , kd نهایتن به چه عددی ختم شد؟
چون با گذشت زمان این سه تا پارامتر هر کدوم به سمت یک عدد ثابتی میل می کنن.

----------


## rahnema1

> تعداد level چه تاثیری داره و اون عکس اصلی که گذاشتم اصلن چطوری میشه فهمید که اعدا kp , ki , kd نهایتن به چه عددی ختم شد؟
> چون با گذشت زمان این سه تا پارامتر هر کدوم به سمت یک عدد ثابتی میل می کنن.


از minو max می تونید بفهمید محدوده این متغیرها چی هستند 
این دستور هم خوبه:

FACES = minConvexHull(NODES);
drawMesh(NODES,FACES)

----------


## coronaa

> از minو max می تونید بفهمید محدوده این متغیرها چی هستند


منظورم از روی نمودار بود!




> این دستور هم خوبه:
> 
> FACES = minConvexHull(NODES);
> drawMesh(NODES,FACES)


این شکلش بصورت زیر شد ولی خب از روی نمودار چطوری میشه فهمید پارامتراش از چند به چند رفتن؟؟؟

untitled.jpg

 میشه شما هم نموداری که با اوکتاو پلات میکنید رو نشون بدین؟ (با دستور اولی)

----------


## rahnema1

توی اکتاو تابع fillPolygon3d کار نمی کنه و مجبورم به جای اون از drawPolygon3d استفاده کنم که چندضلعی تو خالی ایجاد میشه
اولی شکل سه بعدی
دومی پولیگونهای چند طبقه
و سومی ترکیب اون دو تا
http://www.sharefile.ir/uploads/1430785334.png
http://www.sharefile.ir/uploads/1430821213.png
http://www.sharefile.ir/uploads/1430816215.png

از شکل این جور متوجه میشم که داده های شما outlier داره بهتره نقاط را به این صورت پلات کنید
plot3(NODES(:,1),NODES(:,2),NODES(:,3),'*')
که همچین شکلی ایجاد می شه:
http://www.sharefile.ir/uploads/1430829270.png

----------


## coronaa

داده های من outlier نداره. همونیه که توی پست 104 گذاشتم.
ضمن اینکه من اصلن این شکل ها رو نمیخواستم. همونی که توی پست 102 گذاشتم رو میخواستم. ولی شکل دوم شما یکمی شبیه هست. اگه نمیشه که دیگه بیخیال شید تا وقت شما هم گرفته نشه.

----------


## rahnema1

الان من نمیدونم مشکل چیه با مثال و شکل هم برای شما گذاشتم اگه تو متلب جواب نمیده تقصیر من نیست

----------


## coronaa

سلام
مهندس اینو میشه توی اکتاو اجرا کنید؟
توی متلب که خطا میده.

Kp1 =0:60 ;
Ki1 =0:200 ;
Kd1 =0:1000 ;

NODES = [Kp1 Ki1 Kd1];
figure
plotSlices(NODES, 9 )

----------


## rahnema1

اینجور که نمیشه آرایه درست کرد باید سه تا ستون هم اندازه داشته باشه
اون پست قبلی را که گفتم با try انجام بدید اگه ارور داد از ارور صرفنظر کنه

NODES = randn(50, 3);
try
    plotSlices(NODES, (-1:1))
catch
end

----------


## coronaa

> اینجور که نمیشه آرایه درست کرد باید سه تا ستون هم اندازه داشته باشه
> 
> اون پست قبلی را که گفتم با try انجام بدید اگه ارور داد از ارور صرفنظر کنه
> 
> NODES = randn(50, 3);
> try
>     plotSlices(NODES, (-1:1))
> catch
> end


 اون برنامه قبلی شما که اجرا میشه. عکسش رو توی پست 106 گذاشته بودم.
من مشکلم اینه که چرا با داده های خودم پلات نمیشه. داده ها رو بصورت ستونی درست کردم و هم اندازه هم هستن :

Kp =linspace(0,60,50)';
Ki =linspace(0,200,50)';
Kd =linspace(0,1000,50)';
% -----------------

NODES = [Kp Ki Kd];
plotSlices(NODES,(-1:1))

----------


## rahnema1

> اون برنامه قبلی شما که اجرا میشه. عکسش رو توی پست 106 گذاشته بودم.
> من مشکلم اینه که چرا با داده های خودم پلات نمیشه. داده ها رو بصورت ستونی درست کردم و هم اندازه هم هستن :
> 
> Kp =linspace(0,60,50)';
> Ki =linspace(0,200,50)';
> Kd =linspace(0,1000,50)';
> % -----------------
> 
> NODES = [Kp Ki Kd];
> plotSlices(NODES,(-1:1))


آخه این که مختصات یک خط سه بعدیه نه یک حجم سه بعدی! باز هم دوباره میگم اگه شما با داده های اصلی که دارید کار می کنید از try استفاده کنید دیگه ارور نمیده

----------


## coronaa

> آخه این که مختصات یک خط سه بعدیه نه یک حجم سه بعدی! باز هم دوباره میگم اگه شما با داده های اصلی که دارید کار می کنید از try استفاده کنید دیگه ارور نمیده


داده های من همین چیزی هست که گذاشتم. با try خطا نمیده ولی چیزی هم پلات نمیکنه!

Kp =linspace(0,60,50)';
Ki =linspace(0,200,50)';
Kd =linspace(0,1000,50)';
% -----------------

NODES = [Kp Ki Kd];
try
plotSlices(NODES,(-1:1))
catch
end

شما داده ها رو یکدفعه تولید کردین ولی من جدا جدا داشتم و پیش هم گذاشتم. چه فرقی میکنه؟
من تصویر اصلی رو هم از *اینجا* گرفتم.

----------


## rahnema1

مگه نگفتید یکی از پارامترها به این صورته؟
https://barnamenevis.org/attachment.p...2&d=1430328678
یه کم دارم گیج می شم

----------


## coronaa

> مگه نگفتید یکی از پارامترها به این صورته؟
> https://barnamenevis.org/attachment.p...2&d=1430328678
> یه کم دارم گیج می شم


درسته ولی من فکر کنم مقاله اومد فقط رنج پارامترها رو بصورت نموداری نشون داد. دیگه نیومد نقطه به نقطه رو پلات کنه!
همون قسمتی که های لایت کردم. منم میخوام بگم رنج این سه تا پارامتر در این محدوده هست و پلات بشه. مگه اون نمودار اصلی اینو نشون نمیده؟

----------


## rahnema1

شما بالاخره تونستید پلات را به صورت سه بعدی بچرخونید؟
چرا این که میگم انجام نمیدید؟ لطفا با try اون سه تا پارامتر را با تابع plotSlices که سطوح اون 10:10:90 باشه پلات کنید. خواهشا
با drawMesh هم پلات کنید و بچرخونید و تصویر سه بعدی را اینجا بذارید

----------


## coronaa

منظورت کدوم پارامترها بود؟
من با این داده ها انجام دادم :
clc; clear; close all;

Kp =linspace(0,60,50)';
Ki =linspace(0,200,50)';
Kd =linspace(0,1000,50)';

NODES = [Kp Ki Kd];

try
    plotSlices(NODES, (10:10:90))
catch
end
% -------------------------------
figure
FACES = minConvexHull(NODES);
try
    drawMesh(NODES,FACES)
catch
end

خطای زیر رو داد :
??? Error using ==> qhullmx
qhull precision error: initial facet 3 is coplanar with the interior point

ERRONEOUS FACET:


While executing:  | qhull Qt

Options selected for Qhull 2003.1 2003/12/30:
  Qtriangulate  _pre-merge  _zero-centrum  _max-width 1e+003
  Error-roundoff 1.1e-012  _one-merge 7.5e-012  _near-inside 3.7e-011
  Visible-distance 2.1e-012  U-coplanar-distance 2.1e-012
  Width-outside 4.3e-012  _wide-facet 1.3e-011


The input to qhull appears to be less than 3 dimensional, or a
computation has overflowed.

Qhull could not construct a clearly convex simplex from points:


The center point is coplanar with a facet, or a vertex is coplanar
with a neighboring facet.  The maximum round off error for
computing distances is 1.1e-012.  The center point, facets and distances
to the center point are as follows:




facet
 p42
 p49
 p0
 distance= -7.1e-015

facet
 p9
 p49
 p0
 distance= -7.1e-015

facet
 p9
 p42
 p0
 distance=    0

facet
 p9
 p42
 p49
 distance= -1.4e-014


These points either have a maximum or minimum x-coordinate, or
they maximize the determinant for k coordinates.  Trial points
are first selected from points that maximize a coordinate.


The min and max coordinates for each dimension are:

  0:         0        60  difference=   60

  1:         0       200  difference=  200

  2:         0      1000  difference= 1000


If the input should be full dimensional, you have several options that
may determine an initial simplex:
  - use 'QJ'  to joggle the input and make it full dimensional
  - use 'QbB' to scale the points to the unit cube
  - use 'QR0' to randomly rotate the input for different maximum points
  - use 'Qs'  to search all points for the initial simplex
  - use 'En'  to specify a maximum roundoff error less than 1.1e-012.
  - trace execution with 'T3' to see the determinant for each point.

If the input is lower dimensional:
  - use 'QJ' to joggle the input and make it full dimensional
  - use 'Qbk:0Bk:0' to delete coordinate k from the input.  You should
    pick the coordinate with the least range.  The hull will have the
    correct topology.
  - determine the flat containing the points, rotate the points
    into a coordinate plane, and delete the other coordinates.
  - add one or more points to make the input full dimensional.



Error in ==> convhulln at 71
[k,vv] = qhullmx(x', opt);

Error in ==> minConvexHull at 44
hull = convhulln(nodes);

Error in ==> plot4 at 15
FACES = minConvexHull(NODES);

----------


## coronaa

به اینصورت اجرا کردم :

clc; clear; close all;

NODES = randn(50,3);

try
    plotSlices(NODES, (10:10:90))
catch
end
% -------------------------------
figure
FACES = minConvexHull(NODES);
try
    drawMesh(NODES,FACES)
catch
end

که دستور اولی رو پلات نکرد (خطایی هم نداد) و دستور دومی رو بصورت زیر پلات کرد :

plot5.jpg

----------


## coronaa

به این صورت که انجام دادم :

clc; clear; close all;

NODES = randn(50,3);

plotSlices(NODES, (-1:1))
% -------------------------------
figure
FACES = minConvexHull(NODES);
try
    drawMesh(NODES,FACES)
catch
end

هر دو رو پلات کرد ولی level اون چیزی که خواستین نیست. با اون level خطا میده که توی پست قبلی انجام دادم.

1.jpg

2.jpg

----------


## coronaa

من میخوام با این رنج های زیر نموداری مثل مقاله رسم بشه :

Kp =linspace(0,60,50)';
Ki =linspace(0,200,50)';
Kd =linspace(0,1000,50)';

میشه؟؟؟

level رو میشه هر طوری انتخاب کرد؟

----------


## rahnema1

همه چیز را ترسیم کردید به جز اون چیزی که باید ترسیم کنید :)
از linspace  استفاده نکنید
 سه تا بردار دارید که یکی از اونها به این شکل هست:
https://barnamenevis.org/attachment.p...2&d=1430328678
اون سه تا را به عنوان سه ستون NODES در نظر بگیرید و با  plotSlices و drawMesh ترسیم کنید و بچرخونید و حتما از try هم استفاده کنید

----------


## coronaa

مگه توی اون تصویر اصلی نیومد فقط رنج پارامترها رو نشون بده؟ فکر نکنم اومده باشه که نقاط بین این دو رنج رو هم پلات کرده باشه!
به هر حال من همون چیزی که گفتید رو قرار دادم.
clc; clear; close all

load Data_Conventional

Kp =kd1co;
Ki =kp1co;
Kd =ki1co;
% -----------------

NODES = [Kp Ki Kd];
try
    plotSlices(NODES,(-1:1))
catch
end

figure
FACES = minConvexHull(NODES);
try
    drawMesh(NODES,FACES)
catch
end

قسمت اولی رو پلات نمیکنه ولی قسمت دومی بصورت زیر شد :

rrrr.jpg

----------


## coronaa

مهندس ببخشید من هنوز نتونستم کامپایلر رو نصب کنم. یعنی sdk که گفته بودی رو هم دانلود کردم ولی وسط راه یه پیغامی میده به این صورت :
ضاهراً یه فایل وجود نداره. درسته؟

problem.jpg


problem2.jpg

----------


## rahnema1

اون -1:1  برای اون مثال دیگه بود واسه داده های خودتون اینجور بذارید

    plotSlices(NODES,(5:5:50))

واسه نصب هم گزینه دوم را انتخاب کنیدو مسیر فولدر sdk را معرفی کنید

----------


## coronaa

> اون -1:1 برای اون مثال دیگه بود واسه داده های خودتون اینجور بذارید
> 2	plotSlices(NODES,(5:5:50))


انجام دادم. اتفاق خاصی نیوفتاد!
من داده ها رو توی اکسل ذخیره کنم و اینجا آپ کنم میتونید خودتون با اکتاو بررسی کنید؟




> واسه نصب هم گزینه دوم را انتخاب کنیدو مسیر فولدر sdk را معرفی کنید


تصویر دومی که گذاشتم واسه همین بود. وقتی از مسیر کامپیوتر فراخونی میکنم خطای تصویر دوم رو میده.

----------


## rahnema1

ظاهرا دانلود نکردید لینکش داخل همون فایل 
Win8.1SDKFiles.txt هست
http://download.microsoft.com/downlo....29750/Windows Software Development Kit-x86_en-us.msp

----------


## rahnema1

داده ها را بفرستید

----------


## coronaa

> داده ها را بفرستید


http://www.sharefile.ir/uploads/1431184856.xlsx

تشکر

----------


## rahnema1

> http://www.sharefile.ir/uploads/1431184856.xlsx
> 
> تشکر


شما level را به صورت 22:3:47 وارد کنید نشون میده

----------


## coronaa

درست شد.
ولی خب دلیلش چیه که level رو این اعداد انتخاب کردین و بر چه اساسی؟
دوم اینکه از روی نمودار حالا چطوری میشه فهمید که Kp به سمت چه عددی میل کرد؟

ppp.jpg

----------


## rahnema1

گفتم که از min و max استفاده کنید تا محدوده متغیر ها را متوجه بشید از روی نمودار mesh یا نمودار نقطه ای هم میشد فهمید محدوده اونها چه قدره
اینکه kp به سمت چه عددی میل کرده نمیدونم از روی نمودار که مشخصه

----------


## coronaa

> گفتم که از min و max استفاده کنید تا محدوده متغیر ها را متوجه بشید از روی نمودار mesh یا نمودار نقطه ای هم میشد فهمید محدوده اونها چه قدره
> اینکه kp به سمت چه عددی میل کرده نمیدونم از روی نمودار که مشخصه


ممنونم.
من منظورم چیز دیگه ای بود. فرص کنید کدی در دسترس نیست و خواننده میواد از روی نمدار متوجه بشه که رنجشون چیه!
مثل همون چیزی که توی مقاله هست. پس اصلن واسه چی این نمودار رو رسم کرده بود؟
بازم دستتون درد نکنه. خیلی زحمت کشیدین.

----------


## coronaa

سلام
مهندس ببخشید. اون لینکی که واسه sdk گذاشته بودین رو دانلود کردم و توی فولدر مربوطه قرار دادم ولی همچنان همون خطا رو میده!
من فایلهایی که دانلود کردم به صورت زیره :1.jpg

فایلی که شما گفتید، شماره 1 هست و چیزی که ظاهرن موقع نصب میخواد فراخونی کنه شماره 2 هست. فایله وجود داره ولی خطا میده.
نمیشه کامپایلر دیگه ای نصب کرد؟

3.jpg

----------


## rahnema1

نمیدونم مشکل کجاست. اگه بتونید توی تنظیمات folder option در ویندوز گزینه نشون دادن extension ها رافعال کنید تا مشخص بشه پسوند فایل exe هست یا msu
من خودم تا به حال این را نصب نکردم توی اون سایت لینکش را دیدم گفتم شاید به درد شما بخوره حالا اگه تو نصبش مشکل دارید فکر کنم بهتره یه عدد dvd ویژوال استادیو کامل البته همون نسخه ای که می خواهید فکر کنم 2012 بود را یه جا پیدا کنید که این سی دی ها همه جا ریخته و فراوان هست

----------


## coronaa

> نمیدونم مشکل کجاست. اگه بتونید توی تنظیمات folder option در ویندوز گزینه نشون دادن extension ها رافعال کنید تا مشخص بشه پسوند فایل exe هست یا msu
> من خودم تا به حال این را نصب نکردم توی اون سایت لینکش را دیدم گفتم شاید به درد شما بخوره حالا اگه تو نصبش مشکل دارید فکر کنم بهتره یه عدد dvd ویژوال استادیو کامل البته همون نسخه ای که می خواهید فکر کنم 2012 بود را یه جا پیدا کنید که این سی دی ها همه جا ریخته و فراوان هست


سلام مهندس عزیز
بالاخره پس از روزها تلاش و کوشش تونستم بر طرف کنم. یه ++c دیگه پیدا کردم و نصب کردم که جواب داد خدا رو شکر.
دست شما هم درد نکنه
:)

----------


## coronaa

سلام آقای مهندس. وقت شما بخیر.
ببخشید یه مشکل دیگه داشتم. من فرمول زیر رو میخوام کد بزنم و پلات کنم :
soc.jpg
بصورت زیر نوشتم ولی توی لحظه ی صفر خطا میگیره :
clc; close all;

tic
Time=linspace(1,10,250000);
P=rand(1,250000);
soc=zeros(1,250000);
soc(0)=100;
for i=1:length(Time)
soc(i)=(soc(i-1)+(P(i)*(Time(i)-Time(i-1))))/100;
end
socc=soc';
plot(Time,socc);
toc

خطا :
??? Attempted to access soc(0); index must be a positive integer or
logical.

Error in ==> Soc at 7
soc(0)=100;

----------


## rahnema1

سلام
این را امتحان کنید

soc(2:end) = (soc(1:(end -1)) + P(2:end) .*deta(2:end)) * 0.01;
soc = cumsum(soc);

----------


## coronaa

deta الآن چیه؟
البته من از لحظه ی اول میخوام. وگرنه از لحظه ی دوم رو بدست میارم. وقتی که بصورت زیر باشه :

soc(1)=100;
for i=2:length(Time)
soc(i)=(soc(i-1)+(P(i)*(Time(i)-Time(i-1))))/100;
end

----------


## rahnema1

> deta الآن چیه؟


تو همون فرمول دلتا داریم دیگه بر اساس همون  عکس فرمول که گذاشتید من نوشتم

----------


## coronaa

> تو همون فرمول دلتا داریم دیگه بر اساس همون  عکس فرمول که گذاشتید من نوشتم


درسته ولی دلتا رو که شما تعریف نکردین!
مگه متلب این عبارت رو میشناسه؟

----------


## coronaa

> سلام
> این را امتحان کنید
> 
> soc(2:end) = (soc(1:(end -1)) + P(2:end) .*deta(2:end)) * 0.01;
> soc = cumsum(soc);


من اصلن متوجه نشدم که شما سمت چپ معادله رو چرا برداری نوشتین؟؟ ما که از همون اول مقادیر soc رو نداریم!
این رابطه بازگشتیه و باید با مقدار فبل خودش حساب بشه.

----------


## rahnema1

این را امتحان کنید

P = rand(1,250000);
soc=zeros(1,250000);
soc(1) = 100;
delta = diff(1:250000);
soc(2:end) = (soc(1:(end -1)) + P(2:end) .* delta) * 0.01;
soc = cumsum(soc);

----------


## coronaa

> این را امتحان کنید
> 
> P = rand(1,250000);
> soc=zeros(1,250000);
> soc(1) = 100;
> delta = diff(1:250000);
> soc(2:end) = (soc(1:(end -1)) + P(2:end) .* delta) * 0.01;
> soc = cumsum(soc);


مرسی. همونی شد که توی پست 146 گذاشتم.

----------


## coronaa

سلام مهندس
 وقتت بخیر.
ببخشید من یه حلقه دارم که هفت بار اجرا میشه و در هر مرحله (سطر) تعداد ستون های متفاوتی داره. بصورت تصویر زیر.
من چطوری باید سلولش رو تعریف کنم؟ باید یه سلول 7 در 3 بشه. چون نهایتن تعداد ستونها به 3 میرسه.
البته جای اون حروفها اعداد قرار میگیره.
aaa.jpg

----------


## rahnema1

سلام
درست متوجه نشدم ولی مثلا در این مثال x چیزی هست که قراره در هر سطر جا داده بشه

jadval = {};
for i = 1 : 7
	jadval{i} = x;
end

----------


## coronaa

برنامه ی من 7 بار با حلقه for اجرا میشه.
در حلقه اول، یه مقدار وجود داره که در سطر اول و ستون اول قرار میگیره. یعنی در سلول a
در حلقه دوم و سوم هم همینطور جای b و c قرار میگیرن.
در حلقه چهارم، دو مقدار بدست میاد که در سطر چهارم و ستونهای اول و سوم قرار میگیرن. یعنی جای d , e
...
درحلقه هفتم، برای x سه مقدار داریم. یعنی یک بردار سه 1 در سه هست، که در سطر 7 و ستون یک تا سه قرار میگیره.
اینو چطوری باید توی یک سلول و یا آرایه ذخیره کنم؟
آرایه باشه بهتره. منظورم بصورت ماتریسی هست.

----------


## rahnema1

خب یک آرایه خالی به همین ابعاد 7 در 3 ایجاد کنید و در حلقه مقدار دهی کنید . الان من درست متوجه نمیشم

----------


## coronaa

میخوام مقدار offer توی یک آرایه قرار بگیره. مثل شکلی که قرار دادم :

alpha0=[.4,.52,.6];
beta0=[1.2 1.2 1.2];
lambda=1;
D0=[5.3,3.6,1.3];
m0=[1,1,1];
k=.38;

% % -----------------------------
n=[1 2 3];
for i=1:numel(n)
    S{i}=nchoosek(n,i);
end
% % -----------------------------
Coalition=1;
profit=[];
 jadval = zeros(7,3);
for i=1:numel(S)
    for j=1:size(S{i},1)
        alpha=[];
        beta=[];
        
        for kk=1:size(S{i},2)
            alpha=[alpha ones(1,m0(S{i}(j,kk))).*alpha0(S{i}(j,kk))];
        end
        for kk=1:size(S{i},2)
            beta=[beta ones(1,m0(S{i}(j,kk))).*beta0(S{i}(j,kk))];
        end
        m=sum(m0(S{i}(j,:)));
        D=sum(D0(S{i}(j,:)));
        fun_MG0 = @(q,alpha,beta,k,D) -sum((2*alpha.*q+beta + k .*(D-sum(q))).*q -alpha.*(q).^2-beta.*q);
        fun_MG = @(q) fun_MG0(q,alpha,beta,k,D) ;
        lb=zeros(1,m); % LowerBound
        ub=ones(1,m);  % UpperBound
        [x1, fx1]=fmincon(fun_MG,ones(1,m)*.99,[],[],[],[],lb,ub);
        profit(Coalition)=(-fx1);
        Coalition = Coalition + 1;
        fprintf('\n Emount of Energy :\n');
        disp(x1);
        fprintf('\n---------------------------------------\n');
        fprintf('\nOffer Without Saticfiction Function :\n');
        disp(2*alpha.*x1+ beta);
        fprintf('\n---------------------------------------\n');
        fprintf('\nOffer With Saticfiction Function :\n');
        offerr=2*alpha.*x1+ beta + k .*(D- sum(x1));
        disp(2*alpha.*x1+ beta + k .*(D- sum(x1)));
        fprintf('\n---------------------------------------\n');
         
    end 
end

----------


## rahnema1

فکر کنم اینجور بذارید درست می شه
offer{i}(j) = 2*alpha.*x1+ beta + k .*(D- sum(x1));

----------


## coronaa

??? Subscripted assignment dimension mismatch.

 Error in ==> bbbbbbbb at 46
        offer{i}(j) = 2*alpha.*x1+ beta + k .*(D- sum(x1));

----------


## rahnema1

این یکی

alpha0=[.4,.52,.6];
beta0=[1.2 1.2 1.2];
lambda=1;
D0=[5.3,3.6,1.3];
m0=[1,1,1];
k=.38;

% % -----------------------------
n=[1 2 3];
for i=1:numel(n)
    S{i}=nchoosek(n,i);
end
% % -----------------------------
Coalition=1;
profit=[];
 jadval = zeros(7,3);
 offer={};
for i=1:numel(S)
offerr_array=[];
    for j=1:size(S{i},1)
        alpha=[];
        beta=[];
        
        for kk=1:size(S{i},2)
            alpha=[alpha ones(1,m0(S{i}(j,kk))).*alpha0(S{i}(j,kk))];
        end
        for kk=1:size(S{i},2)
            beta=[beta ones(1,m0(S{i}(j,kk))).*beta0(S{i}(j,kk))];
        end
        m=sum(m0(S{i}(j,:)));
        D=sum(D0(S{i}(j,:)));
        fun_MG0 = @(q,alpha,beta,k,D) -sum((2*alpha.*q+beta + k .*(D-sum(q))).*q -alpha.*(q).^2-beta.*q);
        fun_MG = @(q) fun_MG0(q,alpha,beta,k,D) ;
        lb=zeros(1,m); % LowerBound
        ub=ones(1,m);  % UpperBound
        [x1, fx1]=fmincon(fun_MG,ones(1,m)*.99,[],[],[],[],lb,ub);
        profit(Coalition)=(-fx1);
        Coalition = Coalition + 1;
        fprintf('\n Emount of Energy :\n');
        disp(x1);
        fprintf('\n---------------------------------------\n');
        fprintf('\nOffer Without Saticfiction Function :\n');
        disp(2*alpha.*x1+ beta);
        fprintf('\n---------------------------------------\n');
        fprintf('\nOffer With Saticfiction Function :\n');
        offerr_array(j)=2*alpha.*x1+ beta + k .*(D- sum(x1));
        disp(2*alpha.*x1+ beta + k .*(D- sum(x1)));
        fprintf('\n---------------------------------------\n');
         
    end 
    offer{i} = offerr_array;
end

----------


## coronaa

???  In an assignment  A(I) = B, the number of elements in B and
 I must be the same.

Error in ==> aaaaaaaaaaaaa at 46
        offerr_array(j)=2*alpha.*x1+ beta + k .*(D- sum(x1));

----------


## rahnema1

این یکی دیگه فکر کنم مشکل ایجاد نکنه

alpha0=[.4,.52,.6];
beta0=[1.2 1.2 1.2];
lambda=1;
D0=[5.3,3.6,1.3];
m0=[1,1,1];
k=.38;

% % -----------------------------
n=[1 2 3];
for i=1:numel(n)
    S{i}=nchoosek(n,i);
end
% % -----------------------------
Coalition=1;
profit=[];
 jadval = zeros(7,3);
 offer={};
for i=1:numel(S)
offer_cell={};
    for j=1:size(S{i},1)
        alpha=[];
        beta=[];
        
        for kk=1:size(S{i},2)
            alpha=[alpha ones(1,m0(S{i}(j,kk))).*alpha0(S{i}(j,kk))];
        end
        for kk=1:size(S{i},2)
            beta=[beta ones(1,m0(S{i}(j,kk))).*beta0(S{i}(j,kk))];
        end
        m=sum(m0(S{i}(j,:)));
        D=sum(D0(S{i}(j,:)));
        fun_MG0 = @(q,alpha,beta,k,D) -sum((2*alpha.*q+beta + k .*(D-sum(q))).*q -alpha.*(q).^2-beta.*q);
        fun_MG = @(q) fun_MG0(q,alpha,beta,k,D) ;
        lb=zeros(1,m); % LowerBound
        ub=ones(1,m);  % UpperBound
        [x1, fx1]=fmincon(fun_MG,ones(1,m)*.99,[],[],[],[],lb,ub);
        profit(Coalition)=(-fx1);
        Coalition = Coalition + 1;
        fprintf('\n Emount of Energy :\n');
        disp(x1);
        fprintf('\n---------------------------------------\n');
        fprintf('\nOffer Without Saticfiction Function :\n');
        disp(2*alpha.*x1+ beta);
        fprintf('\n---------------------------------------\n');
        fprintf('\nOffer With Saticfiction Function :\n');
        offer_cell{j}=2*alpha.*x1+ beta + k .*(D- sum(x1));
        disp(2*alpha.*x1+ beta + k .*(D- sum(x1)));
        fprintf('\n---------------------------------------\n');
         
    end 
    offer{i} = offer_cell;
end

----------


## coronaa

ممنونم. درست شد ولی سلولهای تو در تو شد.
یکمی فراخونی کردنش سخت شد.
نمیشه همه در یک آرایه قرار بگیرن؟ من دقیقاً مثل همون شکل میخوام.

----------


## rahnema1

ظاهرا سایز این offer ها مختلفه که نمیشه داخل آرایه قرار بگیره

----------


## coronaa

خب نمیشه خونه هایی که خالی هست تهی یا صفر باشه؟
من ادامه برنامه کد پایین رو گذاشتم ولی نمیدونم بجای xxx چی باید بذارم؟

m = zeros(7, 3);  
for i=1:7 
    for j=1:3 
        m(i,j) = xxx; 
    end 
end

----------


## rahnema1

الان من نمیدونم محتوای این سلول چیه و چند در چند هست اگه بتونید فقط offer را در فایل mat بذارید و بفرستید ببینم چه شکلی داره

----------


## coronaa

> الان من نمیدونم محتوای این سلول چیه و چند در چند هست اگه بتونید فقط offer را در فایل mat بذارید و بفرستید ببینم چه شکلی داره


http://www.sharefile.ir/uploads/1435354455.rar

----------


## rahnema1

این را امتحان کنید

matcell = cell2mat(offer);
size_col = 0;
size_row = numel(matcell);
for i = 1: size_row
	size_col = max(size_col , numel(matcell{i}));
end;
mat = zeros(size_row, size_col);
for i = 1: size_row
	mat(i,1:numel(matcell{i})) = matcell{i};
end

----------


## coronaa

??? Error using ==> cell2mat at 55
Cannot support cell arrays containing cell arrays or objects.

Error in ==> aaaaaaaaaaaaa at 53
matcell = cell2mat(offer);

----------


## rahnema1

این یکی 

size_col = 0;
size_row = 0;
for i= 1:numel(offer)
	offeri = offer{i};
	size_row = size_row + numel(offeri);
	size_col = size_col + size(offeri, 2);
end
mat = zeros(size_row, size_col);
k = 1;
for i= 1:numel(offer)
	offeri = offer{i};
	for j = 1:numel(offeri)
		mat(k, 1:numel(offeri{j})) = offeri{j};
		k= k + 1;
	end
end

----------


## coronaa

طیب الله :)درست شد.

----------


## kebriya

clc;
clear all;
close all;

x=unifrnd(0,100,50,1);
y=unifrnd(0,100,50,1);
for i=1 : 50
if x(i)>40 && x(i)<60
    plot(x(i),y(i),'ro')
 hold on;
else
plot(x(i),y(i),'o')
end
end

----------


## coronaa

> clc;
> clear all;
> close all;
> 
> x=unifrnd(0,100,50,1);
> y=unifrnd(0,100,50,1);
> for i=1 : 50
> if x(i)>40 && x(i)<60
>     plot(x(i),y(i),'ro')
> ...


سلام.
ببخشید این جواب کدوم سواله؟؟؟
اینجا سوال زیاد مطرح شد!

----------


## coronaa

سلام استاد عزیز!
ببخشید من یه فایلی توی اکسل دارم که میخوام ستون C و D رو پیش هم قرار بدم (بدون فاصله) و بعد توی فایل txt ذخیره کنم.
از سمت چپ، اول C قرار بگیره و بعد D.
یعنی بشه CD . بعبارتی یه عدد 25 رقمی بشه. ضمن اینکه توی هر ستون اگه اعداد کمتر از حالت پیش فرض هستن، قبلش صفر قرار بگیره.
میشه این کار رو با متلب انجام داد؟فایل اکسل :
http://www.sharefile.ir/uploads/1443432750.xlsx

به این صورت :

----------


## rahnema1

سلام به شما استاد گرامی
توی خود اکسل هم می شه انجام داد
http://www.sharefile.ir/uploads/1443474459.xls

----------


## coronaa

> سلام به شما استاد گرامی
> توی خود اکسل هم می شه انجام داد
> http://www.sharefile.ir/uploads/1443474459.xls


ممنونم.
عالی بود. فکرشو نمیکردم اکسل این قابلیت رو داشته باشه!
طیب الله :)

----------


## coronaa

سلام
فقط مقدار اول رو توی خروجی نشون میده.یعنی (P). ولی S رو نشون نمیده!
function  [P , S]=func(r)

P = 2*r*pi;
S = r*r*pi;

fprintf('Mohit = %f & Masahat = %f\n\n',P,S);

end

clc;
clear;

r = input('\n Please Enter Radius : ');
func(r);

----------


## rahnema1

> سلام
> فقط مقدار اول رو توی خروجی نشون میده.یعنی (P). ولی S رو نشون نمیده!
> function  [P , S]=func(r)
> 
> P = 2*r*pi;
> S = r*r*pi;
> 
> fprintf('Mohit = %f & Masahat = %f\n\n',P,S);
> 
> ...


سلام
اگه می خواهید هر دو خروجی تابع را دریافت کنید به صورت زیر تابع func را فراخوانی کنید:

[mohit , masahat] = func(r)

----------


## coronaa

سلام
من یه چند جمله ای دارم که درجه جملاتش مرتب نیست. با چه دستوری میتونم از بزرگ به کوچیک مرتبش کنم؟

----------


## rahnema1

> سلام
> من یه چند جمله ای دارم که درجه جملاتش مرتب نیست. با چه دستوری میتونم از بزرگ به کوچیک مرتبش کنم؟


سلام
با استفاده از تابع sort می تونید مشکل را حل کنید
البته در ابتدا راهنمای این تابع را به طور کامل مطالعه کنید

----------


## coronaa

سلام
چطوری میتونم اعدادی که در m1 ایجاد شده رو ببرم توی txt و در هر سطر، اعداد با سمی کالون جدا بشه؟
m = rand(1,100)
m1 = reshape(m , 10 ,10 )'


بصورت زیر :
0.8147;0.9058;0.1270;0.9134;0.6324;0.0975;0.2785;0  .5469;0.9575;0.9649

----------


## rahnema1

num2str(m1, '%f;')

----------


## coronaa

> num2str(m1, '%f;')


ممنونم.
با اکسل و یا OpenCalc هم میشه این کار رو انجام داد؟

----------


## rahnema1

با فرمت csv ذخیره کنید

----------


## coronaa

> با فرمت csv ذخیره کنید


چرا csv ؟؟
همون دستوری که گفتین مشکلم حل شد.
حالا خواستم ببینم اگه نخوام با متلب این کار رو انجام بدم ، آیا با خود اکسل میشه این کار رو انجام داد؟
ببینید من یه داده 100 در 1 توی اکسل دارم که میخوام هر کدوم رو 10 تا 10 تا جدا کنم و توی 10 تا سطر بذارم و سپس با سمی کالن جداشون کنم و توی txt قرار بگیره.
با دستوری که توی متلب گفتید انجام دادم و حل شد. حالا میخوام بدونم با اکسل چطوری میتونم این کار رو انجام بدم که دیگه نیاز به متلب نباشه!

----------


## rahnema1

فکر کنم لازمه 10 تا ده تا توی هر ستون کپی کنید و نهایتا با کلیک  روی save با فرمت CSV ذخیره کنید توی اونجا می تونید مشخص کنید کاما یا سمی کالن بذاره

----------


## coronaa

سلام
میشه با دستورات متلب، یه سایتی رو باز کرد و دستور داد که مثلاً هر 1 دیقه یک بار رفرش کنه؟ یا یه عملیات دیگه ای روش انجام بده؟
و یا اینکه یه نرم افزار جانبی دیگه ای رو باز کنه و اجرا کنه؟

----------


## coronaa

سلام
چطوری میشه این معادله دیفرانسیل مرتبه دوم رو توی متلب حل کرد؟ با دستور dsolve یک معادله رو میشه حل کرد؟

mm.jpg

----------


## meytim

> سلام
> میشه با دستورات متلب، یه سایتی رو باز کرد و دستور داد که مثلاً هر 1 دیقه یک بار رفرش کنه؟ یا یه عملیات دیگه ای روش انجام بده؟
> و یا اینکه یه نرم افزار جانبی دیگه ای رو باز کنه و اجرا کنه؟


بله میشه؛ چند تا سؤال پرسیدید؛ یکی یکی با جزئیات بپرسید، تا ببینیم چه کاری می خواید انجام بدید.

از سؤال اول، ظاهراً دنبال web scarping با متلب هستید. متلب چند تا دستور واسه این کار داره، مثل دستورهای زیر:urlread, urlwrite, web, webread

اما متلب در این زمینه یه مقدار ضعیفه، ولی میشه یک com server درست کرد و از دستورهای VBA مربوط به web scraping توی متلب استفاده کرد.

در مورد سؤال دوم، اگه نرم افزار مورد نظر API داشته باشه، میشه از طریق متلب باهاش interface ایجاد کرد و همه کاری کرد، اما اگه API نداشته باشه، بدبختیه، ولی غیرممکن نیست؛ باید دقیقاً نرم افزارش مشخص باشه چیه، بعد ببینید که قبلاً کسی همچین کاری کرده یا نه. اگه کسی کاری نکرده باشه، اون وقت باید کلی وقت بذاری تا یه راهی براش پیدا کنی. یکی از آخرین راههای پیشنهادی، استفاده از دستور robot زبان Java هست که می تونید توی متلب استفاده کنید.

----------


## meytim

> سلام
> چطوری میشه این معادله دیفرانسیل مرتبه دوم رو توی متلب حل کرد؟ با دستور dsolve یک معادله رو میشه حل کرد؟
> 
> mm.jpg


از dsolve استفاده نکنید؛ از روشهای عددی استفاده کنید، اونهایی که دستورشون با ode شروع میشه؛ مثل ode23
بعدش هم خود دستگاه معادلات رو به صورت یک mفایل تابع تعریف کنید.

اگه بلد نیستید، بخش 1 و 5 کتاب "شگردهای عددی در پاسخیابی پرسشهای مهدسی با برنامه ریزی MATLAB" رو بخونید.

پ.ن.: به نظرم اینها معادلات دیفرانسیل ارتعاشات آونگ دوگانه باشه

----------


## coronaa

> از dsolve استفاده نکنید؛ از روشهای عددی استفاده کنید، اونهایی که دستورشون با ode شروع میشه؛ مثل ode23
> بعدش هم خود دستگاه معادلات رو به صورت یک mفایل تابع تعریف کنید.
> 
> اگه بلد نیستید، بخش 1 و 5 کتاب "شگردهای عددی در پاسخیابی پرسشهای مهدسی با برنامه ریزی MATLAB" رو بخونید.
> 
> پ.ن.: به نظرم اینها معادلات دیفرانسیل ارتعاشات آونگ دوگانه باشه


اگه بخوام از روش رانگ کوتا استفاده کنم باز باید با ode انجام بدم؟

----------


## meytim

> اگه بخوام از روش رانگ کوتا استفاده کنم باز باید با ode انجام بدم؟


بله، توابع زیر برای روش رانگ ـ کوتای adaptive stepsize هستند:
ode23
ode45

----------


## coronaa

سلام
کسی هست بتونه این رابطه رو توی متلب کد بزنه یا حداقل معادلش رو توی زبانهای دیگه بگه چطوریه؟

1465752304.jpg

----------


## coronaa

من کد رو به این صورت نوشتم ولی انگار دستوری که برای sum نوشتم اشکال داره!

clc;
clear;
close all;


alpha = 0.5;
a = 0;
k = 1;
t = 10;
h = 0.1;


upper_band = round((t-a)/h);
expr = (1./(h.^alpha))*sum((-1)^(k)*binomial(alpha,k)*f(t-k*h), k = 0..upper_band);




f(t) = limit(expr,h,0)

خطایی که میده بصورت زیره:

Error: File: letnikov.m Line: 12 Column: 67   
The expression to the left of the equals sign is not a valid target for an
assignment.

----------


## coronaa

من مشکل بالایی رو حل کردم و کدش بصورت زیر شد :


clc;
clear;
close all;


alpha = 0.5;
a = 0;
k = 1;
t = 10;
h = 0.1;


upper_band = round((t-a)/h);
expr = (1./(h.^alpha))*symsum(((-1).^(k))*binomial(alpha,k)*f(t-k*h), k , 0 ,upper_band);




f(t) = limit(expr,h,0)


حالا خطایی که میده برای binomial هست.
بصورت زیر :

Undefined function 'binomial' for input arguments of type 'double'.


Error in letnikov (line 12)
expr = (1./(h.^alpha))*symsum(((-1).^(k))*binomial(alpha,k)*f(t-k*h), k , 0
,upper_band);

----------


## coronaa

خطای قبلی رو هم برطرف کردم و کد جدید بصورت زیر شد:


clc;
clear;
close all;


alpha = 0.5;
a = 0;
k = 1;
t = 10;
h = 0.1;


upper_band = round((t-a)/h);
expr = (1./(h.^alpha))*symsum(((-1).^(k))*nchoosek(alpha,k)*f(t-k*h), k , 0 ,upper_band);




f(t) = limit(expr,h,0)


و الآن خطای جدید روی f هست.


Undefined function 'f' for input arguments of type 'double'.


Error in letnikov (line 12)
expr = (1./(h.^alpha))*symsum(((-1).^(k))*nchoosek(alpha,k)*f(t-k*h), k , 0
,upper_band);

----------


## coronaa

سلام دوستان
کسی میدونه فرق machine learning با deep learning چیه؟؟؟
و اینکه عملکرد کدوم بهتره؟

----------


## coronaa

> سلام
> کسی هست بتونه این رابطه رو توی متلب کد بزنه یا حداقل معادلش رو توی زبانهای دیگه بگه چطوریه؟
> 
> 1465752304.jpg


*کسی نیست کمکم کنه؟؟؟*

----------


## meytim

> خطای قبلی رو هم برطرف کردم و کد جدید بصورت زیر شد:
> 
> 
> clc;
> clear;
> close all;
> 
> 
> alpha = 0.5;
> ...


شما باید فایل رو به صورت تابع تعریف کنید و یکی از ورودیهای تابع رو همون تابع f تعریف کنید. بعدش قبل از فراخوانی، اون تابع f رو تعریف کنید. در این راه، نیاز میشه از تابع feval یا inline استفاده کنید.

----------


## coronaa

> شما باید فایل رو به صورت تابع تعریف کنید و یکی از ورودیهای تابع رو همون تابع f تعریف کنید. بعدش قبل از فراخوانی، اون تابع f رو تعریف کنید. در این راه، نیاز میشه از تابع feval یا inline استفاده کنید.


سلام
ببخشید. میشه بیشتر راهنمایی کنید؟
من بصورت زیر نوشتم :




function f = Letnikov(alpha)


% alpha = 0.5;


a = 0;
k = 1;
t = 10;
h = 0.1;


upper_band = round((t-a)/h);
expr = (1./(h.^alpha))*symsum(((-1).^(k))*nchoosek(alpha,k)*f(t-k*h), k , 0 ,upper_band);




f(t) = limit(expr,h,0)

----------


## coronaa

با سلام خدمت دوستان.
من یه جدولی دارم که 10 ستون اول مقادیر پارامترها و دو ستون آخر توابع هزینه هستن.
میخوام توابع هزینه رو با نمودار Pareto رسم کنم. و بهترین تابع هزینه مشخص بشه.
کسی هست بتونه راهنماییم کنه؟
*http://www.sharefile.ir/uploads/1490888705.xlsx*

----------


## coronaa

> با سلام خدمت دوستان.
> من یه جدولی دارم که 10 ستون اول مقادیر پارامترها و دو ستون آخر توابع هزینه هستن.
> میخوام توابع هزینه رو با نمودار Pareto رسم کنم. و بهترین تابع هزینه مشخص بشه.
> کسی هست بتونه راهنماییم کنه؟
> *http://www.sharefile.ir/uploads/1490888705.xlsx*


*کسی نیست کمکم کنه ؟؟؟
*

----------


## mb1372

> با سلام خدمت دوستان.
> من یه جدولی دارم که 10 ستون اول مقادیر پارامترها و دو ستون آخر توابع هزینه هستن.
> میخوام توابع هزینه رو با نمودار Pareto رسم کنم. و بهترین تابع هزینه مشخص بشه.
> کسی هست بتونه راهنماییم کنه؟
> *http://www.sharefile.ir/uploads/1490888705.xlsx*


سلام
مشکل در وارد کردن داده هاست؟ یا رسم نمودار؟
pareto(V)
با استفاده از کد بالا میشه یک بردار رو به صورت نمودار ستونی رسم کرد.
البته با این تعداد زیاد ستونی که مورد نظر شما هست این نمودار، خیلی شلوغ و نامنظم رسم خواهد شد.

----------


## coronaa

> سلام
> مشکل در وارد کردن داده هاست؟ یا رسم نمودار؟
> pareto(V)
> با استفاده از کد بالا میشه یک بردار رو به صورت نمودار ستونی رسم کرد.
> البته با این تعداد زیاد ستونی که مورد نظر شما هست این نمودار، خیلی شلوغ و نامنظم رسم خواهد شد.


سلام.
مشکل در رسم نمودار هست.
من فقط با دو ستون آخر کار دارم و بقیه استفاده نمیشه.
من نمودار بصورت ستونی نمیخوام. میخوام نقاطی رو توی نمودار نشون بده که کمترین تابع هزینه رو دارن.
بصورت زیر :1497714250.jpg

----------


## mb1372

> سلام.
> مشکل در رسم نمودار هست.
> من فقط با دو ستون آخر کار دارم و بقیه استفاده نمیشه.
> من نمودار بصورت ستونی نمیخوام. میخوام نقاطی رو توی نمودار نشون بده که کمترین تابع هزینه رو دارن.
> بصورت زیر :


منظورتون رو از کمترین تابع هزینه، متوجه نشدم. مثلا اگه دو ستون آخر فایل پیوست به صورت زیر باشه:
2   3
15   9
-2   12
45   21
باید چه نقاطی در نمودار رسم بشه؟

----------


## coronaa

> منظورتون رو از کمترین تابع هزینه، متوجه نشدم. مثلا اگه دو ستون آخر فایل پیوست به صورت زیر باشه:
> 2   3
> 15   9
> -2   12
> 45   21
> باید چه نقاطی در نمودار رسم بشه؟


مثلا اگه همچین ستونی داشته باشیم که 100 تا سطر داشته باشه و بخوایم ده تا از زوج مرتب هایی که کمترین مقدار رو دارند رو رسم کنیم ، (2,3) یکی از اونها خواهد بود.
مثلا ستون اول را در محور x ها و ستون دوم را در محور y ها رسم کنید.
اگه همون فایل اکسل رو پلات کنید تصویر پایین رو خواهید داشت. ولی من فقط نقاطی که خودم با خط مشکی به هم وصل کردم رو میخوام.
در ضمن ، همه اعداد مثبت هستن.

http://www.sharefile.ir/uploads/1497851594.jpg

----------


## mb1372

> مثلا اگه همچین ستونی داشته باشیم که 100 تا سطر داشته باشه و بخوایم ده تا از زوج مرتب هایی که کمترین مقدار رو دارند رو رسم کنیم ، (2,3) یکی از اونها خواهد بود.
> مثلا ستون اول را در محور x ها و ستون دوم را در محور y ها رسم کنید.
> اگه همون فایل اکسل رو پلات کنید تصویر پایین رو خواهید داشت. ولی من فقط نقاطی که خودم با خط مشکی به هم وصل کردم رو میخوام.
> در ضمن ، همه اعداد مثبت هستن.
> 
> http://www.sharefile.ir/uploads/1497851594.jpg


چه مسئله جالبی!
نتیجه سعی من کدهای زیر شد. دقیقا اون چیزی که رسم کردید در نمیاد ولی امیدوارم کارتون رو راه بندازه. 
تو این کدها روش کار به این صورته که ابتدا داده ها بر حسب مقدار x شون، مرتب میشن. داده ی اول و آخر رسم میشه. همچنین داده ای که دارای کمترین تابع هزینه ست رسم میشه. تا اینجا سه نقطه رسم شدن. از ابتدای بازه تا نقطه ی مینیمم بررسی میشه که آیا سایر نقاط زیر این خط (خط عبور کرده از نقطه اول و مینیمم) قرار گرفتند یا نه؟ و در صورتی که زیر خط باشن رسم میشه. این کار تا پوشش دادن تمام بازه اعداد تکرار میشه.
در قسمت بعدی این کار برای نقطه ی مینیمم تا انتهای بازه تکرار میشه.

کد اصلی (اعداد خودتون رو جایگزین کنید): 
clc
clear
close
global Data


Data=[1 4
    1.6 45
    8 12
    1.7 2
    2.2 31
    4 12
    5.5 6
    9 15
    2.4 1];
Data=sortrows(Data);
plot(Data(1,1),Data(1,2),'ro','markersize',8) % plot first point
hold on
min_inx_g=find(Data(:,2)==min(Data(:,2)));
plot(Data(min_inx_g,1),Data(min_inx_g,2),'ro','mar  kersize',8) % plot min point
min_inx=min_inx_g;
while 1
    if min_inx~=length(Data)
        [k is_upper]=plot_min_point(1,min_inx);
        if is_upper==1 % there are no points above the line.
            break
        end
        min_inx=k;
    else
        break
    end
end
plot(Data(end,1),Data(end,2),'ro','markersize',8) % plot end point
min_inx=min_inx_g;
while 1
    if min_inx~=length(Data)
        [k is_upper]=plot_min_point(min_inx,length(Data));
        if is_upper==1 % there are no points above the line.
            break
        end
        min_inx=k;
    else
        break
    end
end
plot(Data(:,1),Data(:,2),'b*')

تابع:
function [k is_upper]=plot_min_point(i,j)global Data
is_upper=[];
for k=j-1:-1:i+1
    if ~(Data(k,2)>Data(i,2)+(Data(j,2)-Data(i,2))/(Data(j,1)-Data(i,1))*(Data(k,1)-Data(i,1)))
        plot(Data(k,1),Data(k,2),'ro','markersize',8)
        if k==2
            is_upper=0;
        end
        break;
    else
        if k==2
            is_upper=1;
        end
    end
end
end
نمودار خروجی برای داده های خودتون:
http://www.sharefile.ir/uploads/1497905283.jpg

----------


## coronaa

> چه مسئله جالبی!
> نتیجه سعی من کدهای زیر شد. دقیقا اون چیزی که رسم کردید در نمیاد ولی امیدوارم کارتون رو راه بندازه. 
> تو این کدها روش کار به این صورته که ابتدا داده ها بر حسب مقدار x شون، مرتب میشن. داده ی اول و آخر رسم میشه. همچنین داده ای که دارای کمترین تابع هزینه ست رسم میشه. تا اینجا سه نقطه رسم شدن. از ابتدای بازه تا نقطه ی مینیمم بررسی میشه که آیا سایر نقاط زیر این خط (خط عبور کرده از نقطه اول و مینیمم) قرار گرفتند یا نه؟ و در صورتی که زیر خط باشن رسم میشه. این کار تا پوشش دادن تمام بازه اعداد تکرار میشه.
> در قسمت بعدی این کار برای نقطه ی مینیمم تا انتهای بازه تکرار میشه.
> 
> کد اصلی (اعداد خودتون رو جایگزین کنید): 
> clc
> clear
> close
> ...


سلام دوست عزیز
خیلی عالیه!
تقزیبا همینو میخواستم.
حالا نمیشه بقیه نقاط که مورد نظرمون نیست رو حذف کرد؟؟؟

----------


## mb1372

> سلام دوست عزیز
> خیلی عالیه!
> تقزیبا همینو میخواستم.
> حالا نمیشه بقیه نقاط که مورد نظرمون نیست رو حذف کرد؟؟؟


سلام
یه متغیر global تعریف کنید و کد رو تغییر بدید. اونجاهایی که نقاط رسم میشه، به جای رسم نمودار، نقطه رو به عنوان درایه ی جدید توی متغیر ذخیره کنید. اخرش هم اون نقطه هایی رو که نمی خواید با دستور زیر حذف کنید:
var(3,:)=[];
در انتها با استفاده از این متغیر نمودار رو رسم کنید.

----------


## coronaa

این نقاطی که رسم شدن، برای دو ستون آخر هستن؟ من رسم میکنم بصورت زیر میشه :
ضمیمه 145545

----------


## mb1372

> این نقاطی که رسم شدن، برای دو ستون آخر هستن؟ من رسم میکنم بصورت زیر میشه :
> ضمیمه 145545


عکس باز نشد. ولی میتونم حدس بزنم مشکل کجاست. اعداد خیلی بزرگی در بین داده های بود (10 به توان 20!). نموداری که گذاشتم بزرگنمایی یک قسمت کوچک بود تا عملکرد کد بهتر دیده بشه. در واقع نموداری رو که گذاشتم میتونید با استفاده از دستور زیر (بعد از اجرای کد یا در خط اخر کد اصلی)  یا با زوم کردن تولید کنید.
axis([0 5 0 3])

پ.ن: هفت بیجار یعنی چی؟ :لبخند:  این تاپیک مخصوص سوالای خودتونه؟

----------


## coronaa

> سلام
> یه متغیر global تعریف کنید و کد رو تغییر بدید. اونجاهایی که نقاط رسم میشه، به جای رسم نمودار، نقطه رو به عنوان درایه ی جدید توی متغیر ذخیره کنید. اخرش هم اون نقطه هایی رو که نمی خواید با دستور زیر حذف کنید:
> var(3,:)=[];
> در انتها با استفاده از این متغیر نمودار رو رسم کنید.


مهندس ببخشید. هنوز این قسمت رو نتونستم انجام بدم!
الآن var همون متغیر global هست؟

----------


## coronaa

> عکس باز نشد. ولی میتونم حدس بزنم مشکل کجاست. اعداد خیلی بزرگی در بین داده های بود (10 به توان 20!). نموداری که گذاشتم بزرگنمایی یک قسمت کوچک بود تا عملکرد کد بهتر دیده بشه. در واقع نموداری رو که گذاشتم میتونید با استفاده از دستور زیر (بعد از اجرای کد یا در خط اخر کد اصلی)  یا با زوم کردن تولید کنید.
> axis([0 5 0 3])
> 
> پ.ن: هفت بیجار یعنی چی؟ این تاپیک مخصوص سوالای خودتونه؟


دقیقا همین منظورم بود. درست شد.

پ.ن: یه نوع ترشی مازندرانی هست و در اصلاح یعنی قاطی پاتی  :خجالت:  . چون سوالات مختلفی می پرسم این عنوان رو انتخاب کردم.
این قسمت مخصوص سوالات من هست ولی میتونه یه آرشیو ارزشمندی برای دیگر دوستان هم باشه.

----------


## mb1372

> مهندس ببخشید. هنوز این قسمت رو نتونستم انجام بدم!
> الآن var همون متغیر global هست؟


آره. برای اینکه متغیر سراسری تعریف کنید دستور زیر رو در کد اصلی و کد تابع قرار بدید (بهتره قبل از مقداردهیش باشه):
global var
البته چون چند تا متغیر سراسری داریم میشه این جوری هم نوشتش:
global var Data



بعدش به جای اینکه نقطه اول رو رسم کنید (یا در کنار رسم نقطه ی اول) کد زیر رو اضافه کنید:
var(1,:)=Data(1,:)
یا در خط پنجم تابع (و همچنین در کنار رسم نقطه ی آخر)، کد زیر رو اضافه کنید:
var(end+1,:)=Data(k,:)

----------


## coronaa

> آره. برای اینکه متغیر سراسری تعریف کنید دستور زیر رو در کد اصلی و کد تابع قرار بدید (بهتره قبل از مقداردهیش باشه):
> global var
> البته چون چند تا متغیر سراسری داریم میشه این جوری هم نوشتش:
> global var Data
> 
> 
> 
> 
> بعدش به جای اینکه نقطه اول رو رسم کنید (یا در کنار رسم نقطه ی اول) کد زیر رو اضافه کنید:
> ...


مهندس انجام دادم. نشد!
توی خط 31 اضافه کردم.

clc ;
clear ;
close all ;


% global Data
global var Data


Data = xlsread('C:\Users\User\Desktop\Pareto Front\2\natayej1.xlsx',1);
%  save Data.mat
% load('Data.mat');
Data=sortrows(Data);
plot(Data(1,1),Data(1,2),'ro','markersize',8) % plot first point
hold on
min_inx_g=find(Data(:,2)==min(Data(:,2)));
plot(Data(min_inx_g,1),Data(min_inx_g,2),'ro','mar  kersize',8) % plot min point
min_inx=min_inx_g;
while 1
    if min_inx~=length(Data)
        [k is_upper]=plot_min_point(1,min_inx);
        if is_upper==1 % there are no points above the line.
            break
        end
        min_inx=k;
    else
        break
    end
end
plot(Data(end,1),Data(end,2),'ro','markersize',8) % plot end point
var(1,:)=Data(1,:)
min_inx=min_inx_g;
while 1
    if min_inx~=length(Data)
        [k is_upper]=plot_min_point(min_inx,length(Data));
        if is_upper==1 % there are no points above the line.
            break
        end
        min_inx=k;
    else
        break
    end
end
plot(Data(:,1),Data(:,2),'b*')
axis([0 5 0 3])

----------


## mb1372

> مهندس انجام دادم. نشد!
> توی خط 31 اضافه کردم.


تابع هم باید تغییر کنه. اندیس ها رو فک کنم اشتباه گذاشتید. منظورم این طوری بود:
کد اصلی:
clc
clear
close
global Data var
Data=[1 4
    1.6 45
    8 12
    1.7 2
    2.2 31
    4 12
    5.5 6
    9 15
    2.4 1];
Data=sortrows(Data);
plot(Data(1,1),Data(1,2),'ro','markersize',8) % plot first point
hold on
var(1,:)=Data(1,:);
min_inx_g=find(Data(:,2)==min(Data(:,2)));
plot(Data(min_inx_g,1),Data(min_inx_g,2),'ro','mar  kersize',8) % plot min point
var(end+1,:)=Data(min_inx_g,:);
min_inx=min_inx_g;
while 1
    if min_inx~=length(Data)
        [k is_upper]=plot_min_point(1,min_inx);
        if is_upper==1 % there are no points above the line.
            break
        end
        min_inx=k;
    else
        break
    end
end
plot(Data(end,1),Data(end,2),'ro','markersize',8) % plot end point
min_inx=min_inx_g;
var(end+1,:)=Data(end,:);
while 1
    if min_inx~=length(Data)
        [k is_upper]=plot_min_point(min_inx,length(Data));
        if is_upper==1 % there are no points above the line.
            break
        end
        min_inx=k;
    else
        break
    end
end
plot(Data(:,1),Data(:,2),'b*')
var=sortrows(var);
% axis([0 5 0 3])
تابع:
function [k is_upper]=plot_min_point(i,j)
global Data var
is_upper=[];
for k=j-1:-1:i+1
    if ~(Data(k,2)>Data(i,2)+(Data(j,2)-Data(i,2))/(Data(j,1)-Data(i,1))*(Data(k,1)-Data(i,1)))
        plot(Data(k,1),Data(k,2),'ro','markersize',8)
        var(end+1,:)=Data(k,:);
        if k==2
            is_upper=0;
        end
        break;
    else
        if k==2
            is_upper=1;
        end
    end
end
end
البته برای داده های خودتون باید تغییرش بدید.

----------


## coronaa

> سلام
> کسی هست بتونه این رابطه رو توی متلب کد بزنه یا حداقل معادلش رو توی زبانهای دیگه بگه چطوریه؟
> 
> ضمیمه 140818





> خطای قبلی رو هم برطرف کردم و کد جدید بصورت زیر شد:
> 
> 
> clc;
> clear;
> close all;
> 
> 
> alpha = 0.5;
> ...


مهندس سلام.
میشه روی این معادله هم یه راهنمایی بکنید؟

----------


## mb1372

> مهندس سلام.
> میشه روی این معادله هم یه راهنمایی بکنید؟


سلام
تابع زیر ظاهرا بدون مشکل کار میکنه. فقط باید دامنه و ثابت ها رو درست انتخاب کرده باشید.
function y=fun_fun(t)
alpha = 101;
a = 0;
k = 1;
h = 0.1;
y=0;
f=@(x) sin(x)
for k=0:round((t-a)/h)
    y=y+(1./(h.^alpha))*((-1).^(k))*nchoosek(alpha,k)*f(t-k*h);
end
end

----------


## coronaa

> سلام
> تابع زیر ظاهرا بدون مشکل کار میکنه. فقط باید دامنه و ثابت ها رو درست انتخاب کرده باشید.
> function y=fun_fun(t)
> alpha = 101;
> a = 0;
> k = 1;
> h = 0.1;
> y=0;
> f=@(x) sin(x)
> ...


آلفا نمیشه اعشاری باشه؟
این معادله برای مبحث مرتبه کسری هست و آلفا معمولا یک عدد کسری و بین 0 تا 2 انتخاب میشه.

----------


## mb1372

> آلفا نمیشه اعشاری باشه؟
> این معادله برای مبحث مرتبه کسری هست و آلفا معمولا یک عدد کسری و بین 0 تا 2 انتخاب میشه.


در مورد ثابت های این تابع نمیدونم. اما میدونم که کد 
nchoosek(alpha,k)
فقط زمانی جواب میده که k کوچکتر از آلفا باشه (طبق تعریف ترکیب). اون مقدار از آلفا رو صرفا برای رهایی از خطا انتخاب کردم. 
مقدار ثابت ها رو از یک مرجع پیدا کنید.

----------


## coronaa

> تابع هم باید تغییر کنه. اندیس ها رو فک کنم اشتباه گذاشتید. منظورم این طوری بود:
> کد اصلی:
> clc
> clear
> close
> global Data var
> Data=[1 4
>     1.6 45
>     8 12
> ...


مهندس سلام.
ببخشید این کد مگه نقاط دو ستون آخر رو پلات نمیکنه؟؟؟
پس چرا اون نقاط مرزی که با قرمز مشخص شده توی دو ستون آخر نیست؟
داده هام رو با دو فرمت mat و xlsx در لینک زیر قرار دادم:http://www.sharefile.ir/uploads/1498573209.rar

----------


## mb1372

> مهندس سلام.
> ببخشید این کد مگه نقاط دو ستون آخر رو پلات نمیکنه؟؟؟
> پس چرا اون نقاط مرزی که با قرمز مشخص شده توی دو ستون آخر نیست؟
> داده هام رو با دو فرمت mat و xlsx در لینک زیر قرار دادم:http://www.sharefile.ir/uploads/1498573209.rar


سلام
اون کد، مینیمم داده های زیر رو رسم میکنه:
Data=[1 4    1.6 45   8 12
   1.7 2
   2.2 31
   4 12
   5.5 6
   9 15
    2.4 1];
همون تغییراتی که توی کد اول اعمال کردید، روی این هم اعمال کنید تا داده های خودتون رو رسم کنه. مثلا این خط:
Data = xlsread('C:\Users\User\Desktop\Pareto Front\2\natayej1.xlsx',1);
ضمنامتوجه نشدم منظورتون از نقاط مرزی رو کدومه ...

----------


## coronaa

منظورم همون نقاطی بود که با دایره قرمز مشخص میشه!
منم همینکار رو کردم. یعنی داده های خودم رو قرار دادم.
به صورت زیر پلات شد ولی نقاطش توی ستون end‌ و end-1 وجود نداره!


1498749386.jpg

----------


## coronaa

یه سوال دیگه هم دارم اینه که چطوری میتونم یه ماتریسی که با فایل dat ذخیره شده رو به اکسل تبدیل کنم؟

من با دستور زیر انجام میدم ولی خطا میده :

xlswrite('natayej.xlsx',matt)
لینک داده :
http://www.sharefile.ir/uploads/1498708715.rar

----------


## mb1372

> منظورم همون نقاطی بود که با دایره قرمز مشخص میشه!
> منم همینکار رو کردم. یعنی داده های خودم رو قرار دادم.
> به صورت زیر پلات شد ولی نقاطش توی ستون end‌ و end-1 وجود نداره!


مگه میشه؟؟! برای رسم نمودار از نقطه های فایلی که دادید استفاده شده. امکان نداره که نقطه ی جدیدی رسم بشه. مطمئنید توی لیست اعداد نیست؟




> یه سوال دیگه هم دارم اینه که چطوری میتونم یه ماتریسی که با فایل dat ذخیره شده رو به اکسل تبدیل کنم؟
> 
> من با دستور زیر انجام میدم ولی خطا میده :
> 
> xlswrite('natayej.xlsx',matt)
> لینک داده :
> http://www.sharefile.ir/uploads/1498708715.rar


اگه داده هاتون با فرمت mat ذخیره شده، میتونید با کد زیر اونو باز کنید:
x=open('C:\temp\data.mat');

و با کد زیر ذخیره کنید:
xlswrite('natayej.xlsx',x.matt)

----------


## coronaa

میشه همین داده هایی که گذاشتم رو شما خودتون پلات کنید؟
من دقیقا کاری انجام دادم که شما گفتید.
آدرس دیتا خودم رو دادم کد رو اجرا کردم.

----------


## mb1372

> میشه همین داده هایی که گذاشتم رو شما خودتون پلات کنید؟
> من دقیقا کاری انجام دادم که شما گفتید.
> آدرس دیتا خودم رو دادم کد رو اجرا کردم.


به نظرم مشکل از تکراری بودن ستون آخر در بین داده ها بود. این کد رو امتحان کنید:
clc
clear
close
global Data var
Data1=xlsread('C:\Users\Mohsen\Desktop\natayej1.xl  sx',1);
Data=Data1(:,end-1:end);
Data=sortrows(Data);
plot(Data(1,1),Data(1,2),'ro','markersize',8) % plot first point
hold on
var=zeros(1,2);
var(1,:)=Data(1,:);
min_inx_g=max(find(Data(:,2)==min(Data(:,2))));
plot(Data(min_inx_g,1),Data(min_inx_g,2),'ro','mar  kersize',8) % plot min point
var(end+1,:)=Data(min_inx_g,:);
min_inx=min_inx_g;
while 1
    if min_inx~=length(Data)
        [k is_upper]=plot_min_point(1,min_inx);
        if is_upper==1 % there are no points above the line.
            break
        end
        min_inx=k;
    else
        break
    end
end
plot(Data(end,1),Data(end,2),'ro','markersize',8) % plot end point
min_inx=min_inx_g;
var(end+1,:)=Data(end,:);
while 1
    if min_inx~=length(Data)
        [k is_upper]=plot_min_point(min_inx,length(Data));
        if is_upper==1 % there are no points above the line.
            break
        end
        min_inx=k;
    else
        break
    end
end
plot(Data(:,1),Data(:,2),'b*')
var=sortrows(var);
% axis([0 5 0 3])
اگه بازم مشکلی بود، نقطه ای که داره به داده هاتون اضافه میشه رو بگید و روی نمودار مشخص کنید.

----------


## coronaa

سلام دوستان.
ببخشید من یه ماتریس 10 در 10 دارم که میخوام اینو بین 0 تا 1 نرمالیزه کنم و بعد از انجام کارم دوباره اون رو به اعداد اصلی برگردونم.
به چه صورتی باید کد زد؟

----------


## coronaa

> سلام دوستان.
> ببخشید من یه ماتریس 10 در 10 دارم که میخوام اینو بین 0 تا 1 نرمالیزه کنم و بعد از انجام کارم دوباره اون رو به اعداد اصلی برگردونم.
> به چه صورتی باید کد زد؟


حل شد :)
-------------------

----------


## mb1372

سلام دوست عزیز
 نمیدونم درست متوجه شدم یا نه؟ این کد رو ببینید:
clc
clear
a=100*rand(10,10)
m=max(max(a));
a=a/m % normalized
a=a*m % anormalized!

پ.ن: حالا دیدم که حل شد :)

----------


## coronaa

> سلام دوست عزیز
>  نمیدونم درست متوجه شدم یا نه؟ این کد رو ببینید:
> clc
> clear
> a=100*rand(10,10)
> m=max(max(a));
> a=a/m % normalized
> a=a*m % anormalized!
> 
> پ.ن: حالا دیدم که حل شد :)


سلام بر شما . بله درسته.
منم از جای دیگه کد زیر رو گرفتم و استفاده کردم :


a=100*rand(10,10)
Ypred=a;
NormRows = sqrt(sum(Ypred.*Ypred,2));
Ynorm = bsxfun(@rdivide,abs(Ypred),NormRows);
a=Ynorm;

----------


## coronaa

سلام.
میخوام با متلب به وبکم دوربین دسترسی داشته باشم و در هر 10 ثانیه برای مدت یک دقیقه یه عکس بگیره و اون عکس رو به چهار قسمت (4 برش) تبدیل کنه.
کسی هست کمکم کنه؟

----------


## coronaa

> سلام.
> میخوام با متلب به وبکم دوربین دسترسی داشته باشم و در هر 10 ثانیه برای مدت یک دقیقه یه عکس بگیره و اون عکس رو به چهار قسمت (4 برش) تبدیل کنه.
> کسی هست کمکم کنه؟


کسی نیست کمک کنه؟؟؟

----------


## coronaa

سلام.
کسی میتونه راهنمایی کنه بگه این معادله دیفرانسیل چطوری حل میشه؟



کدش رو بصورت زیر نوشتم ولی خطا میده!


clc
syms T(t)
syms R
syms U
M=1 ; Cp=2 ; I=3 ; h=4 ; A=5; Tinf=25 ;


% dsolve('DT=(1/M.Cp).*((I^2*R+I*T*U)-(h*A(T-Tinf)))','t')


o = diff(T) == (1/(M.Cp)).*(((I.^2*R)+(I*T*U))-(h*A(T-Tinf)));
T(t) = dsolve(o,'T(0)=1')


خطا :




> Dot indexing is not supported for variables of this type.
> 
> 
> Error in diffffff (line 11)
> o = diff(T) == (1/(M.Cp)).*(((I.^2*R)+(I*T*U))-(h*A(T-Tinf)));

----------


## mb1372

> سلام.
> کسی میتونه راهنمایی کنه بگه این معادله دیفرانسیل چطوری حل میشه؟
> 
> 
> 
> کدش رو بصورت زیر نوشتم ولی خطا میده!
> 
> 
> clc
> ...


سلام

ببینید جواب درست میده؟

clc
syms T(t)
syms R
syms U
M=1 ; Cp=2 ; I=3 ; h=4 ; A=5; Tinf=25 ;
 
% dsolve('DT=(1/M.Cp).*((I^2*R+I*T*U)-(h*A(T-Tinf)))','t')
 
o = diff(T) == (1/(M.*Cp)).*(((I.^2*R)+(I*T*U))-(h*A.*(T-Tinf)));
T(t) = dsolve(o,'T(0)=1')

----------


## coronaa

> سلام
> 
> ببینید جواب درست میده؟
> 
> clc
> syms T(t)
> syms R
> syms U
> M=1 ; Cp=2 ; I=3 ; h=4 ; A=5; Tinf=25 ;
> ...


سلام.
بله جواب داد :)
تشکر

----------

