【问题标题】:Undefined function or variable 's' in Matlab when computing convolution integral计算卷积积分时Matlab中未定义的函数或变量's'
【发布时间】:2023-03-11 22:26:01
【问题描述】:

我正在尝试编写一个循环来计算每一步的定积分值。函数 F 非常复杂。简单来说,它整合了一堆关于s的项,从s=tn-(n/2)到s=tn+(n/2)。积分后,F还有一个变量t。所以你可以说 F(t) = integral(f(s,t)),其中 f(s,t) 是 "F = @t..." 行中 "int(" 之后的一大堆术语。在最后一行中,我想在 F 计算 f(s,t) 的积分后,在 t=tn 处计算 F(t)。

但是,运行此程序后,我收到错误“未定义的函数或变量's'。”

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'。”

【问题讨论】:

  • sys s 这一行是什么?
  • 我删除了它,它没有任何区别

标签: matlab integration convolution numerical-integration


【解决方案1】:

试试这个

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

这使得被积函数成为接受输入 s 的匿名函数。

【讨论】:

  • 即使尝试我仍然收到消息“未定义的函数或变量's'。”,“Untitled/@(t)int(@(s)Keta(etats) 中的错误” )*littleOmega_n,s,tn-(n/2),tn+(n/2))”和“Untitled 中的错误(第 34 行)bigTheta_n(n+1) = bigTheta_n(n) + HF (tn);"
  • s 应该做什么?它是您要整合的变量,还是其他什么?如果是别的东西,那么你需要在使用它之前定义它。
猜你喜欢
  • 2021-09-05
  • 2020-06-07
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
相关资源
最近更新 更多