# مباحث متفرقه برنامه نویسی > برنامه نویسی Matlab >  سوال درباره نوشتن توابع ریاضی در متلب

## mahboob21

سلام دوستان :لبخند: 
می خواهم تعدادی تابع ریاضی را در متلب بنویسم ولی با پیغام خطا مواجه می شوم از دوستان اگر کسی نحوه نوشتن همه یا تعدادی از این توابع را در متلب بداند ممنون می شوم کمک کند.
با تشکر از لطف شما.133.jpg

----------


## rahnema1

سلام
این جور می شه نوشت

f2=@(x) sum(100 * (x(2:end )-x(1:end-1).^2).^2+(x(1:end-1)-1).^2);
f3=@(x) sum(x.^2-10*cos( 2*pi.*x)+10);
f4=@(x) sum(x.^2)/ 4000-prod( cos(bsxfun( @rdivide,x, sqrt( 1:numel(x))))) +1;
f6=@(x,a) 1/(1/500+ sum(bsxfun( @rdivide,1 ,((1:25)+ sum(bsxfun(@minus, x(1:2)', a(1:2,1:25)).^6) ))));

----------


## coronaa

با حلقه for هم میشه نوشت؟
و اینکه کار این سه تا دستور چیه؟

bsxfun  ,  @minus  ,   @rdivide

----------


## rahnema1

> با حلقه for هم میشه نوشت؟
> و اینکه کار این سه تا دستور چیه؟
> 
> bsxfun  ,  @minus  ,   @rdivide


در متلب باید تا می تونیم از حلقه پرهیز کنیم چون سرعت کار را بسیار پایین میاره ( مگه اینکه ناچار باشیم) در عوض بهتره از دستورات آماده استفاده کنیم که سرعت بالا دارند
bsxfun یک دستور را روی تک تک اعضای یک آرایه اعمال می کنه مثلا دستور minus یعنی تفریق یا rdivide یعنی تقسیم

----------


## ehsan_ord

سلام من یه کد داخل متلب میخواستم که فاصله اقلیدسی رو حساب کنه اگه کمکم کنید ممنون میشم

----------


## rahnema1

یک آرایه با دو ستون ( هر ستون نشانگر یک نقطه)


a=rand(5,2);
fasele=sqrt(sum((a(:,1)-a(:,2)).^2));

----------


## ehsan_ord

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

----------


## rahnema1

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


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

این یکی به صورت تابع که دو تا بردار a  و b  می گیره


fasele = @(a,b) sqrt(sum((a-b).^2));

m=10;
fasele( rand(m,1) , rand(m,1) )

----------


## ehsan_ord

من خیلی تازه کارم .استادمون فرمول فاصله اقلیدسی رو بهمون داد گفتش که بادستور input دوتا بردار بگیره با استفاده از فرمول فاصله رو حساب کنه مثلا دوتا بردار [4,5,7,2]و[1,0,-1,2]
فرمول به این صورتهDp(xi,xj)=(sum(X(ik)-X(jk)).^p).^1/p که k از1تا mهستش و m بعد بردار یعنی mبعدی.این برنامه رو شنبه باید تحویل بدم :افسرده:

----------


## rahnema1

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

a = input('lotfan bordare avval ra vared konid:');
b = input('lotfan bordare dovvom ra vared konid:');
fasele = sqrt(sum((a-b).^2));
disp('fasele = ' )
disp(fasele)


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

----------


## ehsan_ord

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

----------


## gelarekhatibi

سلام من باید تمرین Image retrieval  رو بنویسم. باید روی تصویر ها هیستوگرام بگیرم و فاصله اقلیدوسی و روی هیستوگرام ها بگیرم. و با بقیه تصاویر مقایسه کنم. نمیدونم چطور روی هیستوگرام ها فاصله اقلیدوسی بگیرم و با بقیه تصاویر مقایسه کنم. وقت خیلی کم دارم. لطفا کمکم کنید

----------


## marjan.jan

سلام کسی میتونه کمکم کنه.. :گریه: 
برای این سه تا تابع ریاضی میخوام توی متلب نمودار رسم کنم توی یه دستگاه مختصات..در ضمن دامنه تغییر x در تابع g1 از 1 تا 2...و در تابع g2 از 2 تا 4
کسی برنامه هاشو بلده برام بنویسه؟
من اصلا متلب بلد نیستم کار کنم :افسرده: 
1234.png

----------


## mb1372

> سلام کسی میتونه کمکم کنه..
> برای این سه تا تابع ریاضی میخوام توی متلب نمودار رسم کنم توی یه دستگاه مختصات..در ضمن دامنه تغییر x در تابع g1 از 1 تا 2...و در تابع g2 از 2 تا 4
> کسی برنامه هاشو بلده برام بنویسه؟
> من اصلا متلب بلد نیستم کار کنم
> 1234.png


سلام
ابتدا دامنه تعریف توابع رو مشخص کنید:
x1=1:0.05:2;
x2=2:0.05:4;
x3=[1 2 4 5];
توابع رو تعریف کنید (مطابق با توابع خودتون تغییرش بدید: ^. یعنی به توان):
g1=1+x.^3;
g2=2-x+x.^4;
g3=[4 6 10 8];
در آخرین مرحله نمودار رو رسم کنید:
plot(x1,g1,x2,g2)
hold on
plot(x3,g3,'*')

----------

