那里错了

那里错了,第1张

你的问题只是初步问题,后面会有更多的问题,都把你解决了一下:

首先你的问题的答案如下:

gdrawString("热烈欢迎进入JAVA世界!", 25, 25);

看上去是不是和你写的差不多?!其实只是把你的中文下的逗号和分号,改成了英文下的逗号和分号,这两个符号在程序世界里是很不样的,切记!另外 String 的S 要大写!

其他问题:

1 void paint(Graphics g)

如果要重写这个 paint 函数,必须把 public 带上:

public void pain(Graphics g)

2。public static void main(String args[])

{paint();}

肯定时跑不通的,在类里静态函数不能调用非静态函数

纵观你的程序,程序书写格式不怎么好。

还好看懂了你的程序意图,帮你写了一个,后续 javac 编译通过以后,你可以 appletviewer 运行,也可以 java AppletHelloWorld (这个本来也是你后一步要遇到的问题的)运行:

import javaawtGraphics;

import javaappletApplet;

import javaxswing;

public class AppletHelloWorld extends Applet {

public static void main(String args[]) {

JFrame frame = new JFrame("AppletTest");

framegetContentPane()add(new AppletHelloWorld());

framesetSize(400, 300);

framesetVisible(true);

framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

public void paint(Graphics g) {

gdrawString("热烈欢迎进入JAVA世界!", 25, 25);

}

}

还不明白,可以密我

1024是中国的程序员节,是指10月24日这天。

在国际上,每年的第256(十六进制为0x100,或28)天是程序员节。而在中国,人们主要认同10月24日(2的10次方,210=1024)才是程序员日。因为1024=1k,是二进制的程序世界和十进制的现实世界之间的一个接口,在统计数据流量和存储空间时,1024和1000经常不作区分。

1024程序员节的背景:

设立这个程序员节要归功于瓦伦丁·巴尔特(Valentin Balt),并行技术网页设计公司(Parallel Technologies web design company)的一名职员,2002年,他收集签名向俄罗斯政府请愿,请求将这一天定为程序员节。

2009年7月24日,俄罗斯通信与大众传媒部提出了新的节日安排方案,设立程序员节。9月11日,俄罗斯总统梅德韦杰夫签署了这个法案。

在中国,有人提议把10月24日定为中国的程序员节,因为1024不仅同样是程序员的一个常用数字,而且10月24日这个日期非常直观,也不会在平年和闰年有所变化。

百度百科-1024程序员节

线性代数是什么?

在大学数学学科中,线性代数是最为抽象的一门课,从初等数学到线性代数的思维跨度比微积分和概率统计要大得多。很多人学过以后一直停留在知其然不知其所以然的阶段,若干年之后接触图形编程或机器学习等领域才发现线性代数的应用无处不在,但又苦于不能很好地理解和掌握。的确,多数人很容易理解初等数学的各种概念,函数、方程、数列一切都那么的自然,但是一进入线性代数的世界就好像来到了另一个陌生的世界,在各种奇怪的符号和运算里迷失了。

我在初接触线性代数的时候简直感觉这是一门天外飞仙的学科,一个疑问在我脑子里浮现出来:

如果看到这个问题,你的反应是“这还用问,数学当然是客观的自然规律了”,我一点儿都不觉得奇怪,我自己也曾这样认为。从中学的初等数学和初等物理一路走来,很少人去怀疑一门数学学科是不是自然规律,当我学习微积分、概率统计时也从来没有怀疑过,唯独线性代数让我产生了怀疑,因为它的各种符号和运算规则太抽象太奇怪,完全对应不到生活经验。所以,我还真要感谢线性代数,它引发了我去思考一门数学学科的本质。其实,不止是学生,包括很多数学老师都不清楚线性代数到底是什么、有什么用,不仅国内如此,在国外也是这样,国内的孟岩写过《理解矩阵》,国外的Sheldon Axler教授写过《线性代数应该这样学》,但都还没有从根本上讲清楚线性代数的来龙去脉。对于我自己来讲,读大学的时候没有学懂线性代数,反而是后来从编程的角度理解了它。很多人说数学好可以帮助编程,我恰好反过来了,对程序的理解帮助了我理解数学。

本文的目标读者是程序员,下面我就带各位做一次程序员在线性代数世界的深度历险!既然是程序员,在进入线性代数的领域之前,我们不妨先从考察一番程序世界,请思考这样一个问题:

为什么要问这样一个看起来很蠢的问题呢?因为它的答案显而易见,大家对天天使用的程序语言的认识一定胜过抽象的线性代数,很显然程序语言虽然包含了内在的逻辑,但它们本质上都是人为的设计。所有程序语言的共同性在于:建立了一套模型,定义了一套语法,并将每种语法映射到特定的语义。程序员和语言实现者之间遵守 语言契约:程序员保证代码符合语言的语法,编译器/解释器保证代码执行的结果符合语法相应的语义 。比如,C++规定用new A()语法在堆上构造对象A,你这样写了C++就必须保证相应的执行效果,在堆上分配内存并调用A的构造函数,否则就是编译器违背语言契约。

从应用的角度,我们能不能把线性代数视为一门程序语言呢?答案是肯定的,我们可以用语言契约作为标准来试试。假设你有一个图像,你想把它旋转60度,再沿x轴方向拉伸2倍;线性代数告诉你,“行!你按我的语法构造一个矩阵,再按矩阵乘法规则去乘你的图像,我保证结果就是你想要的”。实际上,线性代数和SQL这样的DSL非常相似,下面来作一些类比:

所以,从应用的角度看, 线性代数是一种人为设计的领域特定语言(DSL) ,它建立了一套模型并通过符号系统完成语法和语义的映射。实际上,向量、矩阵、运算规则的语法和语义都是人为的设计,这和一门语言中的各种概念性质相同,它是一种创造,但是前提是必须满足语言契约。

为什么要有线性代数?

可能有人对把线性代数当成一门DSL不放心,我给你一个矩阵,你就把我的图形旋转了60度沿x轴拉伸了2倍,我总感觉不踏实啊,我都不知道你“底层”是怎么做!其实,这就像有的程序员用高级语言不踏实,觉得底层才是程序的本质,老是想知道这句话编译成汇编是什么样?那个 *** 作又分配了多少内存?别人在Shell里直接敲一个wget命令就能取下一个网页,他非要用C语言花几十分钟来写一堆代码才踏实。其实,所谓底层和上层只是一种习惯性的说法,并不是谁比谁更本质。 程序的编译和解释本质上是不同模型间的语义映射 ,通常情况下是高级语言映射为低级语言,但是完全也可以把方向反过来。Fabrice Bellard用JavaScript写了一个虚拟机,把Linux跑在JavaScript虚拟机上,这就是把机器模型往JavaScript模型上映射。

建立新模型肯定依赖于现有的模型,但这是建模的手段而不是目的,任何一种新模型的目的都为了更简单地分析和解决某一类问题。线性代数在建立的时候,它的各种概念和运算规则依赖于初等数学的知识,但是一旦建立起来这层抽象模型之后,我们就 应该习惯于直接利用高层次的抽象模型去分析和解决问题 。说到线性代数是为了比初等数学更容易地分析和解决问题,下面我们通过一个例子来实际感受一下它的好处:

初等数学中三角形面积最著名的计算公式是area = 1/2 base height ,当三角形有一条边恰好在坐标轴上时我们就很容易算出它的面积。但是,假如同样一个三角形我们把坐标轴旋转一下,让它的边不在坐标轴上,怎么办?我们还能得到它的底和高吗?答案肯定是可以的,但是就明显复杂了,而且还要分很多种情况去分别讨论。

相反,如果我们用线性代数知识来解决这个问题就非常轻松。在线性代数中两个向量a,b的叉积(Cross Product)是一个向量,其方向与a,b垂直,其大小等于a,b构成的平行四边形的面积:

我们可以把三角形的边视为向量,所以三角形的面积等于两个边向量的叉积向量的长度除以二:

注:length表示取向量长度,cross_product表示两个向量的叉积。

这样一个在初等数学里面有点儿小难的问题在线性代数中瞬间搞定!可能有人会说,你直接基于叉积来做,当然简单了,但是叉积本身不是也挺复杂的吗?你把它展开试试看呢?是的, 模型的作用就是把一部分复杂性隐藏到模型中 ,使得模型的使用者可以更加简单地解决问题。曾经有人质疑C++太复杂,C++之父Bjarne Stroustrup这样回答:

在特定环境下,问题的复杂性是由其本质决定的,C++把一部分的复杂性纳入了语言和标准库,目的是使得应用程序更为简单。当然,并非所有场合C++都使得问题更加简单,但是从原理上讲,C++的复杂性是有道理的。除了C++,Java、SQL、CSS等各种语言和框架莫不如是,想象一下,如果不使用数据库,动不动就自己去做数据存储和管理是多么复杂啊!这样我们就不难理解为什么线性代数要定义叉积这样奇怪的运算了,它和C++把很多常用的算法和容器纳入STL是同一道理。同样的,甚至你还可以在线性代数中定义自己想要的运算拿来复用。所以,数学一点儿不死板,它和程序一样是活活泼泼的,你理解了它的来龙去脉就能驾驭自如。说到这里,我们就顺便回答一个很常见的疑惑:

其实,和程序复用一样,线性代数定义点积、叉积和矩阵运算是因为它们的应用非常广,有很大的复用价值,可以作为我们分析和解决问题的基础。比如,很多问题都涉及到一个向量到另一个向量的投影或是求两个向量的夹角,那么就会考虑专门定义点积(Dot Product)这个运算:

点积概念的提出属于设计,有发挥创造的余地;一旦设计定了,具体公式就不能随意发挥了,必须符合逻辑,保证它映射到初等数学模型的正确性。这就像一门高级语言可以定义很多概念,什么高阶函数、闭包等等,但是它必须保证映射到底层实现时在执行产生的效果符合其定义的规范。

线性代数好在哪里?

上面说了,线性代数是一种高层次抽象模型,我们可以采用学习一门程序语言的方法去学习它的语法和语义,但是这一认识不只针对线性代数,它是对每一门数学学科通用的,可能有人会有疑问

这就问到了根本上, 线性代数的核心:向量模型 。我们在初等数学中学习的坐标系属于笛卡尔所提出的解析模型,这个模型很有用,但同时也有很大的缺点。坐标系是人为加上的虚拟参考系,但是我们要解决的问题,比如求面积,图形旋转、拉伸等应用都是和坐标系无关的,建立一个虚拟的坐标系往往无助于解决问题,刚才三角形面积的例子就是这样。

向量模型很好地克服了解析模型的缺点,如果说解析模型代表了某种“绝对性”的世界观,那么向量模型就代表了某种“相对性”的世界观,我推荐把向量模型和解析模型看作对立的两种模型。

向量模型中定义了向量和标量的概念。向量具有大小和方向,满足线性组合法则;标量是只有大小没有方向的量(注:标量的另一种更深刻的定义是在旋转变换下保持不变的量)。 向量模型的优点之一是其坐标系无关性 ,也就是相对性,它在定义向量和运算规则的时候从一开始就抛开了坐标系的束缚,不管你坐标轴怎么旋转,我都能适应,向量的线性组合、内积、叉积、线性变换等等运算全部都是坐标系无关的。注意,所谓坐标系无关性不是说就没有坐标系了,还是有的,刚才三角形例子的顶点就是用坐标表示的,只是在解决问题的时候不同的坐标系不会构成影响。用一个比喻,Java号称平台无关,不是说Java就是空中楼阁,而是说你用Java编程时底层是Linux还是Windows往往对你没有影响。

向量模型有什么好处呢?除了刚才三角形面积问题是一个例子,下面我再举一个几何的例子:

这个问题如果是要从解析几何的角度去解决几乎复杂到没法下手,除非是平面恰好是过坐标轴的特殊情况,但是如果从向量模型考虑就很简单:根据平面方程,平面的法向量(Normal Vector)是v=(a, b, c),设从平面上任意一点(x, y, z)到(x0, y0, z0)的向量为w,那么通过点积dot_product(w, v)算出w到v的投影向量p,其大小就是(x0, y0, z0)到平面ax + by + cz + 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数列的例子:

首先,我们构造两个向量v1=(f(n+1), f(n))和v2=(f(n+2), f(n+1)),根据Fibonacci数列性质,我们可以得到从v1到v2的递推变换矩阵:

并进一步得到:

这样就把线性递推问题转化为了矩阵的n次幂经典问题,在O(log n)时间复杂度内解决。除了线性递推数列,初等数学中著名的n元一次方程组问题也可以转化为矩阵和向量乘法形式更容易地解决。这个例子是想说明,凡是满足线性关系的系统都是向量模型的用武之地,我们往往可以把它转化为线性代数得到简洁高效的解决方案。

总结

本文提出了一种观点:从应用的角度,我们可以把线性代数视为一门特定领域的程序语言。线性代数在初等数学基础上建立了向量模型,定义了一套语法和语义,符合程序语言的语言契约。向量模型具有坐标系无关性和线性性,它是整个线性代数的核心,是解决线性空间问题的最佳模型。向量的概念、性质、关系、变换是掌握和运用线性代数的重点。

>

上一部结尾,尼奥(基奴李维斯 饰)终于意识到自己的能力和使命,中d复活后,变成了无所不能的“救世主”,他和女友崔妮蒂(凯莉·安·摩丝 饰),舰长墨菲斯(劳伦斯·菲什伯恩 饰)回到了人类的基地锡安,受到人们的热烈欢迎。

如果我们的世界其实是一个模拟出来的“现实”,那么此前所观测到的宇宙不过是这个大型程序里的一小块地图。

相信模拟理论的人们认为,我们是被精通技术的生命体创造出来的“世界”程序中的NPC。

起初,这只是科幻小说里的一个概念。但一些物理学家和哲学家们表示,我们可能真的是生活在一个真实的模拟世界中,而这意味着我们需要抛开目前已知(或者自认为已知)的所有东西——包括宇宙、太空、地球。

来自牛津大学的哲学家Nick Bostrom在2003年发表了一篇论文,开启了人们讨论模拟理论的热潮。在报告中他写道:“如果这只是个模拟世界,那么我们正在观察的宇宙就只是整个物理中的一小块地图碎片。虽然我们见到的世界是 ‘真实’存在的,但却不是同一个位面上的‘现实’。”

模拟世界和生命

《感知模拟理论》(The Simulation Hypothesis)的作者、来自麻省理工大学的Rizwan Virk是模拟世界理论的拥趸之一。他回忆起自己玩虚拟现实的 游戏 时的场景,因为太过逼真,他甚至忘记了自己是戴着耳机在一个空房间里。这让他想到:我们真的确定我们不是技术更高超的“人”所创造出来的程序里的角色吗?

这个问题在Rich Terrile、来自NASA喷气推进实验的计算机科学家看来,答案是有可能的。虽然截至今日,最优秀的模拟技术尚未涉及到人工思维,但Terrile认为,我们很快就能掌握模仿共情的能力。“就像神一样创造出一批新的‘人’,”他说道。

但也不是所有人都买账。来自哈佛大学的物理学家Lisa Randall认为,“模拟理论”的可能性是0。首先,目前并没有证据表明各大行星不是像我们观测到的那样排列和组成。

其次,她很奇怪为什么那些“先进的人”会想要模拟智人(我们)。

起源

然而,模拟理论与神创论有异曲同工之妙:先进者(神的角色)创造出了世界这个大型程序,并制造了我们。

Terrile表示,如果模拟理论是正确的,那么这项工程就需要“一个程序员、一个建筑师、一个设计师,从数学和科学的角度锻造出了整个世界”。而不仅仅是信仰。

但对于其他学者,例如来自马里兰大学的物理学家Sylvester James Gates,他们认为应当警惕模拟理论与宗教信仰之间的相似性。他表示:“是科学让我们摆脱了我们是被一个看不见的实体 *** 控的木偶的想法,而模拟理论看起来就像宗教,只是程序员代替了上帝。”

那么是谁、或什么,创造出了这么一个模拟的宇宙?支持者们表示,一种可能性是先进的人类种族——太空外星人,还有一种可能则更令人费解——我们自己的后代,即Terrile所说的“未来的我们”。因为数百、数千年后的人类发展出了加强版的虚拟现实程序,不仅能研制出一个完整的世界地图,还能利用深度学习等手段模拟在这个世界中的角色的身体和思想。而我们就是被设定好的NPC。

Bostrom 表示:“就像我们现在可以模拟 其它东西 一样,你也可以模拟人类的大脑。”的确,我们现在的技术还无法实现,但这并不存在概念上的障碍。据他所说,一旦某一代研究人员具备“足够详细和准确的大脑模拟数据,那么这些数据加载到程序里运行之后,就有可能会产生具有自我意识的体验。”

寻找证据

我们能知道这个假设的正确与否吗?Bostrum认为,有的个体或许会有极其小的概率能遇上这个程序的bug。“有一天你眼前突然d出一个窗口,告诉你‘点击以获取更多信息’,那将是对世界观的致命一击。”

十分具有现实意义的是,有物理学家提出了实验。例如,我们的世界在极小的尺度上是否由离散的“块”组成,例如数字图像中的像素。如果我们的世界是“像素化”的,那么这很可能就是“人为”创造的证据。而一个由来自美国和德国的物理学家组成的团队认为,测量宇宙射线可以提供答案。

如果最终确认我们只是被设定好性格、相貌、人生故事的NPC,会怎么样?当人们得知我们的思想和 情感 不过是程序员键盘下的0和1时,又会有什么反应?有的人认为,这个认知会颠覆我们的三观,破坏我们的主动性,从而扰乱正常的生活。来自哈佛大学的天文学家Abraham Loeb表示,该理论的确认甚至可能会引发 社会 动荡。“知道了自己的思想、行为和人生不过是被设定好的、自动运行的脚本,就可以肆无忌惮地免除对自己的行为负责任的责任感。没有什么会比这个想法更会破坏 社会 秩序了。”

其他人则认为,这一模拟假设如果出现了支持的证据,有可能会制造出一种新的恐惧,迫使创造者关闭这个模拟的程序世界。而Bostrum则表示:“你随时可能在某个特定的时间点心脏病发作或中风,或因各种各样的原因死亡。因为脚本设置好了,但你却不知道触发死亡的时间节点。”

但无论如何看待模拟理论这个假设,Bostrom认为,对模拟理论的思考本身就是一种受人欢迎的谦逊。因为“天地间的事物远比你想象中的还要更加宽广。”

而Bostrom坚持认真对待模拟理论,因为对于他来说,“这有助于在这个世界上寻找自己的定位,尽自己所能去理解这个世界,并尝试突破自己的局限去不断尝试。”

蝌蚪五线谱编译自 nbcnews ,译者 狗格格,转载须授权

程序员界的大牛,概括来说分两种:一种是天生有天赋,对程序的思维想法,就是比一般人精准敏锐;一种是没有天赋,但十分努力刻苦,日复一日年复一年,最终成为对技术非常娴熟的人。

第一种就不用说了,先天资本。

那对于第二种情况,江西计算机学校>

以上就是关于那里错了全部的内容,包括:那里错了、1024是什么节呀、人工智能基础-算法工程师为什么要懂线性代数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9470527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存