【问题标题】:Integration of a curve with matlab曲线与matlab的积分
【发布时间】:2014-04-20 12:12:48
【问题描述】:

我正在尝试使用 matlab 计算误报率和误报率。我已经生成了一个带有阈值的 s 曲线(在某个点切割曲线的垂直线)。阈值左侧曲线下的所有值都是假阳性,阈值右侧曲线下的所有值都是假阴性。我必须将曲线下的区域整合为误报和 area_of_rect_to_right_of_threshold - (曲线下到阈值右侧的区域)来计算误报。当我在 matlab 中尝试以下代码时,我遇到了一个奇怪的错误。

    syms p;
    func = (1 - (1 - p^5)^10);
    areaOfRect = (1-threshold)*1; 
    fn = areaOfRect - int(func,p,0,threshold);
    fp = int(func,p,threshold,1);


fn = 2575908626830580620307480425353828014939901186516550645854841225649977931806217173152793134129 ......

fp = 20989145492538166675017041353401970126067731601439729556868060737768716969716535384....

这些输出非常奇特,这让我觉得我没有以正确的方式使用集成功能。任何帮助将不胜感激。

【问题讨论】:

    标签: matlab math false-positive


    【解决方案1】:

    您的文字描述说:“阈值左侧曲线下的所有值都是误报”,但您的代码计算从threshold 到右侧的 1.01 的积分。我无法判断哪个是正确的。

    【讨论】:

    • 那是我的错误。我尝试过的东西不起作用。反正我现在修好了。
    【解决方案2】:

    看起来你只是得到了有理形式的精确解a/b,对浮点的评估应该与数值积分相匹配

    fn_sym = double(fn)
    fn_num = areaOfRect - quadl(@(p)(1 - (1 - p.^5).^10),0.01,threshold)
    fp_sym = double(fp)
    fp_num = quadl(@(p)(1 - (1 - p.^5).^10),threshold,1.01)
    

    【讨论】:

    • 使用double 而不是eval。应尽可能避免使用eval
    • 所以我需要做的就是将 fp 和 fn 值转换为两倍?是的,感谢您的检查方法。它们确实匹配。
    猜你喜欢
    • 2014-06-21
    • 2022-01-13
    • 2021-03-08
    • 2014-12-28
    • 2015-08-10
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多