سئوالات و مشکلات در متلب (MATLAB)

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام من می خوام یه برنامه بنویسم که اعداد رندوم باینری تولید کنه بعد در هر مرحله صفرها تا قبل از یک رو با هم جمع کنه و اعلا م کنه و از بعد از آخرین یک مجدد صفرها رو تا قبل یک بعدی جمع کنه (یعنی مثلا 000000111100000 را به صورت [5 6 ] نشون بده) ممکنه کمکم کنید؟

اون چیزی که به ذهن خودم رسیده این مدلیه :
n=1
pai=[......] (یه ماتریس بین صفر و یک که دو هزار سطر داره)
y=binorand(n,pai)

fori=1:2000
if y(i)==0
B=1;
sum=0;
sum=sum+B
D=[sum]
y=[D]
else
B=0
sum=sum+B
end
end


ولی جواب مطلوب رو نمی گیرم می شه راهنماییم کنید؟
کد:
r=round(20000000*rand+1)
a=dec2bin(r)
d=double(a=='0');
dd=diff(d);
R=find(dd==-1);
L=R+1;
L=[1,L]
R=[R,length(d)]

s=[];
for k=1:length(L)
    s=[s,num2str(sum(d(L(k):R(k))))];
end
if s(end)=='0'
    s(end)=[];
end
s

این هم تستش:

کد:
r =
    17825980
a =
1000100000000000010111100
L =
     1     5    18    20
R =
     4    17    19    25
s =
31212
 
آخرین ویرایش:

fmosif

عضو جدید
کد:
r=round(20000000*rand+1)
a=dec2bin(r)
d=double(a=='0');
dd=diff(d);
R=find(dd==-1);
L=R+1;
L=[1,L]
R=[R,length(d)]

s=[];
for k=1:length(L)
    s=[s,num2str(sum(d(L(k):R(k))))];
end
if s(end)=='0'
    s(end)=[];
end
s



این هم تستش:

کد:
r =
    17825980
a =
1000100000000000010111100
L =
     1     5    18    20
R =
     4    17    19    25
s =
31212


ممنون از زحمتی که کشیدید. فقط اگه بخوام فاصله ی بین یک های متوالی رو هم صفر ثبت کنه آیا امکان پذیره ؟

یعنی در مثال بالا به ازای a =
1000100000000000010111100
خروجی برنامه شده s = 31212
ولی اگه فاصله بین یک های متوالی هم صفر لحاظ بشه باید باشه

s=31210002

ممکنه راهنماییم کنید ؟

ممنون
 
آخرین ویرایش:

...scream...

عضو جدید
کاربر ممتاز
سلام به همگی!!!!!!!!!
بچه ها باید یه برنامه ای بنویسم که بتونه نمودار میدان الکتریکی رو رسم کنه!!!!!!!!!!!!!!!!!11

اگه کسی میتونه کمک کنه لطفا دریغ نکنه!!!!!!!!!!!!
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام به همگی!!!!!!!!!
بچه ها باید یه برنامه ای بنویسم که بتونه نمودار میدان الکتریکی رو رسم کنه!!!!!!!!!!!!!!!!!11

اگه کسی میتونه کمک کنه لطفا دریغ نکنه!!!!!!!!!!!!

نمونه:
کد:
[x,y]=meshgrid(-2:0.2:2,-2:0.2:2);
V=x.^2+y.^2;
[Ex,Ey]=gradient(-V,0.2,0.2);

contour(V), hold on, quiver(Ex,Ey)
 

fmosif

