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。