函数之对决!!:数学函数 VS C++函数

news2024/11/20 13:20:44

前言

        有人问过我,C++里的函数是否跟我们数学里的函数一样?于是,我就写下了这篇文章。

                                        一、数学函数

1、一次函数

        一次函数,也称为线性函数,是数学中函数的一种,通常表示为y=kx+b(其中k和b是常数,且k≠0),x是自变量,y是因变量。

        一次函数的图像是一条直线,k决定了直线的斜率,即倾斜程度,b是直线与y轴的截距。当b=0时,一次函数简化为y=kx,此时称为正比例函数。一次函数在数学和现实生活中有广泛的应用,它可以描述许多随时间或其他因素均匀变化的现象。

        比如下图,是一个一次函数。

2、二次函数

        二次函数(quadratic function)的基本表示形式为y=ax²+bx+c(a≠0)。二次函数最高次必须为二次, 二次函数的图像是一条对称轴与y轴平行或重合于y轴的抛物线。

        二次函数表达式为y=ax²+bx+c(且a≠0),它的定义是一个二次多项式(或单项式)。

        如果令y值等于零,则可得一个二次函数。该方程的解称为方程的根或函数的零点。

        比如下图:

        二次函数具有对称性、单调性。

        y=ax^{2}

        a>0,开口向上;a<0,开口向下。a的绝对值越大,抛物线越小。

        y=a(x-h)^{2},(a\neq 0)

        a>0,x>h时,y随着x的值增大而增大;a<0,x>h时,y随着x的增大而减小。

3、指数函数

        指数函数是一类重要的数学函数,其形式为 f(x) = a^x,其中 a 是底数,x 是指数。指数函数定义在实数范围内,底数 a 必须是正数且不等于 1。

        当底数 a 大于 1 时(例如 a = 2, 3, e 等),函数 f(x) = a^x 随着 x 的增大而增大,即函数图像在实数轴上是上升的。

        当底数 a 在 0 和 1 之间时(例如 a = 1/2, 1/3 等),函数 f(x) = a^x 随着 x 的增大而减小,即函数图像在实数轴上是下降的。

        特别地,当底数 a 等于自然对数的底数 e(约等于 2.71828)时,该函数称为自然指数函数,通常表示为 exp(x) 或 e^x

        指数函数在数学、物理、工程、经济等领域有广泛的应用。例如,在复利计算、细菌生长、放射性衰变等情境中,指数函数都是重要的数学模型。

        指数函数如下

4、对数函数

        对数函数是一类重要的数学函数,它描述了指数函数的反操作。对数函数以幂的形式定义,即如果 (a^x = N)(其中 (a) 是底数,(x) 是指数,(N) 是真数),那么对数函数表示为x = \log_a N

        对数函数的一般形式为\log_a x,其中 (a) 是底数,(x) 是真数。对数函数定义在 (x > 0) 的范围内,底数 (a) 必须是正数且 a \neq 1。对数函数和指数函数是互逆的,即 \log_a (a^x) = x 和 a^{\log_a x} = x

        对数函数有一些重要的性质,例如:

  1. 换底公式:\log_b a = \frac{\log_c a}{\log_cb},其中 (c) 是另一个正数且 c \neq 1
  2. 对数的乘积转化为加法:\log_a(MN) = \log_aM + \log_aN
  3. 对数的商转化为减法:\log_a\left(\frac{M}{N}\right) = \log_aM - \log_aN
  4. 对数的幂转化为乘法:\log_a(M^n) = n\log_aM

        对数函数在数学、科学、工程等领域有广泛的应用。例如,在物理学中,对数函数用于描述声音的响度级别(分贝);在经济学和金融学中,对数函数用于复利计算和资产增长率的描述;在生物学和生态学中,对数函数用于描述种群增长等。

        对数函数有两种特殊情况:

  • 自然对数:当底数 (a) 为自然常数 (e)(约等于 2.71828)时,对数函数称为自然对数,记作 \ln x\log_e x
  • 常用对数:在科学和工程中,以 10 为底的对数称为常用对数,记作 \log x\log x

        对数函数和对数表在历史上曾被广泛使用,尤其是在没有电子计算器的时候,人们使用对数表来执行乘法和除法运算。现在,对数函数在计算机科学和数学软件中也扮演着重要角色。

                               二、编程(C++)函数

