平方根的求法

[复制链接]
995|7
 楼主| xukun977 发表于 2021-5-27 20:44 | 显示全部楼层 |阅读模式


B站上面很多课堂,居然都是玩题海战术,不管是物理,还是数学,都在教大家如何考试。





这对于在校大学生来说,可能是种迫切需要;
但是对毕业多年的电工来说,无需应付考试,这些东西就不值钱了。


我们更迫切希望看到的是:讲方法、讲道理、讲思想、讲应用。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| xukun977 发表于 2021-5-27 20:58 | 显示全部楼层



最要命的是:当年上大学为了应付考试,为了60分万岁,考前一周通宵达旦看书,饱受折磨,这样的阴影可能一二十年都挥之不去。
现在再给这些人讲考试,容易勾起伤心的往事。



所以我们就轻松的闲聊,闲聊中掌握核心方法和处理问题的技巧。

为何要研究平方根?这样从电路理论中的传递函数说起。

传递函数H的正弦稳态一般表达式为:





请注意,一般传递函数有零点和极点,这会导致传递函数对应的曲线,在数学连续性方面,极度不友好----------它的值可以为零,也可以为无穷大。


为了解决这个不友好的数学特性,电路理论中经常转换为研究幅度的平方:







对于幅度的平方,其数学特性及其友好--------变量为角频率w的平方,于是分子和分母都是w的光滑函数(这里的光滑是个数学术语),其一阶导数总是连续的,分母不为零,所以数值不会等于无穷大。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| xukun977 发表于 2021-5-27 21:02 | 显示全部楼层



所以这里有个问题:一旦已知某个传递函数的平方,问你平方根是多少------进而得道传递函数H(jw)本身-------于是电路理论中需要研究这个数学问题。

例如下图,等式右边开平方等于多少???


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| xukun977 发表于 2021-5-27 21:07 | 显示全部楼层
本帖最后由 xukun977 于 2021-5-27 21:27 编辑


要想知道这个问题该如何处理,需要复习初中代数。

初中代数学过下图中的平方表达式:





现在,我在上式的基础上,再添加一项C,得:






请注意上面两个表达式之间,有什么规律。


先注意到下图中两个蓝线处是相同的:






新增加的这一项,是不是等于老字母[这里是(a+b)]的2倍,加上新字母(这里为c),二者之和再乘以新字母????




根据这个规律,可以直接写出四项之和的平方表达式:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| xukun977 发表于 2021-5-30 11:09 | 显示全部楼层
本帖最后由 xukun977 于 2021-5-30 11:12 编辑


江苏卫视有个节目,叫最强大脑。
如果是本土学生,可能感觉这些人确实强。
但是看看国外教材,才能发现这些是雕虫小技!

**力稍微好一点,稍微训练一下,口算多位数平方根,根本不是事。





有小数,计算过程完全相同,难度没有任何增加:






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
andy520520 发表于 2021-6-1 18:44 | 显示全部楼层
牛顿迭代:  f(x) = x^2 - a   ,    xn+1  = xn /2 + (a/2xn)   
jjl3 发表于 2021-6-10 13:07 来自手机 | 显示全部楼层
本帖最后由 jjl3 于 2021-6-10 21:20 编辑

http://www.douban.com/note/93460299/  
Quake-III Arena (雷神之锤3)是90年代的经典游戏之一。该系列的游戏不但画面和内容不错,而且即使计算机配置低,也能极其流畅地运行。这要归功于它3D引擎的开发者约翰-卡马克(John Carmack)。事实上早在90年代初DOS时代,只要能在PC上搞个小动画都能让人惊叹一番的时候,John Carmack就推出了石破天惊的Castle Wolfstein, 然后再接再励,doom, doomII, Quake...每次都把3-D技术推到极致。他的3D引擎代码资极度高效,几乎是在压榨PC机的每条运算指令。当初MS的Direct3D也得听取他的意见,修改了不少API。     

最近,QUAKE的开发商ID SOFTWARE 遵守GPL协议,公开了QUAKE-III的原代码,让世人有幸目睹Carmack传奇的3D引擎的原码。   
这是QUAKE-III原代码的下载地址:   http://www.fileshack.com/file.x?fid=7547  (下面是官方的下载网址,搜索 “quake3-1.32b-source.zip” 可以找到一大堆中文网页的 ftp://ftp.idsoftware.com/idstuff/source/quake3-1.32b-source.zip)     

