ورود

View Full Version : سوال: علت خروجیهای مختلف در MATLAB



hamed-n
چهارشنبه 27 اردیبهشت 1391, 12:24 عصر
سلام .
از دوستان کسی میدونه علت اینکه MATLAB با هر بار اجرای یه برنامه خروجیهای مختلف میده چیه؟
من یه برنامه نوشتم که، با اینکه ورودیها و داده های اولیه ثابته و خود برنامه م تغییر نمیدم، هر بار Run میکنم جوابش با جواب قبلی متفاوته.
ورژن نرم افزارمم اینه و با سریال رجیستر شده :

MATLAB 7.1 : Version 7.1.0.246 (R14) Service Pack 3

ممنون میشم اگه کسی راهنمایی کنه.

mp_mp353
چهارشنبه 17 خرداد 1391, 20:46 عصر
دوست من شاید مقادیر قبلی درمتغیر های شما باقی میمونن و با عث ایجاد خروجی های متفاوت می شوند. من قبلا اینگونه مشکلی رو داشتم.

Stanford
سه شنبه 23 خرداد 1391, 00:06 صبح
دستور زیر رو ابتدای m-file قرار بدید:

clear all
چک بکنید ببینید از توابع random استفاده نکردید؟

rand

randn
به الگوریتم m-file تون تسلط کافی دارید؟ منظوزم اینه که شاید خودتون تو برنامه کدی نوشتید که خروجی های مختلفی تولید می کنه.
اگر حل نشد کدتون رو بزارید تا بررسی بشه.

hamed-n
جمعه 02 تیر 1391, 02:06 صبح
ممنونم از راهنماییتون، من همیشه اول برنامه هام از clear all استفاده میکنم.

برنامه مربوط به سقوط آزاد روی سیستم جرم و فنره.
مقادیر ورودی به صورت زیره:


h=2
k=10000
m=5000/9.81
kisi=.02

اینم کد برنامه س:


clear all
clc

syms t
h=input('h = ');
k=input('k = ');
m=input('m = ');
c=input('kisi = ');
g=9.81;

v0=sqrt(2*g*h);
p0=m*g;
wn=sqrt(k/m);
wd=wn*sqrt(1-c^2);

A=-p0/k;


t0=0;
n=1;
o=0;
x=0;
while n-o==1
o=n;
syms t
B=((v0+c*wn*A)/wd);
y=exp(-c*wn*t)*(A*cos(wd*t)+B*cos(wd*t));
yy=diff(y,t);
yyy=diff(y,t,2)-9.82;
ta=double(solve(yyy));
t=ta;
a=c^2*wn^2*exp(-c*wn*t)*(A*cos(wd*t)+B*cos(wd*t))-2*c*wn*exp(-c*wn*t)*(-A*sin(wd*t)*wd-B*sin(wd*t)*wd)+exp(-c*wn*t)*(-A*cos(wd*t)*wd^2-B*cos(wd*t)*wd^2);
if a>9.81
t=ta;
t0=ta;
y =exp(-c*wn*t)*(A*cos(wd*t)+B*cos(wd*t));
v0=-3/25*545^(1/2)*exp(-3/25*545^(1/2)*t)*(-1/2000*cos(4927338857573209/35184372088832*t)+B*cos(4927338857573209/35184372088832*t))+exp(-3/25*545^(1/2)*t)*(4927338857573209/70368744177664000*sin(4927338857573209/35184372088832*t)-4927338857573209/35184372088832*B*sin(4927338857573209/35184372088832*t));
h=((v0^2)/(2*g))-y;
v0=sqrt(2*g*h);
n=n+1;
x=x+1;
else
break
end
end
x