1、电脑自带函数

       我在《用C++求绝对值的几种方法》 这一篇文章中就有提到过,如swap(x,y)、min(x,y)、max(x,y) ......

        这些我们是可以直接使用的。它给我们带来了巨大的方便。

        比如说swap()函数吧,按照原理,我们交换两个数要通过第三方变量进行交换。

int a = 2 , b = 3;
int temp = a;
a = b;
b = temp;

        那么,是用swap()就比较方便了

int a = 2 , b = 3;
swap (a , b);

        有时候也可以套用函数,如:我们要求出三个数的最大值。那使用max()是最好不过了。

#include<bits/stdc++.h>
using namespace std;

int main(){
	int a, b, c;
	cin >> a >> b >> c;
	cout<< max(a, max(b, c));
    return 0;
}

2、非电脑自带函数

        这些函数需要我们自己写,有些函数可直接使用。以下是函数的基本框架。

        在C++中,函数的定义是指创建一个函数的具体实现,包括函数名、返回类型、参数列表以及函数体。函数的定义必须在一个源文件中,而不能在声明中进行。

        函数定义的一般形式如下:

返回类型 函数名(参数列表) {
    // 函数体
    // 执行的代码
    return 返回值;
}

(一)有返回值函数

        有返回值的函数是将某个数进行一些处理所得到的结果。

        下面是一个简单的C++函数定义示例:

// 函数定义:计算两个整数的和
int add(int a, int b) {
    return a + b;
}

        在这个例子中,add 是函数名,它接受两个 int 类型的参数,返回它们的和。函数的定义以关键字 int 开始,后面是函数名 add 和参数列表 (int a, int b),接着是函数体,最后是返回语句 return a + b;

递推(与函数息息相关)

        在C++编程中,递推(Recursion)是一种解决问题的方法,它涉及到函数直接或间接地调用自身来解决较小规模的子问题,然后将这些子问题的解组合起来以解决原问题。递推通常用于解决可以分解为相似子问题的问题,这些子问题的解决方案是构建原问题解决方案的基础。

        递推与迭代不同,迭代使用循环来逐步逼近解,而递推则是通过函数调用栈来逐步求解。递推通常更加简洁和易于理解,但也可能导致更高的计算复杂性和内存消耗,因为它需要维护函数调用栈。

        递推的一个关键点是必须有一个或多个基本情况(Base Cases),这些情况是递归可以直接解决而不需要再次调用自身的。当递归调用到达这些基本情况时,它会停止并返回结果,然后这个结果会被用来构建更大问题的解。

        下面是一个简单的C++递推函数示例,用于计算阶乘:

#include <iostream>
using namespace std;
// 递推函数用于计算阶乘
int factorial(int n) {
    // 基本情况
    if (n == 0 || n == 1) {
        return 1;
    }
    // 递推情况
    else {
        return n * factorial(n - 1);
    }
}

int main() {
    int number;
    cin >> number;
    cout << "此数的阶乘是:" << factorial(number) << endl;
    return 0;
}

        factorial 函数是一个递推函数,它接受一个整数 n 并返回 n 的阶乘。当 n 是0或1时,函数返回1,这是基本情况。否则,它递归地调用自身来计算 (n-1) 的阶乘,然后将结果乘以 n

        需要注意的是,对于非常大的 n,这个递推函数可能会导致栈溢出,因为函数调用栈可能变得非常深。在实际应用中,递推函数需要谨慎使用,特别是当涉及到大量递归调用时。

(二)无返回值函数

        无返回值的函数,是指那些不返回任何值的函数。这种函数通常用于执行某种操作,例如修改全局变量、打印输出、调用其他函数等,而不是计算并返回一个值。

        无返回值函数的返回类型被指定为 void

    void 关键字表示函数不返回任何值。

        无返回值函数的定义形式如下:

void 函数名(参数列表) {
    // 函数体
    // 执行的代码
}

下面是一个无返回值函数的例子,该函数用于打印一条消息到控制台:

#include <iostream>
using namespace std;
// 无返回值函数:打印消息到控制台
void printMessage() {
    cout << "Hello, world!" << endl;
}

int main() {
    printMessage(); // 调用无返回值函数
    return 0;
}

        在这个例子中,printMessage 函数不接受任何参数(参数列表为空),并且没有返回任何值(返回类型为 void)。当调用 printMessage() 时,它会执行函数体内的代码,将字符串 "Hello, world!" 打印到控制台。

        无返回值函数在C++编程中非常常见,它们用于执行各种任务,如设置配置、执行初始化操作、处理用户输入、更新数据结构等。

