我正在尝试编写一个循环来计算每一步的定积分值。函数F非常复杂。简单来说,它整合了一堆关于s的项,从s=tn-(n/2)到s=tn+(n/2)。积分后,F仍然有一个变量t。所以你可以说 F(t) =积分(f(s,t)),其中 f(s,t) 是“F = @t...”行中“int(”之后的一大堆术语。在最后一行中,我想在 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))
我仍然收到相同的错误“未定义的函数或变量”。”
试试这个
F = @(t) int(@(s) Keta(eta*t-s)*littleOmega_n,s,tn-(n/2),tn+(n/2));
这使得被积函数成为接受输入的匿名函数
s
。