什么是编译模型?什么是拟合模型?

2024年6月13日15:30:48什么是编译模型?什么是拟合模型?已关闭评论

什么是编译模型?

编译器在看到模板定义的时候,不会立即产生代码;只有在看到、用到模板的时侯,如调用了函数模板或类模板的对象的时候,才会产生特定类型的模板实例。

一般而言,在调用函数的时候,编译器只需要看到函数的声明。在定义类类型的对象时,类定义必须可用,但类成员函数的定义不是必须存在的。因此,应该将类定义和函数声明放在头文件中,而将普通函数和类成员函数的定义放在源文件中。

模板则不同,要进行实例化,编译器必须能够访问定义模板的源代码。当调用函数模板或类模板类的成员函数的时候,编译器需要函数定义,需要那些通常放在源文件中的代码。

标准C++为编译模板代码定义了两种模型,即包含编译模型和分别编译模型。

所谓包含编译模型,就是将函数模板的定义放在头文件中。因此,对于上面的例子,就是将temp.cpp的内容都放在temp.h中。

包含编译模型有个问题,如果两个或多个单独编译的源文件使用同一个模板,这些编译器将为每个文件中的模板产生一个实例。因此,给定模板会产生多个相同的实例,在链接的时候,编译器会选择一个实例进行实例化而丢弃其他实例。

在分别编译模型中,编译器会跟踪相关的模板定义。我们必须让编译器知道要记住给定的模板定义,因此需要使用export关键字。但是,实际上很多编译器都不支持这个关键字,而且C++将这个关键字设置为unused和reserved。

什么是拟合模型?

如果待定函数是线性的,则其就叫作线性拟合或者线性回归(主要在统计学中),否则其叫作非线性拟合或者非线性回归。待定函数的表达式也可以是分段函数,在这种情况下其叫作样条拟合。

形象地说,拟合就是把平面上一系列的点用一条光滑的曲线连接起来。因为这条曲线有无数种可能,所以拟合方法有多种。拟合曲线一般可以用函数表示,根据这个函数的不同有不同的拟合名称。在 MATLAB 中可以用 Polyfit 拟合多项式。

拟合、插值、逼近是数值分析的三大基础工具,通俗意义上它们的区别在于:拟合是已知点列,从整体上靠近它们;插值是已知点列,并且完全经过点列;逼近是已知曲线或者点列,通过逼近使构造的函数无限靠近它们。

  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。