三、数学函数与C++函数的异同点

共同点:

  1. 目的:二者都是为了根据给定的输入(或称为参数)来计算并返回一个输出(或称为返回值)。
  2. 关系映射:数学函数和C++函数都可以视为一种从输入到输出的映射关系。

差异点:

  1. 严格性:数学函数通常更为严格。在数学上,同一个输入必须总是产生相同的输出,即函数是确定的。相比之下,C++函数允许在相同的输入下产生不同的输出,尤其是当函数包含随机性或依赖于外部状态时。
  2. 应用领域:数学函数通常用于描述自然规律、归纳总结和做出预测。而C++函数主要用于编程,用于处理数据、执行计算任务和组织代码逻辑。
  3. 表示方法:数学函数通常以数学公式或表达式表示,而C++函数则是以程序代码的形式实现。
  4. 性质:数学函数可能具有特定的性质,如有界性、单调性、奇偶性和周期性。而C++函数则可能具有其他特性,如内联函数、递归函数等。
  5. 错误处理:在数学中,函数通常不处理错误或异常情况。然而,在C++中,函数可能需要处理各种错误条件,如无效输入或资源不足等。

        综上所述,数学函数和C++函数在目的和关系映射方面有共同点,但在严格性、应用领域、表示方法、性质和错误处理等方面存在差异。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1641850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue中小学文具商城购物系统网站

技术栈 前端&#xff1a;vue.jsElementUI 开发工具&#xff1a;IDEA 或者eclipse都支持 编程语言: java 框架&#xff1a; ssm/springboot 数据库: mysql 版本不限 数据库工具&#xff1a;Navicat/SQLyog都可以 详细技术&#xff1a;javaspringbootvueMYSQLMAVEN文具网站为用户…

jQuery的简单使用

jQuery的简单使用 jQuery查找父、子、兄弟节点jQuery查找内容元素筛选遍历元素操作元素width() / height() 设置宽高.css() 设值样式attr() / prop() 设置属性增加、删除、切换class删除和清空 操作元素总结选择表达式链式操作取值和赋值函数 HTML_1 <table id"table_…

第16章 基于结构的测试技术(白盒测试技术)

一、静态测试技术 &#xff08;一&#xff09;概述 不运行程序代码的情况下&#xff0c;通过质量准则或其他准则对测试项目进行检查的测试类型&#xff0c;人工或工具检查。 1、代码检查 2、编码规则检查 3、静态分析 静态分析概述 不需要执行程序 控制流分析 通过生成…

高边沿开关LM5050

可以用于高边沿单片机控制电路 LM5050-1/-Q1 高侧 OR-ing FET 控制器与外部 MOSFET 配合工作&#xff0c;当与电源串联时则用作理想的二 极管整流器。此 ORing 控制器可使 MOSFET 替换电 源分配网络中的二极管整流器&#xff0c;从而降低功率损耗和压 降。 LM5050-1/-Q1 控制器…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒处理建议

在网络技术不断发展的时代&#xff0c;网络在企业中的应用广泛&#xff0c;可以为企业带来更多的便利&#xff0c;大大提升了企业的生产效率&#xff0c;但网络作为虚拟世界&#xff0c;在为企业提供便利的同时&#xff0c;也为企业数据安全带来严重威胁。近期&#xff0c;云天…

USB3.0线束特征阻抗测试报告解读

一. 衰减 从低频到高频&#xff0c;每个数据点都按照相对应的规范进行设置&#xff0c;形成一条标准线&#xff0c;如图1中所示&#xff0c;紫色线即为标准线&#xff0c;蓝色线为实测线。实测线在紫色线之上&#xff0c;说明线束衰减符合标准&#xff0c;反之表明线束衰减不符…

预防耳石症后遗症,了解RD的成因。

耳石症的后遗症&#xff0c;我们把它叫做RD RD的这个症状实际上它跟多因素有关。 第一个因素&#xff0c;就是跟这个病人的性格有关系的。 第二个因素&#xff0c;就是跟这个耳石复位后他这个机体的这个状态有关系。 第三个因素&#xff0c;还跟耳石的有一部分可能是真的没有…

