计算卷积积分时Matlab中未定义的函数或变量's'

时间:2014-09-01 01:18:47

标签: matlab integration convolution numerical-integration

我试图编写一个循环,计算每一步的定积分值。函数F非常复杂。换句话说,它集成了一系列关于s的项,从s = tn-(n / 2)到s = tn +(n / 2)。在积分之后,F仍然具有变量t。所以你可以说F(t)=积分(f(s,t)),其中f(s,t)是" int之后的一大块术语("在行#34; F = @t ..."。在最后一行,我想在F计算f(s,t)的积分后,在t = tn处评估F(t)。

然而,在运行此操作后,我收到错误"未定义的功能或变量'。'

function [ bigTheta_n ] = Untitled( bigTheta_o, bigOmega_o )
nt=5001; %since (50-0)/.01 = 5000
dt = .01; % =H
H=.01;
l=.05;

bigTheta_n = ones(nt,1);
bigTheta_n(1)=bigTheta_o; %theta_o

bigOmega_n = ones(nt,1);
bigOmega_n(1)=bigOmega_o; %omega_o
littleOmega_n = ones(nt,1);

epsilon=10^(-6);
eta = epsilon*10;

t_o=0;

    function Keta = K(t)
        Keta = (422.11/eta)*exp((5*(4*((t-tn)^2)/eta^2)-1)^(-1))        
    end

    function F = F(t)
        F = int(Keta(eta*t-s)*littleOmega_n,s,tn-(n/2),tn+(n/2))
    end

for n=1:4999
    tn=t_o+n*dt;
    littleOmega_n(n) = bigOmega_n(n) - sin(bigTheta_n(n))*cos(2*pi*tn/epsilon)/(2*pi*l);
    F = @(t) int(Keta(eta*t-s)*littleOmega_n,s,tn-(n/2),tn+(n/2));
    bigTheta_n(n+1) = bigTheta_n(n) + H*F(tn)
end

end

即使我摆脱了这条线" F = @(t)......"并用以下内容替换(并将其置于Keta = K(t)定义的位置下方)

function F = F(t, ti, tf)
    F = int(Keta(eta*t-s)*littleOmega_n,s,ti,tf)
end

然后替换

的最后一行
bigTheta_n(n+1) = bigTheta_n(n) + H*F(tn)

bigTheta_n(n+1) = bigTheta_n(n) + H*F(tn, tn-(n/2), tn+(n/2))

我仍然得到同样的错误"未定义的功能或变量' s'。"

1 个答案:

答案 0 :(得分:0)

试试这个

F = @(t) int(@(s) Keta(eta*t-s)*littleOmega_n,s,tn-(n/2),tn+(n/2));

使得integrand成为一个带有输入s的匿名函数。