کلیدستان

نسخه‌ی کامل: function
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام این کدیه که من برا convolve نوشتم و میخوام function اش کنم خود کد درسته ولی تو فانکشنش مشکل دارم.خود کد رو هم اینجا میارم و هم فانکشنی که براش نوشتم ممنون میشم بگین مشکل فانکشنش چیه.اروری که برا اجرای فانکشن میاره اینه :Not enough input arguments.

خود کد:

کد:
clc;
clear all;
close all;

t=0:1/20:9*(1/20);
x=rand(1,10);
subplot(3,3,1);plot(t,x)
title('x(t)','color','B')



t=0:1/20:9*(1/20);
h=rand(1,10)';
subplot(3,3,2);plot(t,h)
title('h(t)','color','B')



for i=1:length(h)
    X(i:length(x)+(i-1),i)=(x(1,:))'
end

y=X*h;
% I titled y=X*h as "Mconv(x,h)"
subplot(3,3,4);plot(y);title('Mconv(x,h)','color','B')
subplot(3,3,5);plot(conv(x,h));title('conv(x,h)','color','B')


it's function:

کد:
function [ X ] = Mconvolve(x,h)

for i=1:length(h)
    X(i:length(x)+(i-1),i)=(x(1,:))';
end

end
سلام.
تابع رو به صورت زیر تعریف می کنیم :

کد:
function [X] = Mconvolve(x,h)

t=0:1/20:9*(1/20);
subplot(3,3,1);plot(t,x)
title('x(t)','color','B')

t=0:1/20:9*(1/20);
subplot(3,3,2);plot(t,h)
title('h(t)','color','B')

for i=1:length(h)
    X(i:length(x)+(i-1),i)=(x(1,:))'
end

y=X*h;
% I titled y=X*h as "Mconv(x,h)"
subplot(3,3,4);plot(y);title('Mconv(x,h)','color','B')
subplot(3,3,5);plot(conv(x,h));title('conv(x,h)','color','B')

end

و سپس به صورت زیر به آن ارجاع می دهیم :

کد:
clear all
close all
clc

x=rand(1,10);
h=rand(1,10)';

X=Mconvolve(x,h)
ممنون از شما.حالا اگه بخوایم از این فانکشن برا یه تابع دیگه مثلا غیر رندوم استفاده کنیم چی؟مگه نه اینکه تابعی که تعریف میشه باید برا همه شرایط جواب بده؟!این تابعی که شما تعریف کردید به خاطر وجود بازه زمانی در حوزه محدودی جواب خواهد داد!
من بر اساس ورودی و خروجی هایی که شما مشخص کرده بودید، تابع رو تعریف کردم. حالا اگر قصد دارید که تابع بتونه برای بازه های زمانی مختلف جواب بده، باید t رو از تابع بیارید بیرون و یک ورودی دیگر با نماد t ، به ورودی های تابع اضافه کنید. یعنی شما t رو در بیرون از تابع تعریف کرده و سپس آن را به تابع می دهید تا بر اساس آن، پردازش کند.
(۱۳۹۲/۰۸/۱۲, ۰۱:۲۵ ب.ظ)'admin' نوشته: [ -> ]من بر اساس ورودی و خروجی هایی که شما مشخص کرده بودید، تابع رو تعریف کردم. حالا اگر قصد دارید که تابع بتونه برای بازه های زمانی مختلف جواب بده، باید t رو از تابع بیارید بیرون و یک ورودی دیگر با نماد t ، به ورودی های تابع اضافه کنید. یعنی شما t رو در بیرون از تابع تعریف کرده و سپس آن را به تابع می دهید تا بر اساس آن، پردازش کند.

 
(۱۳۹۲/۰۸/۱۳, ۰۷:۱۸ ب.ظ)'sonia' نوشته: [ -> ]
(۱۳۹۲/۰۸/۱۲, ۰۱:۲۵ ب.ظ)'admin' نوشته: [ -> ]من بر اساس ورودی و خروجی هایی که شما مشخص کرده بودید، تابع رو تعریف کردم. حالا اگر قصد دارید که تابع بتونه برای بازه های زمانی مختلف جواب بده، باید t رو از تابع بیارید بیرون و یک ورودی دیگر با نماد t ، به ورودی های تابع اضافه کنید. یعنی شما t رو در بیرون از تابع تعریف کرده و سپس آن را به تابع می دهید تا بر اساس آن، پردازش کند.
 
 

کد: ممنونم من تابعی که جواب داد رو میذارم اینجا به نظرتون این درسته؟ شکلی که میخوامو کمو بیش میده:

کد پی‌اچ‌پی:
function [ ] = Mconvolvex,)

for 
i=1:length(h)
    
X(i:length(x)+(i-1),i)=(x(1,:))';
end

y=X*h

end 
 
شما پردازش بر روی t رو از تابع بیرون آوردین، ولی کد زیر بهتره (بهتره پردازش داخل تابع باشه) :

کد:
function [X] = Mconvolve(x,h,t)

subplot(3,3,1);plot(t,x)
title('x(t)','color','B')

subplot(3,3,2);plot(t,h)
title('h(t)','color','B')

for i=1:length(h)
    X(i:length(x)+(i-1),i)=(x(1,:))'
end

y=X*h;
% I titled y=X*h as "Mconv(x,h)"
subplot(3,3,4);plot(y);title('Mconv(x,h)','color','B')
subplot(3,3,5);plot(conv(x,h));title('conv(x,h)','color','B')

end

و به صورت زیر، به تابع ارجاع می دهیم :

کد:
clear all
close all
clc

x=rand(1,10);
h=rand(1,10)';
t=0:1/20:9*(1/20);

X=Mconvolve(x,h,t)

همان طور که مشاهده می کنید، t نیز به عنوان ورودی تابع، تعریف شده است.
ممنون