由于多项式的因式分解比较困难, 所以在求矩阵的特征值时
[关键]尽量利用行列式的性质及特征多项式|A-λE|的特点,
使某行(或列)出现λ的一次因式的公因子
提出λ的一次因式后用十字相乘法分解
当然也有不好凑的例子, 但大多数考题都不会太困难
例:
>
按照题目要求编写的用凯撒密码加密的C语言程序如下
#include<stdioh>
int main(){
char s[80];
int offset,i;
fgets(s,80,stdin);
scanf("%d",&offset);
for(i=0;s[i]!='\0';i++){
if('A'<=s[i] && s[i]<='Z')
if(offset>=0)
s[i]='A'+(s[i]-'A'+offset)%26;
else
s[i]='A'+(s[i]-'A'+26+offset%26)%26;
else if('a'<=s[i] && s[i]<='z')
if(offset>=0)
s[i]='a'+(s[i]-'a'+offset)%26;
else
s[i]='a'+(s[i]-'a'+26+offset%26)%26;
}
printf("%s\n", s);
return 0;
}
|A|=5B=AA=|A|I=5I
则|λI-B|=|λI-5I|=|(λ-5)I|=(λ-5)^n
令其等于0,解得λ=5(n重)
因此B的特征值是5(n重)
代入特征方程λI-B=0,即0=0(方程矩阵,秩为0)
则
特征向量是
(1,0,0,,0)T
(0,1,0,,0)T
(0,0,0,,1)T
是的。
既然有可逆矩阵,那么,|A|不等于0,|A|等于A的所有特征值之积,所以,由A可逆知A的特征值都不等于0,故无零特征值。
方阵A可逆的充分bai必要条件有:
①|A|≠0。并且当A可逆时,有A^zhi-1=A/|A|。(A是A的伴随矩阵,daoA^-1是A的逆矩阵)
②对于n阶矩阵A,存在n阶矩阵B,使AB=E(或BA=E),并且当A可逆时,B=A^-1。
③A可以经过有限次初等变化为单位矩阵。
④A可以表示为有限个初等矩阵的乘积。
⑤A可以只经过初等行变换化为单位矩阵E。
扩展资料
求矩阵的全部特征值和特征向量的方法如下:
第一步:计算的特征多项式;
第二步:求出特征方程的全部根,即为全部特征值;
第三步:对于的每一个特征值,求出齐次线性方程组的一个基础解系,则属于特征值的全部特征向量(其中是不全为零的任意实数)。
若是的属于的特征向量,则也是对应于的特征向量,因而特征向量不能由特征值惟一确定。反之,不同特征值对应的特征向量不会相等,亦即一个特征向量只能属于一个特征值。
设A为n阶矩阵,若存在常数λ及n维非零向量x,使得Ax=λx,则称λ是矩阵A的特征值,x是A属于特征值λ的特征向量。A的所有特征值的全体,叫做A的谱,记为 如将特征值的取值扩展到复数领域,则一个广义特征值有如下形式:Aν=λBν
其中A和B为矩阵。其广义特征值(第二种意义)λ 可以通过求解方程(A-λB)ν=0,得到det(A-λB)=0(其中det即行列式)构成形如A-λB的矩阵的集合。其中特征值中存在的复数项,称为一个“丛(pencil)”。
若B可逆,则原关系式可以写作,也即标准的特征值问题。当B为非可逆矩阵(无法进行逆变换)时,广义特征值问题应该以其原始表述来求解。
如果A和B是实对称矩阵,则特征值为实数。这在上面的第二种等价关系式表述中并不明显,因为A矩阵未必是对称的。数字凑得好不代表就有巧妙的解法
你如果故意要把解答也写得巧妙一点,那么这样写
A[2,2,1;-2,1,2;1,-2,2]=[2,2,1;-2,1,2;1,-2,2]diag{1,16,49}
至于怎么算出来的,你可以说目测或者显然,反正只要验算下来是对的就可以,特征值有唯一性。这种题就是先把方程完全写成一元三次方程,再带根试,-5到5,因为是正常做题,只要自己没做错的话肯定至少能试出一个根,然后就可以分解因式了,像这题就可以试出-4和5
其实一般的题3以内就能试出来。试的时候也不要死算,看奇偶啊,正负啊,个位数啊有时候就可以排除。; 前言: 刘嘉俊是一名从业不久的游戏策划,他在14周的时间里,从技术小白到能写600行代码。他的方法是,在日常工作之余,每周制作一个小游戏,通过这种方式来锻炼自己对游戏系统设计和开发过程的理解。以下为投稿原文,未经作者许可请勿转载。
我没有计算机背景或美术基础,但乘中国游戏行业大发展,却也幸运入行成为一名游戏策划。我希望在日常工作之余,用一个办法来锻炼自己对游戏系统设计和开发过程的理解。因此,我参加了 Coursera 上的几个课程,并且用课程提供的方便工具来实现设想中的功能。
这个方法我称之为「每周一游」,即每个星期快速开发一个游戏,连续进行数个星期。这是许多开发者们磨练自己想法和技巧的方式。
一开始的成果非常基本、非常简单,但到后面挑战等级逐渐上升,到最后已经能独立完成 600 行左右的程序。
接下来我就给各位看看我在这近四个月中的成果,以及我从中学习和体会到的内容。我尽量省略比较枯燥的实现细节,一来可以避免无聊,二来需要下功夫的东西还是亲手实践比较有帮助。如有兴趣可来我的微博交流。
第一周:包剪锤蜥史波克(Rock-paper-scissors-lizard-Spock)
Sheldon 喜欢的游戏。
电脑则会随机生成一个数字,转换成字符串。再根据双方数字,用 if-else 判断胜负即可。
对我来说这是自己亲手编写的第一个游戏。它虽然简单,但包含了一个游戏必须的全部要素:它有着固定的开始和结束,以及胜负的规则。
第二周:猜数字
在这个游戏中第一次引入全局变量的概念。初始化时,上下限以及允许你猜测的次数都是读取全局变量。这样一来,我们可以在游戏核心的方法之外,使用别的方法来修改全局变量,让玩家可以自己选择数字范围和猜测次数。游戏本身则依然是 if-elif-else 这样写成的。
这是我亲手编写的第一个可以由玩家调整游戏设置的游戏。
第三周:秒表游戏
这个游戏中涉及到为每个功能编写单独的方法。如玩家控制的按钮start()、stop()、reset();游戏本身时间前进的tick()等。同时,为了让时间正确地显示在屏幕上,还有一个将时间转化为「A:BC:D」这种形式的方法。
我们计时的方法是定义一个叫 time 的变量。由于这个游戏中最小的计时单位是 01 秒,所以每经过 100 毫秒我们就让这个数字 +1。与此同时,编写一个 format() 方法经过一系列计算将这个数字转化为分、秒和01秒,显示在屏幕上即可。判断玩家是否得分仍然使用 if-else 结构。
这是第一次涉及到玩家进行的复杂 *** 作,也是第一次认识到,在游戏画面的表象之下究竟应该有些什么机制在运行。
第四周:乒乓(Pong)
传说 Pong 是世界上第一个电子游戏。在那个游戏机只有滚轴 *** 作的年代,这个有着极简单画面的游戏启发了无限后来者。看着它在手下形成还有些小感动呢。
这个游戏也是我制作的第一个不模拟现实中的「逻辑」,而是模拟「物理」的游戏。它的核心部分是球的速度变化、板子的速度变化,以及球与边界和板子的碰撞。
为了让这个游戏不至于无限地进行下去,我让球的速度随着每一次板子碰撞上升。但上升的公式写成了指数函数,于是这球就啪啪啪越打越快每一回合很快就结束了。若改为对数函数,则会缓慢地趋近一个上限,令每一回合后期的双人对局非常紧张、充满变数。
这是我第一次体会到游戏的「手感」到底是怎么回事。每一次对参数的细微调整对手感带来的变化,可以让设计者与游戏本身有着更深刻的接触。这是在目前分工充分的网游公司的日常工作中体会不到的感觉。
除此之外,很快地你就能从一个简单原型中看出未来变化的可能。是否可以加入:
「球击打在板子的不同部位,会d向不同方向」
「当板子击球时,板子本身的速度会令球曲线飞出」
或者「连续击中球数次后玩家可以发出大招」等等诸如此类。想到这里,这个游戏能成为数十年游戏业的起点,也是有其道理的。
第五周: 记忆游戏
在这个游戏中,暂且用数字来代替扑克牌。我们用了一个 list (我有点搞不太清 list, array, tuple, set 几个词的中文翻译,不乱讲了……)来以 Boolean 值(True 和 False)记录每张牌是否翻开的状态。当设为翻开时,露出数字,否则在相应位置绘制一张牌背。
这个游戏的逻辑方面比较 tricky 的地方就是整个游戏实际上有三种状态,需要分别处理:
新游戏,一张牌都没翻开
翻开了(本回合内)第一张牌,等待翻开第二张
翻开了(本回合内)第二张牌,等待判断是否相同于是我使用一个叫做 state 的变量,分别以 0, 1, 2 代表三种状态。在核心方法中利用 state 的值来决定接下来要做什么。
第六周:21点(Blackjack)
这是个赌博游戏。简单来说规则是:庄家给自己和玩家各发(deal)一张暗牌、一张明牌,玩家决定是否继续加牌(hit);玩家加牌结束(stand)后庄家自行加牌,接着双方摊牌。拥有最高点数的玩家获胜,其点数必须等于或低于21点。
在编写这个游戏的过程中第一次引入了类(class)概念。因为在游戏中许多物件都会重复出现,使用类可以很方便地重复制造它们:
每一张牌是 Class Card;方法 get_suit() 可以获取它的花色;
方法 get_rank() 可以获取它的数字;
还有一个方法来把它绘制出来。
手牌是 Class Hand;方法 add_card() 可以在手牌中增加一张牌;
方法 get_value() 可以算出手牌的分数。
牌库则是 Class Deck。方法 shuffle() 可以洗牌库;
方法 deal_card() 用来发牌。
规定好这些基础方法以后,重发牌、加牌、摊牌都可以通过这些功能的组合来实现。例如开局就是洗牌库,向双方发牌;双方手牌加上两张发出来的牌。等等。
此外这个游戏还第一次涉及到怎样在画面上绘制固定的图形。整张牌表是一张大图,怎么样根据牌的值定位到对应的牌面也是要好好算一下。
第七周:小行星(Asteroid)
这回的游戏涉及的内容比以前多,除了控制小飞船打来打去之外,动画、音效、UI 等也都引入了游戏中。但每一部分的实现都可以通过之前尝试的小功能叠加实现。简单地了解游戏图像和声音到底怎么运作后,并无特别的困难。只是这一次我学着一个模块一个模块渐次开发和测试,一个功能调通无误,再进行下一个。
反而是在游戏设计方面,制作这个游戏的过程给我带来很多思考。在这个游戏中可供调整的变量太多了:飞船需要推进和旋转;但推进是给飞船一个向前的加速度,而飞船本身还会有向着其他方向的速度。宇宙空间中微小的摩擦力、和陨石撞击后受到的力,都要考虑并且编入游戏中。
这时你会发现,同样的一些参数,经过调整会让整个游戏变得彻底不同。这艘飞船到底是笨重、转向慢、射速慢、射程远的战列舰,还是轻盈、转向快、射速快、射程近的战斗机你要躲闪的是从一个方向袭来的流星群(陨石都从一边来,而且向一个方向阻力特别大),还是四面八方出现的乱石每一种选择,好像都挺好玩的……
到这时我才了解到一个游戏设计者脑中「指挥意图」清晰的重要性。你到底要做一个什么样的游戏,给玩家带来什么样的情感只有一个大概的「我要爽」是不够的:究竟是控制巨大战舰缓慢机动将将擦过一块流星的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)