how to integrate inside 'for' loop

조회 수: 2 (최근 30일)
Nabhdeep Bansal
Nabhdeep Bansal 2014년 8월 24일
댓글: Matz Johansson Bergström 2014년 8월 24일
I am new to matlab. All i wanted was to integrate f(t)*cos(pi*n*t) over t through quadgk inside a loop where n varies from 1 to 10. But I guess the problem is that quadgk needs a function where only t is a variable and not n. how to do it???
t=linspace(0,12,1000);
T=2;
Y=g(t)';
rep=(t(end)-t([1]))/T;
f=0;
N=5;
hold on;
h=zeros(N,1);
clr=lines(N);
for n=1:2:N;
line(t,Y,'linewidth',5)
grid on;hold on;
A=(1/T)*quadgk(@g,0,T);
P=Y.*(cos(n*pi*t))';
Q=Y.*(sin(n*pi*t))';
Ax=(2/T)*quadgk(@s,0,T);
Bx=(2/T)*trapz(t,Q)/rep;
f=f+(Ax*cos(pi*n*t)+Bx*sin(pi*n*t));
final=A+f;
h(n)=plot(t,final,'linewidth',2,'Color',clr(n,:));
end
hold off;
legend(h, num2str((1:N)','harmonic-%d'))
function f=g(x)
z=2*floor(x/2);
x1=x-z;
y1=(1).*(0<=x1 & x1<=0.8);
y2=(-1).*(0.8<x1 & x1<2);
f=y1+y2;

채택된 답변

Matz Johansson Bergström
Matz Johansson Bergström 2014년 8월 24일
편집: Matz Johansson Bergström 2014년 8월 24일
To solve this problem you can use a anonymous function handle to a function with x and n as arguments.
f = @(x) myfun(x, n);
So you define your function with 'function myfun(x,n)' and pass the handle f to quadgk like
quadgk(f,0,T)
Please note that I don't use @ here.
  댓글 수: 6
Nabhdeep Bansal
Nabhdeep Bansal 2014년 8월 24일
What you are saying is true Sir. The output curves are incorrect. How to pass n as an extra argument?
Matz Johansson Bergström
Matz Johansson Bergström 2014년 8월 24일
You want to calculate the quadrature of f(t)*cos(pi*n*t), how do you define f?

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by