我们知道,越底层的函数,调用越频繁。3D引擎归根到底还是数学_运算。那么找到最底层的数学_运算函数(在game/code/q_math.c), 必然是精心编写的。里面有很多有趣的函数,很多都令人惊奇,估计我们几年时间都学不完。  
在game/code/q_math.c里发现了这样一段代码。它的作用是将一个数开平方并取倒,经测试这段代码比(float)(1.0/sqrt(x))快4倍:

float Q_rsqrt( float number ) {   
long i;   
float x2, y;   
const float threehalfs = 1.5F;     
x2 = number * 0.5F;   
y = number;   
i = * ( long * ) &y;                           // evil floating point bit level hacking   
i = 0x5f3759df - ( i >> 1 );              // what the fuck?   
y = * ( float * ) &i;   
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration    // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed     
#ifndef Q3_VM   
#ifdef __linux__      assert( !isnan(y) ); // bk010122 - FPE?   
#endif   
#endif   
return y;
}      

函数返回1/sqrt(x),这个函数在图像处理中比sqrt(x)更有用。     
注意到这个函数只用了一次叠代!(其实就是根本没用叠代,直接运算)。编译,实验,这个函数不仅工作的很好,而且比标准的sqrt()函数快4倍!要知道,编译器自带的函数,可是经过严格仔细的汇编优化的啊!      
这个简洁的函数,最核心,也是最让人费解的,就是标注了“what the fuck?”的一句      
i = 0x5f3759df - ( i >> 1 );  
再加上
y = y * ( threehalfs - ( x2 * y * y ) );
两句话就完成了开方运算!而且注意到,核心那句是定点移位运算,速度极快!特别在很多没有乘法指令的RISC结构CPU上,这样做是极其高效的。  
算法的原理其实不复杂,就是牛顿迭代法,用x-f(x)/f'(x)来不断的逼近f(x)=a的根。  
简单来说比如求平方根,f(x)=x^2=a ,f'(x)= 2*x,f(x)/f'(x)=x/2,把f(x)代入  x-f(x)/f'(x)后有(x+a/x)/2,现在我们选a=5,选一个猜测值比如2, 那么我们可以这么算 5/2 = 2.5; (2.5+2)/2 = 2.25; 5/2.25 = xxx; (2.25+xxx)/2 = xxxx ... 这样反复迭代下去,结果必定收敛于sqrt(5),没错,一般的求平方根都是这么算的 但是卡马克(quake3作者)真正牛B的地方是他选择了一个神秘的常数0x5f3759df 来计算那个猜测值 就是我们加注释的那一行,那一行算出的值非常接近1/sqrt(n),这样我们只需要2次牛 顿迭代就可以达到我们所需要的精度. 好吧 如果这个还不算NB,接着看:   普渡大学的数学家Chris Lomont看了以后觉得有趣,决定要研究一下卡马克弄出来的 这个猜测值有什么奥秘。Lomont也是个牛人,在精心研究之后从理论上也推导出一个 最佳猜测值,和卡马克的数字非常接近, 0x5f37642f。卡马克真牛,他是外星人吗?  
传奇并没有在这里结束。Lomont计算出结果以后非常满意,于是拿自己计算出的起始 值和卡马克的神秘数字做比赛,看看谁的数字能够更快更精确的求得平方根。结果是 卡马克赢了... 谁也不知道卡马克是怎么找到这个数字的。  
最后Lomont怒了,采用暴力方法一个数字一个数字试过来,终于找到一个比卡马克数 字要好上那么一丁点的数字,虽然实际上这两个数字所产生的结果非常近似,这个暴 力得出的数字是0x5f375a86。  
Lomont为此写下一篇论文,"Fast Inverse Square Root"。   

论文下载地址: http://www.math.purdue.edu/~clomont/Math/Papers/2003/InvSqrt.pdf http://www.matrix67.com/data/InvSqrt.pdf 点击此处下载 **_714253IQ3KPV.pdf(文件大小:148K) (原文件名:InvSqrt.pdf)

tianxiongweitxw 发表于 2021-6-11 15:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:模电讨论兴趣小组群微信号:xukun977

1897

主题

22577

帖子

295

粉丝
快速回复 在线客服 返回列表 返回顶部