Matlab 无法集成该函数。双倍到sym

Matlab 无法集成该函数。双倍到sym,matlab,integration,Matlab,Integration,我正在尝试整合这个功能。我发现了错误 类型为“double”的输入参数的未定义函数“int”。 这是我的密码: P = @(m,sigma,t,C) (normcdf((C-m/sigma)/sqrt(t),0,1) - exp(2*C*m/sigma)*normcdf((-C-m/sigma)/sqrt(t),0,1)); Pr = @(m1,m2,sigma_1, sigma_2,t,C) (P(m1,sigma_1,t,C)*P(m2,sigma_2,t,C)); P_S = @(m1,m

我正在尝试整合这个功能。我发现了错误
类型为“double”的输入参数的未定义函数“int”。
这是我的密码:

P = @(m,sigma,t,C) (normcdf((C-m/sigma)/sqrt(t),0,1) - exp(2*C*m/sigma)*normcdf((-C-m/sigma)/sqrt(t),0,1));
Pr = @(m1,m2,sigma_1, sigma_2,t,C) (P(m1,sigma_1,t,C)*P(m2,sigma_2,t,C));
P_S = @(m1,m2,sigma_1,sigma_2,C) (1 - int(Pr(m1,m2,sigma_1,sigma_2,t,C), t, 0, inf));

我做错了什么?如何集成此函数?

normcdf
用于浮点计算,不支持符号输入。你需要自己写。幸运的是,这很容易。尝试用以下内容替换
normcdf

normcdf_sym = @(x,mu,sig) (1./(sig*sqrt(2*sym('pi'))))*int(exp(-(t-mu).^2./(2*sig.^2)),t,-Inf,x);
或与此等效,相当于上述:

normcdf_sym = @(x,mu,sig) (1+erf((x-mu)./(sig*sqrt(2))))/2;
此外,您可能希望将符号变量定义为实数:
syms m sigma t C real。或者使用和函数


所有这些都假设您首先要使用符号积分,而不是数字积分。

非常感谢!我试试看。但实际上我是这样定义c,sigma和m的:
c=0;m=1;西格玛=0.1。现在,如果将
int
替换为
integral(@(x)Pr(m1,m2,…))
,它就可以正常工作。但我还有另一个问题。我必须找到P_S函数的零点。所以我应该使用
fzero()
fnzeros()
。但是我得到了下一个错误:
输入是未知的(函数)形式
,与
fnzero
一致。我现在做错了什么?所以你想做数值积分,而不是符号积分。请注意,当您立即键入
help int
(或
help sym/int
)时,您会看到“…S相对于其符号变量的不定积分…”。当你输入帮助积分时,你会看到“…数值计算积分…”。这些都是非常不同的事情,如果您在尝试之前使用了正确的函数,那么最好先了解一下。例如,从
帮助fnzeros
的第一行开始:“…单变量样条曲线F的零的有序列表…”。你在用样条曲线吗?可能不会。顺便说一下,供将来参考:vs。