计算机与数学
ARTELE
爱好计算机
展开
-
计算机与代数---函数导数表达式计算
0.简介经过前面两篇的铺垫,这里可以请出关键了,根据写好的函数表达式,计算其导数的表达式。1.导数表达式计算直接看这个问题,其实比较难解决,因为导数表达式直接来算还是需要不少处理过程的,但是前面我通过计算图能求得导数的数值结果,那么,我将计算导数数值结果函数中计算数值的步骤全部都换成对应的字符串输出就可以了,这样就能看见表达式结果了,有了前面的计算图,这里就不是难题。2.实现例举class AddNode : public OpNode{public: AddNode(share原创 2020-11-16 17:54:35 · 1219 阅读 · 0 评论 -
计算机与代数---函数导数数值结果计算
0.简介有了前一篇的计算图铺垫,这次我可以计算出函数导数的结果。1.计算导数一般来说,计算导数的时候,我们利用导数公式可以计算,根据前一篇最开始说的,如果程序中的方程或者函数直接计算,那么这个函数的导数也需要再重写一个才可以,但是利用计算图则可以不必针对某个方程专门计算的导数,而是利用计算图的特性来计算。例如,设,,然后,计算,,对于计算图来说,计算到图的叶子节点就停止计算。实际效果如下图。所以,利用最基本的导数运算规则,对每个结点做求导操作,最后得到的值就是导数,图会自动的根据构建方式来原创 2020-11-16 17:37:35 · 1321 阅读 · 0 评论 -
计算机与代数---函数数值结果计算
0.简介函数或者说方程,在编程语言中,直接就能通过指定变量和系数进行计算,这里主要是利用编程语言来实现这个计算。1.方程的表示一般来说,一个方程如,在计算机中可以表示成,实际的代码如下y = x*x当计算y的时候,给x指定值即可,如float x = 0, y = 0;for (int i = 0; i < 10; i++){ y = x * x; cout << y << endl;}当方程更加复杂的时候。float x = 0原创 2020-11-16 16:48:23 · 831 阅读 · 1 评论 -
计算机与代数---如何计算sqrt---优化
0.简介根据上一篇的内容,今天又看到了比较的好的一个优化方法,在这里记录一下。1.判断条件优化之前的二分法和牛顿迭代法的判断条件都有乘法,今天发现一个比较的好的判断方法。二分法long double l = 0, r = (n>=1 ? n:1), mid=0;while (fabs(l-r)>1e-8){ mid = (l + r) / 2; if (mid * mid > n) r = mid; else l = mid;}牛顿迭代法long原创 2020-11-12 19:47:54 · 601 阅读 · 0 评论 -
计算机与代数---如何计算sqrt---方法和实现
0.简介开根号可以用之前的pow方法计算,当然,还有一些更便捷的方法。1.二分法最常见的开根号方法就是二分法,计算,另,当n的值大于1的时候,可以让l = 0,r = n,当n<1的时候另l=0,r=1,然后利用如下代码计算出结果。long double l = 0, r = (n>=1 ? n:1), mid=0;while (fabs(mid * mid - n)>1e-8){ mid = (l + r) / 2; if (mid * mid > n)原创 2020-11-12 01:59:36 · 3294 阅读 · 12 评论 -
计算机与代数---如何计算pow---方法和实现
0.简介前面实现了log2,我就顺势用这个函数来构造求a^x的结果。1.方法推导我们通过关系式子的变换可以得到等式,这样一来我们只需要针对2的n次幂来求解。将2^x泰勒展开,ln2我们可以预先求出。对于幂大于1的情况,例如,变换成,因为比较容易计算,利用泰勒展开式计算,这里要处理一下幂是负数的时候,然后将所有小数的幂次都直接带入泰勒展开式,大于1的部分直接计算就可以。2.实现double baselog2(double n){ n-=1; double x = -1,resu原创 2020-11-10 15:25:28 · 1610 阅读 · 0 评论 -
计算机与代数---如何计算ln---方法和实现
0.简介在有了前面log2的基础上,现在可以算任意的的log了,这里我们计算ln1.ln表达式根据换底公式可以得到这个式子。2.实现double myln(double n){ return mylog2(n) / 1.4426950408889634;}原创 2020-11-10 11:11:50 · 2974 阅读 · 0 评论 -
计算机与代数---如何计算log---实现[2]
0.简介上一篇文章介绍了原理,这里介绍如何实现。1.泰勒展开因为拟合的项数比较多,所以用循环可以解决。用下面的代码解决。#define LN2 0.6931471805599453double baselog2(double n){ n-=1; double x = 1,result = 0; for (int i = 1; i < 20; i++) { result += (n/i);//累加结果 n *= (x * (-1));//累乘原创 2020-11-10 10:10:42 · 1455 阅读 · 8 评论 -
计算机与代数---如何计算log---方法推理[1]
0.简介最近在复习一些数学知识,对计算机如何log,sin,cos等有了些疑问,并且通过查阅资料(其实没找到什么),和设计方法,大概将其实现出来。1.泰勒展开对于如何计算log这个问题,我能想到的就是去计算泰勒展开式,将在0点展开,但是发现0点没法展开,那就变换一下,展开。经过推到,其泰勒展开式为,有了这个展开式,我们就可以计算的结果。2.实际问题,大于1的数字上面虽然得到了泰勒展开,但是展开只能拟合到(-1,1]这个范围内,超出这个范围,尤其是大于1的时候,会随着值得增大而越发的不原创 2020-11-10 09:43:44 · 4083 阅读 · 1 评论