【问题标题】:Matlab symbolic function with normcdf带有normcdf的Matlab符号函数
【发布时间】:2012-08-18 18:16:45
【问题描述】:

我有以下函数,我想使用 matlab 找到它的极值。

该函数必须使用 matlab 中的“normcdf”函数才能获得结果,但是当我尝试创建符号函数时,我得到了一些错误。

我给出的输入如下:

syms z fz t sz
fv = 1000 * ((z * fz * normcd(t,fz,sz)) / (20 * 50 * normcd(t,50,20))) + 1000 * normcdf((20 * 50 * normcd(t,50,20) + z * fz * normcd(t,fz,sz)) / 2000, 50 * normcd(t,50,20), 20) - 10 * z

我得到的错误如下:

??? Error using ==> sym.le at 11
Function 'le' is not implemented for MuPAD symbolic objects.

Error in ==> normcdf at 57
sigma(sigma <= 0) = NaN;

有谁知道我该如何解决这个问题?提前致谢。

忘了说我用的是matlab版本R2009a。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    它似乎对我有用:

    >> syms z fz t sz
    >> fv = 1000 * ((z * fz * normcdf(t,fz,sz)) / (20 * 50 * normcdf(t,50,20))) + 1000 * normcdf((20 * 50 * normcdf(t,50,20) + z * fz * normcdf(t,fz,sz)) / 2000, 50 * normcdf(t,50,20), 20) - 10 * z
    
    >> subs(fv,{fz,sz,t,z},{1,2,3,4});
    
    ans =
    
     809.2922
    

    看看Subs

    【讨论】:

    • 你使用的是哪个版本的matlab?我有 R2009a。也许你有我做的更新版本。
    • 我正在使用7.14.0.739 (R2012a)。希望其他人加入。
    【解决方案2】:

    我找到了解决方法。除了使用normcdf,还可以使用与erf 等效的等式,这样就可以正常工作了。

    normcdf(x,mu,sig) = (1+erf((x-mu)/sig/sqrt(2)))/2
    

    【讨论】:

    • 来自 Mathematica 背景,这太荒谬了 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2015-10-14
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多