AI大模型探索之路-训练篇12:语言模型Transformer库-Datasets组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

如何使用提示测试为LLMs构建单元测试?

原文地址&#xff1a;how-to-build-unit-tests-for-llms-using-prompt-testing 确保您的人工智能交付&#xff1a;快速测试完美生成应用程序的基本指南 2024 年 4 月 26 日 如果你曾经编写过软件&#xff0c;你就会知道测试是开发过程中必不可少的一部分。特别是单元测试&#…

windows系统网页卡死的时候 解决办法

第一种办法 同时按下ctrlshiftdelete键&#xff0c;清除缓存 如果这种办法不行&#xff0c;强制退出再打开还不行的话&#xff0c;再试第二种办法 第二种办法 打开f12开发者工具&#xff0c;如图在application标签页下&#xff0c;打开local storage&#xff0c; 右键选中virt…

Slave SQL线程与PXB FTWRL死锁问题分析

1. 问题背景 2.27号凌晨生产环境MySQL备库在执行备份期间出现因FLUSH TABLES WITH READ LOCK未释放导致备库复制延时拉大&#xff0c;慢日志内看持锁接近25分钟未释放。 版本&#xff1a; MySQL 5.7.21PXB 2.4.18 慢查询日志&#xff1a; 备份脚本中的备份命令&#xff1a;…

Hibernate执行流程分析及配置文详解

目录 1、Hibernate执行流程分析及配置文件详解 1&#xff09;Configuration对象 2&#xff09;ServiceRegistry对象&#xff08;hibernate4的新特性&#xff09; 3&#xff09;SessionFactory对象 4&#xff09;Session对象 5&#xff09;Transaction对象 6&#xff09;…

算法打卡day41

今日任务&#xff1a; 1&#xff09;198.打家劫舍 2&#xff09;213.打家劫舍II 3&#xff09;337.打家劫舍III 4&#xff09;复习day16 198.打家劫舍 题目链接&#xff1a;198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街…

AttributeError: module ‘numpy‘ has no attribute ‘int‘.

问题描述 复现代码过程中遇到错误&#xff1a;AttributeError: module numpy has no attribute int. 错误代码行&#xff1a; self.sf np.int(data[sf][0,...].squeeze().cpu().numpy()) # scale factor 解决方案 这是因为在Numpy 1.2.0版本中就已经弃用了这个用法&#x…

探索动态内存开辟的奥秘

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 前言 开始之前&#xff0c;我们先来了解一下C/C中程序内存区域划分。 在C/C程序中&#xff0c;内存区域通常被划分为以下几个部分&#xff1a; 1.栈&…

【基础算法总结】滑动窗口一

滑动窗口 1.长度最小的字数组2.无重复字符的最长子串3.最大连续1的个数 III4.将 x 减到 0 的最小操作数 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&…

软件测试(实验五)——Jmeter的使用

目录 实验目的 一、使用JMeter演示取样器、监听器、配置元件、断言的使用&#xff1b; 1、取样器 2、监听器 3、配置元件的使用 ① 用户定义的变量 ②HTTP信息头管理器 ③HTTP请求默认值 ④CSV数据文件设置 4、断言 ①响应断言 ②JSON断言 ③断言持续时间 二、使用…

普通二维码打开微信小程序并且传递参数

实现方法&#xff1a; 【1】确保有一个企业级别的认证过的微信小程序 【2】有一个https并且备案过的域名 【3】进入微信后台“开发”-“开发设置”-“扫普通链接二维码打开小程序”-“添加” 官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/introduction/q…

C语言实验-学生信息管理系统

按以下菜单界面编写学生信息管理系统&#xff1b; 1&#xff09;录入学生信息首先输入学生人数&#xff0c;然后根据学生人数开辟动态数组&#xff1b; 2&#xff09;学生信息包括学号、姓名、性别、三门课成绩、总分&#xff1b;其中学号、姓名、 性别、三门课成绩是需要从键盘…

YOLO自研模块:多尺度轻量化卷积模块

目录 一、原理 二、代码 三、配置文件 一、原理 不同大小的卷积核,提取目标特征的特征尺度不同,所以通过使用不同大小卷积核的卷积来提取特征就可以保证获取到目标的多尺度特征。 借鉴YOLOv8中,将通道数进行划分的操作,在卷积的输入过程中为了减小参数量,将输入通道数…