当前位置: 首页 > news >正文

做网站的前途怎么样做网页需要什么

做网站的前途怎么样,做网页需要什么,营销活动有哪些内容,相册网站开发本文提出了一种观点#xff1a;从应用的角度#xff0c;我们可以把线性代数视为一门特定领域的程序语言。我们一起来看看#xff01;文章有点偏理论讨论#xff0c;可能比较枯燥#xff0c;对于一名程序员#xff0c;你如果看下去#xff0c;你将会有不一样的收获#…本文提出了一种观点从应用的角度我们可以把线性代数视为一门特定领域的程序语言。我们一起来看看文章有点偏理论讨论可能比较枯燥对于一名程序员你如果看下去你将会有不一样的收获线性代数是什么在大学数学学科中线性代数是最为抽象的一门课从初等数学到线性代数的思维跨度比微积分和概率统计要大得多。很多人学过以后一直停留在知其然不知 其所以然的阶段若干年之后接触图形编程或机器学习等领域才发现线性代数的应用无处不在但又苦于不能很好地理解和掌握。的确多数人很容易理解初等数学 的各种概念函数、方程、数列一切都那么的自然但是一进入线性代数的世界就好像来到了另一个陌生的世界在各种奇怪的符号和运算里迷失了。我在初接触线性代数的时候简直感觉这是一门天外飞仙的学科一个疑问在我脑子里浮现出来线性代数到底是一种客观的自然规律还是人为的设计如果看到这个问题你的反应是“这还用问数学当然是客观的自然规律了”我一点儿都不觉得奇怪我自己也曾这样认为。从中学的初等数学和初等物理 一路走来很少人去怀疑一门数学学科是不是自然规律当我学习微积分、概率统计时也从来没有怀疑过唯独线性代数让我产生了怀疑因为它的各种符号和运算 规则太抽象太奇怪完全对应不到生活经验。所以我还真要感谢线性代数它引发了我去思考一门数学学科的本质。其实不止是学生包括很多数学老师都不清 楚线性代数到底是什么、有什么用不仅国内如此在国外也是这样国内的孟岩写过《理解矩阵》国外的Sheldon Axler教授写过《线性代数应该这样学》但都还没有从根本上讲清楚线性代数的来龙去脉。对于我自己来讲读大学的时候没有学懂线性代数反而是后来从编程的角度理解了它。很多人说数学好可以帮助编程我恰好反过来了对程序的理解帮助了我理解数学。本文的目标读者是程序员下面我就带各位做一次程序员在线性代数世界的深度历险既然是程序员在进入线性代数的领域之前我们不妨先从考察一番程序世界请思考这样一个问题计算机里面有汇编、C/C、Java、Python等通用语言还有Makefile、CSS、SQL等DSL这些语言是一种客观的自然规律还是人为的设计呢为什么要问这样一个看起来很蠢的问题呢因为它的答案显而易见大家对天天使用的程序语言的认识一定胜过抽象的线性代数很显然程序语言虽然包含了 内在的逻辑但它们本质上都是人为的设计。所有程序语言的共同性在于建立了一套模型定义了一套语法并将每种语法映射到特定的语义。程序员和语言实现 者之间遵守语言契约程序员保证代码符合语言的语法编译器/解释器保证代码执行的结果符合语法相应的语义。比如C规定用new A()语法在堆上构造对象A你这样写了C就必须保证相应的执行效果在堆上分配内存并调用A的构造函数否则就是编译器违背语言契约。另外想要成为一个优秀的、有能力程序员做软件开发的话就来学习C/C吧你如果感觉自学C/C语言有困难的话我本身是一个C/C出身的程序员大家有兴趣可以一起来QQ上学习建了一个群C/C编程学习七八四一四3133。不管你是转行还是找工作大家都一起成长进步。从应用的角度我们能不能把线性代数视为一门程序语言呢答案是肯定的我们可以用语言契约作为标准来试试。假设你有一个图像你想把它旋转60 度再沿x轴方向拉伸2倍线性代数告诉你“行你按我的语法构造一个矩阵再按矩阵乘法规则去乘你的图像我保证结果就是你想要的”。实际上线性代数和SQL这样的DSL非常相似下面来作一些类比模型和语义SQL是在低级语言之上建立了关系模型核心语义是关系和关系运算线性代数在初等数学之上建立了向量模型核心语义是向量和线性变换语法SQL为每种语义定义了相应的语法如select, where, join等线性代数也定义了向量、矩阵、矩阵乘法等语义概念相应的语法编译/解释SQL可以被编译/解释为C语言线性代数相关概念和运算规则可以由初等数学知识来解释实现我们可以在MySQL、Oracle等关系数据库上进行SQL编程我们也可以在MATLAB、Mathematica等数学软件上进行线性代数编程所以从应用的角度看线性代数是一种人为设计的领域特定语言(DSL)它建立了一套模型并通过符号系统完成语法和语义的映射。实际上向量、矩阵、运算规则的语法和语义都是人为的设计这和一门语言中的各种概念性质相同它是一种创造但是前提是必须满足语言契约。为什么要有线性代数可能有人对把线性代数当成一门DSL不放心我给你一个矩阵你就把我的图形旋转了60度沿x轴拉伸了2倍我总感觉不踏实啊我都不知道你“底 层”是怎么做其实这就像有的程序员用高级语言不踏实觉得底层才是程序的本质老是想知道这句话编译成汇编是什么样那个操作又分配了多少内存别人 在Shell里直接敲一个wget命令就能取下一个网页他非要用C语言花几十分钟来写一堆代码才踏实。其实所谓底层和上层只是一种习惯性的说法并不 是谁比谁更本质。程序的编译和解释本质上是不同模型间的语义映射通常情况下是高级语言映射为低级语言但是完全也可以把方向反过来。Fabrice Bellard用JavaScript写了一个虚拟机把Linux跑在JavaScript虚拟机上这就是把机器模型往JavaScript模型上映射。建立新模型肯定依赖于现有的模型但这是建模的手段而不是目的任何一种新模型的目的都为了更简单地分析和解决某一类问题。线性代数在建立的时候它的各种概念和运算规则依赖于初等数学的知识但是一旦建立起来这层抽象模型之后我们就应该习惯于直接利用高层次的抽象模型去分析和解决问题。说到线性代数是为了比初等数学更容易地分析和解决问题下面我们通过一个例子来实际感受一下它的好处给定三角形的顶点(x1, y1), (x2, y2), (x3, y3)求三角形的面积。初等数学中三角形面积最著名的计算公式是area 1/2 * base * height 当三角形有一条边恰好在坐标轴上时我们就很容易算出它的面积。但是假如同样一个三角形我们把坐标轴旋转一下让它的边不在坐标轴上怎么办我们还能得到它的底和高吗答案肯定是可以的但是就明显复杂了而且还要分很多种情况去分别讨论。相反如果我们用线性代数知识来解决这个问题就非常轻松。在线性代数中两个向量ab的叉积(Cross Product)是一个向量其方向与ab垂直其大小等于ab构成的平行四边形的面积:我们可以把三角形的边视为向量所以三角形的面积等于两个边向量的叉积除以二的绝对值area abs(1/2 * cross_product((x2 - x1, y2 - y1), (x3 - x1, y3 - y1)))注abs表示取绝对值cross_product表示两个向量的叉积。这样一个在初等数学里面有点儿小难的问题在线性代数中瞬间搞定可能有人会说你直接基于叉积来做当然简单了但是叉积本身不是也挺复杂的吗你把它展开试试看呢是的模型的作用就是把一部分复杂性隐藏到模型中使得模型的使用者可以更加简单地解决问题。曾经有人质疑C太复杂C之父Bjarne Stroustrup这样回答Complexity will go somewhere: if not the language then the application code.在特定环境下问题的复杂性是由其本质决定的C把一部分的复杂性纳入了语言和标准库目的是使得应用程序更为简单。当然并非所有场合C 都使得问题更加简单但是从原理上讲C的复杂性是有道理的。除了CJava、SQL、CSS等各种语言和框架莫不如是想象一下如果不使用 数据库动不动就自己去做数据存储和管理是多么复杂啊这样我们就不难理解为什么线性代数要定义叉积这样奇怪的运算了它和C把很多常用的算法和容器 纳入STL是同一道理。同样的甚至你还可以在线性代数中定义自己想要的运算拿来复用。所以数学一点儿不死板它和程序一样是活活泼泼的你理解了它的 来龙去脉就能驾驭自如。说到这里我们就顺便回答一个很常见的疑惑线性代数的点积、叉积还有矩阵运算都很奇怪为什么要定义这些运算呢它们的定义又为什么是这个样子呢其实和程序复用一样线性代数定义点积、叉积和矩阵运算是因为它们的应用非常广有很大的复用价值可以作为我们分析和解决问题的基础。比如很多问题都涉及到一个向量到另一个向量的投影或是求两个向量的夹角那么就会考虑专门定义点积(Dot Product)这个运算点积概念的提出属于设计有发挥创造的余地一旦设计定了具体公式就不能随意发挥了必须符合逻辑保证它映射到初等数学模型的正确性。这就像一门高级语言可以定义很多概念什么高阶函数、闭包等等但是它必须保证映射到底层实现时在执行产生的效果符合其定义的规范。线性代数好在哪里上面说了线性代数是一种高层次抽象模型我们可以采用学习一门程序语言的方法去学习它的语法和语义但是这一认识不只针对线性代数它是对每一门数学学科通用的可能有人会有疑问微积分、概率论也是高层次抽象那么线性代数这种高层次抽象的特点在哪里呢这就问到了根本上线性代数的核心向量模型。我们在初等数学中学习的坐标系属于笛卡尔所提出的解析模型这个 模型很有用但同时也有很大的缺点。坐标系是人为加上的虚拟参考系但是我们要解决的问题比如求面积图形旋转、拉伸等应用都是和坐标系无关的建立一 个虚拟的坐标系往往无助于解决问题刚才三角形面积的例子就是这样。向量模型很好地克服了解析模型的缺点如果说解析模型代表了某种“绝对性”的世界观那么向量模型就代表了某种“相对性”的世界观我推荐把向量模型和解析模型看作对立的两种模型。向量模型中定义了向量和标量的概念。向量具有大小和方向满足线性组合法则标量是只有大小没有方向的量注标量的另一种更深刻的定义是在坐标变换中保持不变的量。向量模型的优点之一是其坐标系无关性 也就是相对性它在定义向量和运算规则的时候从一开始就抛开了坐标系的束缚不管你坐标轴怎么旋转我都能适应向量的线性组合、内积、叉积、线性变换等 等运算全部都是坐标系无关的。注意所谓坐标系无关性不是说就没有坐标系了还是有的刚才三角形例子的顶点就是用坐标表示的只是在解决问题的时候不同 的坐标系不会构成影响。用一个比喻Java号称平台无关不是说Java就是空中楼阁而是说你用Java编程时底层是Linux还是Windows往 往对你没有影响。向量模型有什么好处呢除了刚才三角形面积问题是一个例子下面我再举一个几何的例子给定三维坐标系中的一点(x0, y0, z0)和一个平面a*x b*y c*z d 0求点到平面的垂直距离这个问题如果是要从解析几何的角度去解决几乎复杂到没法下手除非是平面恰好是过坐标轴的特殊情况但是如果从向量模型考虑就很简单根据平面方程平面的法向量(Normal Vector)是v(a, b, c)设从平面上任意一点(x, y, z)到(x0, y0, z0)的向量为w那么通过内积dot_product(w, v)算出w到v的投影向量p其大小就是(x0, y0, z0)到平面a*x b*y c*z d 0的垂直距离。这里用到了向量模型的基本概念法向量投影向量内积整个问题解决过程简洁明快。下面再给大家留一道相似的练习题熟悉机器学习的朋友可能会发现这是线性代数在线性分类中的应用给定n维空间中的两点(a1, a2, ... an)(b1, b2, ... bn)和一个超平面c1*x1 c2*x2 ... cn*xn d 0请判断两点在超平面的同侧或异侧离开向量下面我们要请出线性代数的另一个主角矩阵(Matrix)。线性代数定义了矩阵和向量、矩阵和矩阵的乘法运算规则很复杂用来做什么也不清楚很多初学者都不能很好地理解可以说矩阵是学好线性代数的拦路 虎。遇到复杂的东西往往需要先避免一头陷入细节先从整体上把握它。其实从程序的角度看无论形式多么奇怪它无非是一种语法语法必然对应了语义 所以理解矩阵的重点在于理解其语义。矩阵的语义不止一种在不同的环境中有不同的语义在同一环境中也可以有不同的解读最常见的包括1)表示一个线性 变换2)表示列向量或行向量的集合3)表示子矩阵的集合。矩阵作为一个整体对应的是线性变换语义用矩阵A乘以一个向量v得到w矩阵A就代表了v到w的线性变换。比如如果想要把向量v0按逆时针方向旋转60度得到v只需要用旋转变换矩阵Rotation Matrix)去乘v0就可以了。除了旋转变换拉伸变换也是一种常见的变换比如我们可以通过一个拉伸矩阵把向量沿x轴拉伸2倍请试着自己给出拉伸矩阵的形式。更重要的是矩阵乘法有一个很好的性质满足结合率。这就意味着可以对线性变换进行叠加比如我们可以把“沿逆时针旋转60度”的矩阵M和“沿x轴拉伸2倍”的矩阵N相乘得到一个新矩阵T来代表“沿逆时针旋转60度并沿x轴拉伸2倍”。这是不是很像我们Shell中把多个命令通过管道进行叠加呢上面重点介绍了向量模型的坐标系无关性除此之外向量模型的另一优点是线性性因而它能用来表示线性关系下面我们来看一个熟悉的Fibonacci数列的例子Fibonacci数列定义为f(n) f(n-1) f(n-2), f(0) 0, f(1) 1问题输入n请给出求f(n)的时间复杂度不超过O(logn)的算法。首先我们构造两个向量v1 (f(n1), f(n))和v2 (f(n2), f(n1))根据Fibonacci数列性质我们可以得到从v1到v2的递推变换矩阵并进一步得到这样就把线性递推问题转化为了矩阵的n次幂经典问题在Olog n时间复杂度内解决。除了线性递推数列初等数学中著名的n元一次方程组问题也可以转化为矩阵和向量乘法形式更容易地解决。这个例子是想说明凡是满足 线性关系的系统都是向量模型的用武之地我们往往可以把它转化为线性代数得到简洁高效的解决方案。总之我的体会是向量模型是整个线性代数的核心向量的概念、性质、关系、变换是掌握和运用线性代数的重点。总结本文提出了一种观点从应用的角度我们可以把线性代数视为一门特定领域的程序语言。线性代数在初等数学基础上建立了向量模型定义了一套语法和语义符合程序语言的语言契约。向量模型具有坐标系无关性和线性性它是整个线性代数的核心是解决线性空间问题的最佳模型。来源Todd Wei 的博客文艺复兴记学习C/C可以关注笔者的专栏C/C学习笔记​zhuanlan.zhihu.com
http://www.zqtcl.cn/news/623809/

