Matlab 二维函数的参数积分和数值绘图

Matlab 二维函数的参数积分和数值绘图,matlab,matlab-figure,Matlab,Matlab Figure,我将设计一个二维函数作为概率密度函数,它是两个变量的函数,即f=f(x,n)。然后,当目标绘制概率变化时,应考虑与参数x相关的积分。t参数是计划作为积分上限的变量。可以说,n是另一个调整因素。最后,适当注意所考虑的网格,应绘制概率曲面 我选择的集成过程是符号int函数。但是有一个错误:使用mupadmex时出错 这是我的密码: clear; syms x; syms n; syms t; sigma = 1; mu = 0; [t,n] = meshgrid(0:0.01:20, 1:1:

我将设计一个二维函数作为概率密度函数,它是两个变量的函数,即f=f(x,n)。然后,当目标绘制概率变化时,应考虑与参数
x
相关的积分。
t
参数是计划作为积分上限的变量。可以说,
n
是另一个调整因素。最后,适当注意所考虑的
网格
,应绘制概率曲面

我选择的集成过程是符号
int
函数。但是有一个错误:
使用mupadmex时出错

这是我的密码:

clear;

syms x;
syms n;
syms t;

sigma = 1;
mu = 0;

[t,n] = meshgrid(0:0.01:20, 1:1:100);

f = (n./(2*sigma*sqrt(pi))).*exp(-((n.*x)./(2.*sigma)).^2);

ff = int(f, x, -inf, t);

mesh(n,t,ff);
以及错误跟踪:

Error using mupadmex
Error in MuPAD command: The argument is invalid. [Dom::Interval::new]

Error in sym/int (line 153)
   rSym = mupadmex('symobj::intdef',f.s,x.s,a.s,b.s,options);

Error in field (line 14)
ff = int(f, x, -inf, t);
你能帮我克服这条领带吗

另外,我知道有一些想法可以通过
integral
函数来实现这一点,但是如果可能的话,我倾向于通过
int
函数来处理这个问题。因为此代码应该被其他代码段用作服务,并且生成的
ff
参数是完全值得的,但是它不是一个封闭形式的函数


提前谢谢。

我已经更改了您代码中的一些细节,我将尝试解释所有这些细节

  • 不需要定义非符号的符号变量

  • 代码:

  • 您需要为不同的n集成函数f(n,x)dx。如果你创建一个n的网格(而不是一个向量),你将有大量重复的f(ni,x),你不会使用 只要做:

    t=(0:1:20);
    
    n=(1:10:100);
    % are you sure you dont want ((n.*x)-mu) here?
    f = (n./(2*sigma*sqrt(pi))).*exp(-((n.*x)./(2.*sigma)).^2);
    
  • int
    不接受符号函数的网格!(或者说我还没能成功…) 所以,在那里放上两个

    for ii=1:length(n)
        for jj=1:length(t)
            ff(ii,jj) = int(f(ii), x, -inf, t(jj));
        end
    end
    
  • 现在我们确实需要一个网格来绘制图 像这样:

    [t,n] = meshgrid(t, n);
    
  • 要绘制数值,请使用
    double()
    将符号转换为数字:
  • 阴谋!:

    mesh(n,t,double(ff));
    
    结果(由于需要明显的计算工作量,分数较低)


    那么你是在尝试对函数进行求值
    f(x,n)
    2000000次不同的x和积分上限?每个
    f(x,ni)
    都有一个特定的上限
    ti
    ?我理解正确吗?@AnderBiguri:你完全同意了!。。。
    t
    的应用范围对于所需的分辨率和最终绘图而言是非常理想的。不过,这不是问题所在@或者你想积分一个高斯函数。为什么不直接使用
    erfc
    normcdf
    函数?@LuisMendo:因为我已经通过这种方法获得了下一步计算的自由度……从性能来看,您对这两个
    for
    循环的评估如何,与将
    meshgrid
    传递到
    int
    函数相比,在一次内?。。。你的想法行得通,,,但它相当冗长,而且可能效率低下…@Ordenador我用for循环完成它,因为我找不到一种没有for循环的方法。我尝试了您的直接方法(使用meshgrid),我不确定它与for循环相比如何,但速度非常慢,我得到的meshgrid为1。好吧,你所得到的错误正是因为这个,你不能给
    int
    函数一个整数极限的网格网格。@Ordenador希望有人能给出一个更好的答案,但我认为你无法克服int不接受网格极限的事实!
    mesh(n,t,double(ff));