首页 > 编程知识 正文

编程书,编程需要哪些数学知识

时间:2023-05-04 20:22:21 阅读:176761 作者:3973

这篇文章是我多年前的文章,在这里重新找到并取出

我们需要数学的理由程序员不需要数学。 做过程序员的人几乎都要低头思考一会儿再回答。 不能因为你觉得必须足够酷就回答我们需要。 因为很多程序员可能不能用。 因为我们有足够的组件、库和框架,平台等提供了很多摆脱我们和数学的方法。 在大学本科生和研究生教育过程中,老师和导师多次表示:“我们需要数学模型model )’。 因为发表论文有数学模型的话,发表的可能性会提高5%。

是的,于是我们翻了各种模型,翻箱倒柜找数学。 是的,我找到了。 把很多推理的公式放在屏幕上,嗯,终于放了一点心。 心说,很多公式需要翻书后再推导一次才知道发生了什么。 老师不能理解我们的模型时,他们也放心了:)。

简编:但是,数学模型并不是高深莫测的公式,故意让人看不懂才是成功的。 让我们看看最常见和最简单的例子。 gldbh要写工业控制的东西,他需要进度条。 进度条的显示是按照时间来的。 由于缺乏足够的经验,进度的总刻度是120,60秒的显示非常大,于是他以程序中计时器的每秒间隔这样定义了:

位置=位置2;

我看了看他的程序,说:“这样可以,但不够。 因为我不知道这两个是从哪里来的,也不知道这两个和几个参数有关。 基本上与1刻度、2总时间、3计时器的间隔有关。 接下来大家都知道他为什么要问,他回答说如果需要改变刻度、时间和计时器间隔,就必须修改程序。 他点了点头。

可以这样修改。

All_P=进度条的总刻度

All_T=时间估计;

RUN_T=相对经过时间;

position=(all_p/all_t ) *RUN_T

这样,就建立了一个在程序运行时总是检测总刻度ALL_P和时间All_T的模型。 这样,我们知道在运行时,1刻度、2总时间、3计时器的间隔已经没有关系。 此时,即使在运行程序之前设计并运行了ALL_P和All_T之后进行了更改,该程序也能正常运行,这就是模型的强大功能。

这个例子非常简单,它告诉我们需要数学和数学逻辑,但不需要牵强附会或故意“高深莫测”的公式。

加分修饰:加密算法:如果你的程序算法不打算加密,很可能不专业或者不安全。 怎么容易加密? 这足够简单,也许使用MD5算法确实可以解决问题。 当然,MD5有他的缺陷,有时不能用。 那么,不用写那么多。 需要用“异或”和“异或”去的代码。 这样,就可以加密解密得到原文了。 但是我不打算取异或。 也许用前面的公式来解决加密问题。 我的用户名为qianbo,我的权限为administraor (管理员),原密码为123456,我的验证值为int(Qianbo ) int (administra or ) int ) 1289; 是。 这样的线性值让我觉得密码太脆弱了。 aint (钱宝) c*int (管理员) c*int (管理员) abc必须保密。 也可以多用几个公式、两个或两个加密。 如果一个公式验证错误,准备放弃登录吧。

上面是牵强附会的把戏,真正的数学可能离不开插值算法:

这里是图形学算法中的采样插值:

如果缩小图像,最终可能会得到看不清楚的斑点,但如果放大图像,则会因过于扭曲而焦躁不安。 如果图像较小且多边形基本体较大,则采样率小于1,并且得到的采样值为浮点数。 插值会截断采样点,从而得到整数值。 这样,如果效果出来,扩大了的话,可以看到很多马赛诸赛的朋友登陆。

如果我们这样做了:

IX=(int ) xtu%; (1) ) ) )。

FX=(float ) xtu%-xx ); (2) ) ) )。

resultx=ixfx(IX1 ) (1-fx ) (3) ) ) ) ) ) ) ) ) ) ) )。

