[已解决] integral2计算二重广义积分输入函数必须返回 'double' 或 'single' 值。找到 'sym'

[复制链接]
15380436575 发表于 2021-4-6 14:42:33
clear;
clc;
syms ky kx  
S=3/2;
J=2.2;
K=1.36;
B=0;
M=52*1.674*10.^(-27);
U=5;%magnon-phonon interaction
b=1.054*10.^(-16);%普朗克约化常数
W=10/b;
wp=W*sqrt(4-2*cos(kx)-2*cos(ky));%phonon dispersion
d=U*sqrt((b*S)/(M*wp));
wm=((2*J*S)*(2-cos(kx)-cos(ky))+K*S+B)/b;%magnon
h=[ d*sin(ky), d*sin(kx), (b*(wm - wp))/2];
dfkx=diff(h,kx);%对kx偏导
dfky=diff(h,ky);%对ky偏导
v=cross(dfkx,dfky);%叉乘
Q=0.5*dot(h,v);%内积
fun=@(kx,ky)Q
q=integral2(fun,-pi,pi,-pi,pi,'method','iterated','AbsTol',0,'RelTol',1e-10)

最佳答案


EngineerLeon 发表于 2021-4-6 14:56:22
不能写成 fun=@(kx,ky)Q 这样
要么用eval函数,要么就用matlabFunction转换函数
fun = matlabFunction( Q, 'vars', { kx, ky } );
回复此楼

4 条回复


EngineerLeon 发表于 2021-4-6 14:56:22
不能写成 fun=@(kx,ky)Q 这样
要么用eval函数,要么就用matlabFunction转换函数
fun = matlabFunction( Q, 'vars', { kx, ky } );
回复此楼

15380436575 发表于 2021-4-6 15:06:21
EngineerLeon 发表于 2021-4-6 14:56
不能写成 fun=@(kx,ky)Q 这样
要么用eval函数,要么就用matlabFunction转换函数
fun = matlabFunction( Q,  ...

这个问题确实解决了,但运行之后显示”’遇到无限值或非数字值”

EngineerLeon 发表于 2021-4-6 15:10:59
15380436575 发表于 2021-4-6 15:06
这个问题确实解决了,但运行之后显示”’遇到无限值或非数字值”

那是你的待积分式本身的属性,比如有无穷值之类的,不是MATLAB的问题

15380436575 发表于 2021-4-6 15:32:32
EngineerLeon 发表于 2021-4-6 15:10
那是你的待积分式本身的属性,比如有无穷值之类的,不是MATLAB的问题

明白了,谢谢:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表