定义分段函数(例如多项式)

2024-03-15

在 C++ 中定义分段函数(例如在使用样条曲线时需要)的最佳方法是什么?

Example:

        f1(x) if x from [0, 5)
f(x) =  f2(x) if x from [5, 10)
        f3(x) if x from [10, 20)

我当前的方法如下所示:

class Function
{
    virtual double operator()( double x ) = 0;
}

class SomeFun : public Function
{
   // implements operator() in a meaningful way
}

class PiecewiseFunction : public Function
{
    // holds functions along with the upper bound of the interval
    // for which they are defined
    // e.g. (5, f1), (10, f2), (20, f3)
    std::map< double, Function* > fns;

    virtual double operator()( double x )
    {
       // search for the first upper interval boundary which is greater than x
       auto it = fns.lower_bound( x );
       // ... and evaluate the underlying function.
       return *(it->second)(x);
    }
}

这种方法缺乏检查是否x是在函数的整体范围内,就像上面例子中的 [0, 20) ,我知道,也许命名不是最好的(Function vs. std::function等等)。

有什么想法可以以更聪明的方式做到这一点吗?该方法利用键的属性进行排序std::map。这与效率无关,更多的是关于简洁的设计。

SLICING

不完全是问题的一部分,但在其中一条评论中,slicing提到过,您可以在这里阅读。

std::map 无法处理多态性? https://stackoverflow.com/questions/833258/stdmap-unable-to-handle-polymorphism

我在上面的代码中纠正了这个问题。


当前设计的一个问题是,它不允许使用最自然地被认为在某些间隔或点(如 0)上未定义的函数,但这样的函数有很多,所以这是范围检查的另一个动机。还Function需要替换为Function*这需要对语法进行一些其他更改。

class PiecewiseFunction : public Function
{
    //Holds function and interval
    std::map< std::pair<double,double>, Function* > fns;