其中,在式(1)中,xt是x轴样本数量,ix是取x轴样本数量的整数,式(1)是取x轴样本数量的浮点数,式(3)是真的混合插值函数。 同样对y的值也进行同样的处理。 如果我知道以后要做什么,我会对x和y再做一次。 这就是双线性插值。

再加一点修饰,矩阵是一个强大的工具,我们可以在各个方面看到他强壮美丽的身体,我们尤其对3D世界感兴趣。 请看下面的矩阵移动。

好了,看了这个矩阵的乘法,大家都说不要对我撒谎。 仅此而已:

x=x dx; (1) ) ) )。

y=y dy; (2) ) ) )。

z=z dz; (3) ) )。

这就是矩阵的概念吗? 不:

看看物体的移动过程:

在上图中,物体从a旋转到b,平移到原点,在原点旋转,平移到b。 这样的过程必须用简单清晰的数学来描述。 为了简化,过程可能很复杂,很矛盾,但让我们看看下面的话。

3D世界中的主要变换包括平移、缩放和旋转变换。 为了用同样的方法处理变换,实现变换之间的复合,引入了齐次坐标系。 这样,由加法引起的变化也采用矩阵处理、图形学中的线性变换的形式

就有了统一的形式。下面是旋转矩阵:

好了,现在我们明白了简单和复杂的关系,把平移矩阵*旋转矩阵*平移矩阵,你完成了一项很平常的事情,但是在计算机的世界里面,可能复杂就是简单的化身。刚开始你觉得简单,然后你觉得复杂,最后你又感觉:只有这样做才够简单。这就是数学的魅力。 有点难度:

也许矩阵不让你着迷,但是编写游戏的过程中任务复杂而道远。除了矩阵我们还有很多感兴趣的话题,这回是神经网络,不用害怕,神经网络没有什么大不了的,怎么设计一个神经网络的输入输出才会是令人思考得主题。

网络的结构永远那么单调,用的最多的仍然是BP(多层前馈神经网络)。

​​​​

来看一个交通工程上的一个具体的例子:占有率则是一种比例,意思为本来的路上可以有多少辆车而现在占的比例是多少,各个交通要道上有检测器,可以随时测到这个值,我们不必理会他,因为这部分的数学别人做了,我们现在必须拿来用:

很奇怪的是,经过这样一个过程我们真的能得到道路上是否发生车祸了?答案是“是的”,完全可以,但是必须要有足够多的经验值而计算得到各个节点之间的权重,这也是输入和输出的一种比例,ok,可能太复杂了,我们来看一个公式:

Y= axx+b*x+c;

这个是个简单的公式,Y的可能输入值是x,输出是一个数,好了,这个和上面的神经网络有着异曲同工之妙,什么?真的是这样,是真的,在上面的这个网络中输入的各个值总有一个对应的输出值,我们的神经网络也能做到这一点,在上面的图中,输出要么是0(0.001),要么是1(0.999),但是没有一个具体的公式能让我们做到这一点,所以必须有足够的节点和层次来估计这个公式,节点和节点之间连接必须有权重。我们必须有足够的经验值来训练它,好了,我们不要车祸了,我们来点轻松的,来个坦克大战好了。


很抱歉用了如此拙劣的图片:(,图中的坦克要打到对方必须使用不同的炮筒角度,游戏可以参看《人工智能游戏编程真言》,那么仔细分析这个神经网络,它必须包含风向和速度,目标坦克和源坦克的距离,和相对海拔距离,如果用简单的数学公式,可能会计算很多东西,而且过于精确,你可以用神经网络来解决这个问题,在用几个输入(风速,距离,海拔)最后的输出就用炮筒的角度。好了,参考《人工智能游戏编程真言》上的神经网络,你会得到更多。它没有使用BP反馈,只是用了MLP(多层感知器)。值得注意的数学是他的sigmoid函数和很多个大量的乘法,也许开头对你来说是个惩罚。但是你一旦掌握,就知道它的魔力强悍无比,这是个用数学搭建的天堂。

说到这里,我相信你认为数学是重要的,但是数学是一个简单化工具,而非复杂化工具。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。