在 MATLAB 中集成函数
Integrate function in MATLAB
我是 Matlab 新手。我想集成一个功能。我尝试了 int() 和 integrate() 但它们都会给我带来问题 - 参数不足或其他不同的错误,我尝试了很多与文档的组合。我当前的代码如下,我希望能够将数字 p 和 q 传递给 res 并获得数值结果:
syms x;
w = 1;
hbar = 1.054571800*10^(-34);
k = (w/(pi*hbar))^(1/4);
e = @(q) (w*q/hbar)^(1/2);
waveF = @(q) k*exp(-feval(e,q)*feval(e,q)*1/2.0)*1.0/1;
func = @(p,q) waveF(q-x/2)*waveF(q+x/2)*exp(1i*p*x/(hbar));
res = @(p,q) int(func(p,q), x = -Inf..Inf);
目前“x =”被指示为 en 错误,尽管根据文档看起来没问题。
谢谢。
您正在使用 anonymous functions in concert with the Symbolic Toolbox and have mistakenly used the MuPAD version of int
, which is actually generating the error, when you wanted the Symbolic int
.
虽然将匿名函数与符号调用混合并不违法,但我认为一次坚持一种计算范式会更好:
使用符号函数的纯符号版本:
syms x p q e(q) waveF(q) func(p,q) res(p,q);
w = sym(1);
hbar = sym('1.054571800E-34');
k = (w/(pi*hbar))^(1/4);
e(q) = sqrt(w*q/hbar);
waveF(q) = k*exp(-e(q)^2/2);
func(p,q) = waveF(q-x/2)*waveF(q+x/2)*exp(1i*p*x/(hbar));
res(p,q) = int(func(p,q),x,-Inf,Inf);
我将 hbar
的值用引号括起来,以强制使用提供的值,而不是在计算过程中会被强制使用的最接近的有理表示。
使用匿名函数和数字 integral
函数的纯数字版本:
w = 1;
hbar = 1.054571800E-34;
k = (w/(pi*hbar)).^(1/4);
e = @(q) sqrt(w*q/hbar);
waveF = @(q) k*exp(-e(q).^2/2);
func = @(p,q,x) waveF(q-x/2).*waveF(q+x/2).*exp(1i*p*x/hbar);
res = @(p,q) integral(@(x) func(p,q,x),-Inf,Inf);
这两个版本在计算 res
时都会生成 NaN
,但这可能是被积函数的缺点。但是,上述脚本背后的函数形式和思想不会随着被积函数的不同而改变。
我是 Matlab 新手。我想集成一个功能。我尝试了 int() 和 integrate() 但它们都会给我带来问题 - 参数不足或其他不同的错误,我尝试了很多与文档的组合。我当前的代码如下,我希望能够将数字 p 和 q 传递给 res 并获得数值结果:
syms x;
w = 1;
hbar = 1.054571800*10^(-34);
k = (w/(pi*hbar))^(1/4);
e = @(q) (w*q/hbar)^(1/2);
waveF = @(q) k*exp(-feval(e,q)*feval(e,q)*1/2.0)*1.0/1;
func = @(p,q) waveF(q-x/2)*waveF(q+x/2)*exp(1i*p*x/(hbar));
res = @(p,q) int(func(p,q), x = -Inf..Inf);
目前“x =”被指示为 en 错误,尽管根据文档看起来没问题。
谢谢。
您正在使用 anonymous functions in concert with the Symbolic Toolbox and have mistakenly used the MuPAD version of int
, which is actually generating the error, when you wanted the Symbolic int
.
虽然将匿名函数与符号调用混合并不违法,但我认为一次坚持一种计算范式会更好:
使用符号函数的纯符号版本:
syms x p q e(q) waveF(q) func(p,q) res(p,q); w = sym(1); hbar = sym('1.054571800E-34'); k = (w/(pi*hbar))^(1/4); e(q) = sqrt(w*q/hbar); waveF(q) = k*exp(-e(q)^2/2); func(p,q) = waveF(q-x/2)*waveF(q+x/2)*exp(1i*p*x/(hbar)); res(p,q) = int(func(p,q),x,-Inf,Inf);
我将
hbar
的值用引号括起来,以强制使用提供的值,而不是在计算过程中会被强制使用的最接近的有理表示。
使用匿名函数和数字
integral
函数的纯数字版本:w = 1; hbar = 1.054571800E-34; k = (w/(pi*hbar)).^(1/4); e = @(q) sqrt(w*q/hbar); waveF = @(q) k*exp(-e(q).^2/2); func = @(p,q,x) waveF(q-x/2).*waveF(q+x/2).*exp(1i*p*x/hbar); res = @(p,q) integral(@(x) func(p,q,x),-Inf,Inf);
这两个版本在计算 res
时都会生成 NaN
,但这可能是被积函数的缺点。但是,上述脚本背后的函数形式和思想不会随着被积函数的不同而改变。