相关文章:

  • 网站备案多少钱安全网站建设与服务的关系
  • 手机端网页设计尺寸规范优化seo排名
  • 做网站业务提成多少厦门十大装修公司排名榜
  • 为什么用开源建站wordpress rss 插件
  • 语文建设投稿网站南昌做网站的公司多不多
  • 石家庄网站建设的公司功能性质网站
  • 企业网站主页模板装饰公司名字起名大全
  • 马鞍山网站设计价格如何在微信公众号内部做网站
  • 申请网站建设经费的报告生态建设网站
  • 建网站要多少钱用自己的服务器河北工程大学网站开发成本
  • 宁波网站建站公司商务网站模块设计时前台基础设施建设不包括
  • 徐州免费网站制作怎么用阿里云服务器搭建wordpress
  • php猎奇源码 织梦新闻视频图片八卦娱乐趣事资讯门户网站模板html代码表格
  • 南通做网站优化哪家好网页策划书 网站建设定位
  • 防止访问网站文件夹绵阳 网站设计
  • 网页与网站的区别是什么东莞网站公司排名
  • 盐城市城乡和住房建设厅网站wordpress文章订阅
  • 济南网站优化wordpress文件上传到那个文件
  • 外贸网站租用外国服务器好还是自己装一个服务器好高质量外链网站
  • 珠海专门做网站成都到西安
  • 网站做1920px好吗长沙seo优化排名
  • 哈尔滨微信网站开发wordpress 视
  • wordpress 分享封面图片尺寸重庆官网优化乐育公司
  • dede手机网站更新受欢迎的昆明网站建设
  • 网站设计外包合同专做自驾游的网站
  • 网站建设服务预算游戏网站怎么赚钱
  • 怎么做网站关键词视频手机网页前端开发
  • 好网站具备条件网站建设外链
  • 青岛如何建立企业网站企业中国数据域名注册
  • 怎么看网站做的好不好南京h5 网站建设