مشكل در تابع بازگشتي

amir ghasemiyan

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

به كد زير نگا كنيد. توش تابع بازگشتي استفاده شده.

کد:
function [KLM]=RTG(n)
if (n==0)
    KLM=13;
else
    KLM=((5*RTG(n-1))+7);
end

حالا مشكلم اينه كه ميخوام براي مثلا n=5 بجاي اينكه فقط جواب آخر رو بده، بقيه جوابهايي كه از طريق بازگشت محاسبه ميكنه يعني n=4,3,2,1,0 رو هم بهم بده. البته خودم با اين كد تونستم جواب ها رو بيرون بكشم ولي قابل استفاده نيستن و فقط نمايش داده ميشه.

کد:
function [KLM]=RTG(n)
if (n==0)
    KLM=13;
else
    KLM=((5*RTG(n-1))+7);
    disp(KLM)
end

ممنون ميشم راهنماييم كنين
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
یه راهش اینه که از متغیر global استفاده کنید:
کد:
function [KLM,a]=RTG(n)
global a
if n==0
    KLM=13;
else
    KLM=5*RTG(n-1)+7;
end
a(n+1,:)=[n,KLM];

نمونه:
کد:
>> clear all
>> [p,a]=RTG(5)


p =


       46092




a =


           0          13
           1          72
           2         367
           3        1842
           4        9217
           5       46092


>>
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
ممنون مهندس. ولي لينكتون مشكل داره. يه چك بكن.

چک کردم؛ از اینجا که مشکلی نداره. تابعش به این روش این طوری می شه:
کد:
function d=RTG2(n)
d=zeros(n+1,1);
d(1)=13;
if n>0
    d(2)=5*RTG2(0)+7;
end
for k=3:n+1
    d(k)=5*d(k-1)+7;
end



این هم تستش:
کد:
% a=RTG2(5)
% a =
%           13
%           72
%          367
%         1842
%         9217
%        46092


ـ این روش به روش استفاده از متغیر global مرجحه.
 

amir ghasemiyan

مدیر بازنشسته
کاربر ممتاز
چک کردم؛ از اینجا که مشکلی نداره. تابعش به این روش این طوری می شه:
کد:
function d=RTG2(n)
d=zeros(n+1,1);
d(1)=13;
if n>0
    d(2)=5*RTG2(0)+7;
end
for k=3:n+1
    d(k)=5*d(k-1)+7;
end



این هم تستش:
کد:
% a=RTG2(5)
% a =
%           13
%           72
%          367
%         1842
%         9217
%        46092


ـ این روش به روش استفاده از متغیر global مرجحه.

بله مهندس. مشكل از سيستم من بود. الان دوباره چك كردم، وارد شد.

فقط يك نكته اونم اينكه تو اين حالت ديگه از تابع بازگشتي خارج ميشه. با اجازت يكم خلاصه ترش كردم

کد:
function d=RTG2(n)
d(1)=13;
for k=2:n+1
    d(k,1)=5*d(k-1)+7;
end

بازم ممنون :gol:
 

مریم 92

عضو جدید
x=rand(3,7200);
x=stab3.Force.Frequency;
Tt=stab3.Force.NrOfFrames/stab3.Force.Frequency;
Ts=15;
Te=45;
T=Ts:1/x:(Tt-Te);
DataAP=stab3.Force.COP(1,x*Ts:x*(Tt-Te));
DataML=stab3.Force.COP(2,x*Ts:x*(Tt-Te));

DataAP = stab3.Force.COP(1,:).'; % noisy data
x=stab3.Force.Frequency;% sampling frequency
f_cutoff = 10; % cutoff frequency
fnorm =f_cutoff/(x/2);
[b1,a1] = butter(10,fnorm,'low'); % Low pass Butterworth filter
Filtered = filtfilt(b1,a1,DataAP); % filtering
subplot(2,1,1), plot(T,DataAP), title('Actual data');
subplot(2,1,2), plot(Filtered), title('Filtered data');


DataML = stab3.Force.COP(2,:).'; % noisy data
x=stab3.Force.Frequency;% sampling frequency
f_cutoff = 10; % cutoff frequency
fnorm =f_cutoff/(x/2);
[b1,a1] = butter(10,fnorm,'low'); % Low pass Butterworth filter
Filtered = filtfilt(b1,a1,DataML); % filtering
subplot(2,1,1), plot(T,DataML), title('Actual data');
subplot(2,1,2), plot(Filtered), title('Filtered data');

AP=sum(x(1,:))/length(x);
ML=sum(x(2,:))/length(x);

AP=x(1,:)-AP;
ML=x(2,:)-ML;
RD=(AP.^2+ML.^2).^0.5;
MDIST=sum(RD)/length(x);
MDISTAP=sum(abs(AP))/length(x);
RDIST=((sum(RD.^2))/length(x)).^.5;
RDISTAP=((sum(AP.^2))/length(x)).^.5;

TOTEX=0;
n=1:N;
for i=1:length(x)-1
TOTEX=(((AP(n+1))-(AP(n))).^2+((ML(n+1)-(ML(n))).^2)).^.5+TOTEX;
TOTEXAP=(abs(AP(n+1)-AP(n)))+TOTEX;
end

MVELO=TOTEX/T;
MVELOAP=TOTEXAP/T;
SRD=((RDIST.^2)-(MDIST.^2)).^.5;
AREA_CC=pi(MDIST+1.654*SRD).^2;
SAPML=(sum(AP*ML))/length(x);
D=((SAP.^2+SML.^2)-(4*(((SAP.^2)*(SML.^2))-(SAPML.^2)))).^0.5;
AREA_CE=pi*a*b;

n=1:N;
for i=1:length(x)-1
AREA_SW=(sum(abs(AP(n+1)*ML(n))-(AP(n)*ML(n+1))))/2*T;
end

MFREQ=TOTEX/(2*pi*MDISTT);
MFREQ2=MVELO/(2*pi*MDIST);
MFREQAP=TOTEXAP/(4*(2^0.5)*MDISTAP*T);
MFREQAP2=MVELOAP/(4*(2.^0.5)*MDISTAP);
FD=log(N)/(log(Nd/TOTEX));
dFD_CC=2*(MDIST+1.645*SRD);
dFD_CE=((2*a)*(2*b)).^.5;





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

Similar threads

بالا