   double operator()( double x )
   {
           auto iter = std::find_if(fns.cbegin(), fns.cend(), 
                             [=](const std::pair< std::pair<double,double>, Function*>& fn) 
                             {  
                                return x>=fn.first.first &&  x<fn.first.second; 
                             });

       if (iter == fns.end()) throw... //Or something
       return (*iter->second)(x);
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定义分段函数(例如多项式) 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 这个可变参数模板示例有什么问题?

    基类是 include
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str

随机推荐

  • MySQL:更新语句期间“where 子句中的未知列”

    UPDATE Recipes RE SELECT SUM i iCaseCost i iCaseQty i iUnitSize i iUnitSoldBy ri riQty ri riMeasureBy AS RecipeCost FROM
  • 如何更新本地aar包源

    我创建了两个 Android Studio 应用程序 aar 库就是其中之一 我在第二个应用程序中使用了这个 aar 库 我通过使用 File gt New gt New Module gt Import AAR JAR Packages
  • 如何在eclipse中添加mysql驱动jar文件

    我有 jar 文件 mysql connector java 5 1 14 bin jar我想将它添加到我的项目中 我通过以下方式添加 jar 项目 gt 属性 gt Java 构建路径 库并从外部 jar 添加它 但是当我尝试使用它并编写
  • 如何为 ng-bootstrap datepicker 设置 minDate

    下面是我用来设置 minDate 的代码
  • 如何在 MVC6 中注册路由约束

    在以前的 MVC 版本中 有很多关于如何创建路由约束的教程 为属性路由注册 ASP NET MVC 路由约束 http www khalidabuhakmeh com registering asp net mvc route constr
  • OpenPGP/X.509 桥:如何验证公钥?

    我想用通过 TLS 的 OpenPGP 身份验证 https www rfc editor org rfc rfc6091 但由于缺乏实现 我使用了临时解决方案 OpenPGP X 509 桥接证书 该方法与 Foaf 中使用的方法非常相似
  • 如何比较 2 个 Xcode 目标

    我如何比较 Xcode 中同一项目的两个目标之间的差异 我想看看源代码中的差异 也许还有构建信息 您可以通过选择目标然后 级别 来比较构建设置 据我所知 没有简单的方法来比较每个目标中包含哪些源文件
  • spring amqp-outbound gateway 生成来自不同 thead 的回复(如 jms-outbound gateway)

    问题陈述 Spring amqp outbound gateway 从不同线程生成回复 像 jms outbound gateway 一样 具有不同的队列 使用相关键关联请求 响应 无法将该消息与此示例关联起来 弹簧集成
  • Windows CreateFile 可能的错误代码

    我正在尝试将 Windows Linux 和 Mac 文件 IO 调用抽象为宏 以避免 C 运行时 所以没有fopen fclose ETC 我实际上做了很多工作 但遇到了绊脚石 我试图将每个平台可能抛出的所有可能错误归结为常见错误的子集
  • codeigniter 中的 allowed_uri_chars

    从 Facebook 返回时 使用 Facebook 登录 我收到错误 您提交的 URI 包含不允许的字符 我已将 allowed uri chars 设置如下 config permitted uri chars a z 0 9 我的网址
  • 在 Woocommerce 中以编程方式应用优惠券

    在 Woocommerce 中 如果购物车中的重量超过 100 磅 我试图找到一种对整个客户订单应用 10 折扣的方法 我正在实现这一目标 对于下一步 我正在寻找一种通过functions php 通过action hook 以编程方式应用
  • 在哪里可以找到 DownloadManager 的 ContentProvider 实现

    我已经尽可能多地搜索了android的开源代码 但我还没有找到通过2 3 SDK中的DownloadManager进行实际下载的实现 我已经找到了下载管理器的源 http grepcode com file repository grepc
  • 两个类之间的 iPhone KVO

    我的应用程序中有两个类 A 类和 B 类 A 类和 B 类都是 UIViewController 的实例 A 类有一个按钮 按下该按钮时会将 B 类推入堆栈 B 类有一个字符串 A 类希望观察该字符串并根据需要更新其接口 我已经能够使用 s
  • Java将“Excel日期序列号”转换为“日期时间”[重复]

    这个问题在这里已经有答案了 如何使用Java将 Excel日期序列号 即33257 415972222225 转换为DateTime 即19 01 1991 09 59 00 您还可以查看Apache POI 源代码 https githu
  • 如何用 swift 创建一个闹钟应用程序?

    我正在尝试用 swift 创建一种闹钟应用程序 但我不知道如何设置闹钟模型 我试过了UILocalnotification但我不希望我的用户除了设置闹钟之外参与闹钟应用程序的流程 然后尝试了NSTimer and NSRunloop等等 但
  • 相机插件 flutter web

    你好我想知道是否有一个用于 flutter web 的相机插件 以便拍摄照片并将其存储在临时路径中 然后将其上传到 firestorage 如果我理解正确 我希望您已经尝试过这些软件包 image picker 和 image picker
  • 如何在WP中将CookieContainer设置为BackgroundTransferRequest对象?

    我在用BackgroundTransferRequest and BackgroundTransferService用于上传一些数据 无论如何我可以设置CookieContainer to the TransferRequest None
  • @AutoConfigureWebMvc 和 @AutoConfigureMockMvc 有什么区别?

    在什么情况下我应该使用每一个 AutoConfigureWebMvc 如果您需要配置 Web 层进行测试但又不这样做 请使用此选项 需要使用MockMvc 它启用与 Web 层相关的所有自动配置ONLY网络层 这是整体自动配置的一个子集 它
  • 背景图片和搜索引擎优化

    目前 我的网站上有一些在 CSS 文件中定义为背景图像的图像 代码如下所示 HTML a href http domain com title Website Title class image a The CSS image backgr
  • 定义分段函数(例如多项式)

    在 C 中定义分段函数 例如在使用样条曲线时需要 的最佳方法是什么 Example f1 x if x from 0 5 f x f2 x if x from 5 10 f3 x if x from 10 20 我当前的方法如下所示 cla