عضو جدید
سلام من برنامه ای نوشتم که pai0 رو گاها 1 تولید می کنه که در بقیه برنامه، (log(1-pai0 بی معنی می شه ! برای همین باید یه قسمتیبرنامه زیر اضافه بشه که اگه pai0 برابر یک شدبه یه عدد تصادفی جدید به جای X مربوطه گذاشته بشه تا در محاسبات pai0~=1 بشه ممکنه کمکم کنید؟

clear all
clc
;[b0=[-3.68;0.77
A1=[0.178619756
0.207938656
0.281010374
0.380243572
0.427153811
0.49887235
0.537663509
0.595399188
0.624718088
0.659900767
0.697338746
0.727108705
0.762291385
0.776274244
0.793865584
0.809652684
0.822733424
0.837618403
0.851150203
0.881371222
0.895805142
0.903924222
0.911592242
0.917907082
0.926026161
0.931438881
0.938204781
0.946774921
0.950383401
0.955345061
0.958502481
0.962110961
0.967072621
0.968425801
0.970230041
0.974289581
0.9751917
0.97609382
0.97699594
0.97789806
0.9797023
0.9819576
0.98331078
0.98376184
0.98466396
0.98466396
0.98556608
0.98737032
0.98782138
0.98827244
0.98962562
0.9909788
0.99233198
0.9932341
0.99413622
0.99413622
0.99413622
0.9954894
0.99639152
0.99639152
0.99729364
0.99729364
0.99819576
0.99864682
0.99864682
0.99864682
0.99864682
0.99909788
0.99954894
;[1
(A=sort(A1
for i=1:200
(r = unifrnd(0,1
(F=find(A>=r
:),x(i)=F(1
end
;'x=x
;'['X=[ones(1,200);x
;((pai0=exp(X*b0)./(1+exp(X*b0



مثال



X =


1 5
1 [B] 19[/B]
1 10
1 6
1 20




pai0 =


0.5424
1.0000
0.9824
0.7191
1.0000
 
آخرین ویرایش:

آینا

عضو جدید
سلام
نیاز فوری دارم به این برنامه
نوشتن یک برنامه ماشین حساب با متلب
+، -، * ، / و ^ ماشین حساب این اعمال را انجام میدهد
لطفا راهنماییم کنید
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
نیاز فوری دارم به این برنامه
نوشتن یک برنامه ماشین حساب با متلب
+، -، *، / و ^ ماشین حساب این اعمال را انجام میدهد
لطفا راهنماییم کنید

متلب هم انجام میده!! :eek:
 

آینا

عضو جدید
متن سوال :

قرار است یک function مثلا با نام caluculator در یک mfile خود نوشته که به عنوان ورودی دو عدد صحیح و یک کد میگیرد که کد، تعیین کننده ی این است که عمل مورد نظر کدامیک از اعمال +، -، * ، / و ^ است.
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
متن سوال :

قرار است یک function مثلا با نام caluculator در یک mfile خود نوشته که به عنوان ورودی دو عدد صحیح و یک کد میگیرد که کد، تعیین کننده ی این است که عمل مورد نظر کدامیک از اعمال +، -، *، / و ^ است.

میشه بگی مشکل کجاست؟
یه تابع مینویسید که خروجیش نتیجه عملیات هست. داخلش یک case میذاری روی کد و براساس اون اعداد را حمع، ضرب یا ... میکنید و نتیجه را بر میگیردانید :gol:
 

fmosif

عضو جدید
آیا دستوری توی متلب هست که : وقتی یه حلقه مثلا for می نویسیم و اجرا می شه و تموم می شه ، چندین خط بعدش شرطی تعریف کنیم که به اون حلقه for مربوط به چند خط قبل برگرده؟

ممنوون
 
آخرین ویرایش:

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
آیا دستوری توی متلب هست که : وقتی یه حلقه مثلا for می نویسیم و اجرا می شه و تموم می شه ، چندین خط بعدش شرطی تعریف کنیم که به اون حلقه for مربوط به چند خط قبل برگرده؟

ممنوون

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

Hermione Granger

عضو جدید
سلام دوستان
من میخوام یه برنامه با متلب بنویسم ولی مشکلم اینه که نمیدونم چطوری باید یه ماتریس تعریف کنم که مثلا" i*j*k متغیر داشته باشه
یعنی در حقیقت آرایه هاش 3 بعد داشته باشه
هدفم نوشتن برنامه حل معادلات دیفرانسیل PDE هست که سه متغیر x , y , t داشته باشند
 

sahar63

عضو جدید
سلام
من دارم یک برنامه می نویسم. به یه مشکل برخوردم. full memory:cry:
کسی می دونه چه نرم افزار برنامه نویسی هست که حافظه اش از متلب بیشتر باشه؟؟؟؟
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام من برنامه ای نوشتم که pai0 رو گاها 1 تولید می کنه که در بقیه برنامه، (log(1-pai0 بی معنی می شه ! برای همین باید یه قسمتیبرنامه زیر اضافه بشه که اگه pai0 برابر یک شدبه یه عدد تصادفی جدید به جای X مربوطه گذاشته بشه تا در محاسبات pai0~=1 بشه ممکنه کمکم کنید؟

clear all
clc
;[b0=[-3.68;0.77
A1=[0.178619756
0.207938656
0.281010374
0.380243572
0.427153811
0.49887235
0.537663509
0.595399188
0.624718088
0.659900767
0.697338746
0.727108705
0.762291385
0.776274244
0.793865584
0.809652684
0.822733424
0.837618403
0.851150203
0.881371222
0.895805142
0.903924222
0.911592242
0.917907082
0.926026161
0.931438881
0.938204781
0.946774921
0.950383401
0.955345061
0.958502481
0.962110961
0.967072621
0.968425801
0.970230041
0.974289581
0.9751917
0.97609382
0.97699594
0.97789806
0.9797023
0.9819576
0.98331078
0.98376184
0.98466396
0.98466396
0.98556608
0.98737032
0.98782138
0.98827244
0.98962562
0.9909788
0.99233198
0.9932341
0.99413622
0.99413622
0.99413622
0.9954894
0.99639152
0.99639152
0.99729364
0.99729364
0.99819576
0.99864682
0.99864682
0.99864682
0.99864682
0.99909788
0.99954894
;[1
(A=sort(A1
for i=1:200
(r = unifrnd(0,1
(F=find(A>=r
:),x(i)=F(1
end
;'x=x
;'['X=[ones(1,200);x
;((pai0=exp(X*b0)./(1+exp(X*b0



مثال



X =


1 5
1 [B] 19[/B]
1 10
1 6
1 20




pai0 =


0.5424
1.0000
0.9824
0.7191
1.0000

این شاید راهنمای عملی برای حل مشکل شما باشه؛ با توجه به اینکه من نمی دونم دقیقاً در هر مرحله از فراخوانی این تابع چه نکاتی باید لحاض بشه، بیشتر از این نمی تونم کاری بکنم.
تابع:
کد:
function [p,x,X]=mmpai(A,n,b)
for i=1:n
    r = unifrnd(0,1);
    F=find(A>=r);
    x(i)=F(1,:);
end
x=x';
X=[ones(1,n);x']';

p=exp(X*b)./(1+exp(X*b));
i=find(p>0.999999);k=length(i);
if ~isempty(i)
    p(i)=mmpai(A,k,b);
end

نحوه فراخوانی تابع در بخشی از برنامه اصلی:
کد:
clear, clc

b0=[-3.68;0.77];
A1=load('psim.m');
A=sort(A1);

[pai0,x,X]=mmpai(A,200,b0)
N=1;%binom with n=1 =bernouli
...
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
من دارم یک برنامه می نویسم. به یه مشکل برخوردم. full memory:cry:
کسی می دونه چه نرم افزار برنامه نویسی هست که حافظه اش از متلب بیشتر باشه؟؟؟؟

این مشکل معمولاً برای محدودیت نرم افزار متلب نیست؛ یا محدودیت سیستم باعثش شده، یا برنامه نویسش ناوارده که با جایگزینیها و ذخیره سازی های غیرضروری باعث سنگین شدن حافظه شده.
 

Hermione Granger

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

fmosif

عضو جدید
سلام. یه سوال داشتم که ممنون می شم اگر کمکم کنید.

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

amir ghasemiyan

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

من یک بردار یک در صد دارم .می خوام در هر بار اجرای برنامه ، بشماره که چند بار اعضای اون ماتریس از مقداری مثل A بزرگتر شده ؟
کد:
length(find(x>A))
كه x ماتريس شماست و A مقداري كه ميخواين ازش بزرگتر باشه
 

mohammad.so

عضو جدید
می خواستم برام سیستم درجه دو زیر را بر حسب a برام رسم و دستورات لازم برای زدن در برنامه متلب برام بفرستید .
hs=1/s^2+2as+1
 

nazliii

مدیر مهندسی برق مخابرات - متخصص نیمه هادی
می خواستم برام سیستم درجه دو زیر را بر حسب a برام رسم و دستورات لازم برای زدن در برنامه متلب برام بفرستید .
hs=1/s^2+2as+1
یه محدوده برا متغیر a تعریف کن اول.بعد تابع رو بنویس.بعد با دستور plot رسمش کن.
a=[1,2,3];
hs=1/s^2+2*a*s+1;
plot(hs,a)​
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
می خواستم برام سیستم درجه دو زیر را بر حسب a برام رسم و دستورات لازم برای زدن در برنامه متلب برام بفرستید .
hs=1/s^2+2as+1

ما را به یاد پاسداشت زبان فارسی انداختید:
ـ سؤال شما دقیقاً مشخص نیست چیه؛ احیاناً در مورد تابع تبدیل


نیست؟ اگه اینطور باشه، سیستم مورد نظر درجه دو نیست؛ یک سیستم خطی هست.
ـ چه چیزی رو برحسب a می خواید رسم کنید؛ رسم سیستم که معنی نداره!.
 
آخرین ویرایش:

civilica2008

عضو جدید
سلام به همگی
امیدوارم شاد و تندرست باشید
یه مشکل
توی متلب کدنویسی می کنم و به یه جایی می رسم که می خوام یه ماتریس 40000 در 40000 بسازم.در واقع درایه های این ماتریس یکی یکی توی یه حلقه for با یه فرمول ساده ساخته میشند.

وسط کار، حافظه کم میاره و پیغام out of memory میده.

اصلا شما توی متلب بنویسید: زیروز 40000
بازم این پیغام خطا را میده

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

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

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

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام به همگی
امیدوارم شاد و تندرست باشید
یه مشکل
توی متلب کدنویسی می کنم و به یه جایی می رسم که می خوام یه ماتریس 40000 در 40000 بسازم.در واقع درایه های این ماتریس یکی یکی توی یه حلقه for با یه فرمول ساده ساخته میشند.

وسط کار، حافظه کم میاره و پیغام out of memory میده.

اصلا شما توی متلب بنویسید: زیروز 40000
بازم این پیغام خطا را میده

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

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

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

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

Hermione Granger

عضو جدید
سلام
متلب من گیر داده تو این برنامه ای در زیر میارمش جواب ها رو کسری حساب میکنه
با دستور format long و format short و ... هم هیچ تفییری ایجاد نمیکنه
حالا تو همین متلب میرم تو یه فایل دیگه و اون رو ران میکنم همه چی درسته
نمیدونم ایراد از دستورات این فایله ؟؟

clear
clc
format long
disp('RK4 ')
h=.3;
xz=0;
yz=1;
syms('x','y');
f=inline(y+x^2);
x(1)=xz;
y(1)=yz;
for i=2:99
k1(i)=h*f(x(i-1),y(i-1));
k2(i)=h*f(x(i-1)+(h/2),y(i-1)+(k1(i)/2));
k3(i)=h*f(x(i-1)+(h/2),y(i-1)+(k2(i)/2));
k4(i)=h*f(x(i-1)+h,y(i-1)+k3(i));
y(i)=y(i-1)+(k1(i)+2*k2(i)+2*k3(i)+k4(i))/6;
x(i)=x(i-1)+h;
end
 

Similar threads

بالا