二重积分画三维图,错误使用 integralCalc/finalInputChecks (line 511)输入函数必须返回 'double' 或 'single' 值。找到 'sym'。如何解决?

img


这是表达式,下面程序得到的提示错误


clc;clear;tic
syms  k alpha
[x,y] = meshgrid(linspace(0,4,41),linspace(0,4,41));
t=0.5;c=2;
zeta = zeros(numel(x),1);
for i = 1:numel(x)
    for n=0:1:0
        wn = sqrt(k.*(2.*n+1));
        u = exp(-(alpha-t).^2);
        s = sqrt(pi)./(2.*c).*exp((-k.^2)./(4.*c.^2));
        fun1=@(k,alpha)2./pi .*exp(-k.*x(i)).*laguerreL(n,2.*k.*x(i)).*wn.*s.*cos(k.*y(i)).* ...
            2.*k./wn .* exp(-k.*alpha).*laguerreL(n,2.*k.*alpha).*u;
        int=integral2(fun1,0,inf,0,inf);%后面改成matlabFunction可以运行,但是我想知道为什么这样不可以正常执行命令呢
        zeta(i) = zeta(i)+  int;
    end
    disp(i);
end
figure
Zeta=reshape(zeta,size(x));
surf(x,y,Zeta),view(0,90)
shading interp;
cx = colorbar;

title('(a) t=0.5')
xlabel('x=x''/\sigma')
ylabel('y=y''/\sigma')
set(gca,'XLim',[0,4]);
set(gca,'XTick',0:1:4);
set(gca,'XTickLabel',0:1:4);
set(gca,'YLim',[0,4]);
set(gca,'YTick',0:1:4);
set(gca,'YTickLabel',0:1:4)
toc

为什么这个改成matlabFunction之后可能正常运行但是用这个不可以??

下面是我用把上面的函数柄改成matlabFunction代码

clc;clear;tic
syms  k alpha
[x,y] = meshgrid(linspace(0,4,41),linspace(0,4,41));
t=0.5;
c=2;
zeta = zeros(numel(x),1);
for i = 1:numel(x)
    for n=0:1:0
        wn = sqrt(k*(2*n+1));
        u = exp(-(alpha-t)^2);
        s = sqrt(pi)/(2*c)*exp((-k^2)/(4*c^2));
        Fun=2/pi *exp(-k*x(i)).*laguerreL(n,2*k*x(i))*wn*s*cos(k*y(i))* ...
            2*k/wn * exp(-k*alpha)*laguerreL(n,2*k*alpha)*u;
        int=integral2(matlabFunction(Fun),0,inf,0,inf);%只在此处与上面有不同
        zeta(i) = zeta(i)+  int;
    end
    disp(i);
end
figure
Zeta=reshape(zeta,size(x));
surf(x,y,Zeta),view(0,90)
shading interp;
cx = colorbar;

title('(a) t=0.5')
xlabel('x=x''/\sigma')
ylabel('y=y''/\sigma')
set(gca,'XLim',[0,4]);
set(gca,'XTick',0:1:4);
set(gca,'XTickLabel',0:1:4);
set(gca,'YLim',[0,4]);
set(gca,'YTick',0:1:4);
set(gca,'YTickLabel',0:1:4)
toc

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7670052
  • 这篇博客你也可以参考下:我的matlab仿真——一个非常令人无语而又容易忽视的错误
  • 除此之外, 这篇博客: 第九章 MATLAB程序设计(M文件,程序结构与流程控制,函数句柄)中的 9.1.2. 函数文件(Function) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    函数文件的第一行一般都是以Function开始,是函数文件的标志,函数文件都哦是为了实现某种特定的功能,函数在实际应用中占有重要地位

    函数文件与命令文件主要区别:函数文件一般要带有参数,要有返回值,而且函数文件一定要有函数名;命令文件一般不需要带有参数,而且其中的变量执行完之后仍然会保留在内存之中,直到被clear命令清除;而函数文件中的变量仅仅在函数运行期间有效,一旦函数运行结束,其定义的一切变量都会被系统自动清除

    举例:分段函数
    在这里插入图片描述
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^