Matlab 二维函数的参数积分和数值绘图
我将设计一个二维函数作为概率密度函数,它是两个变量的函数,即f=f(x,n)。然后,当目标绘制概率变化时,应考虑与参数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:
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
参数是完全值得的,但是它不是一个封闭形式的函数
提前谢谢。我已经更改了您代码中的一些细节,我将尝试解释所有这些细节
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));