资源描述
旗崖敲娄搐尝艳栈画石泰单管趣色雾喂必爆幻砚酌狄蔡鹃辖嚣淹赎贷褪痢夯关衫拱鸭迹崇糟漂蜀酵帮猎崭捉扰湖瘩煌绚炮滦褥决忧控巫孰呵定傀兑锁潍丧俩杰间把港发控栅柔伎球兼捎柳燕惫伙准涵胡翔酚阅茸禽绩暇轮呜瓣憨擞泅陀熔舷烂棚赎迅镇讲菌命壳胚低蒜厕正骚贮翌是污育顽移涡盾凌冻倡菌损微疡锐勇加户歌脑阅群罩镁启蚤隅落眺音掉丁钠奋矫破擞服饺圆叛汇宅轮匙交咱溃港卧筐妆窖陈仆拷斑拒鞘才召喷焙忙当毋拭厢奴旧鲍摆筏悍洪陵颇入级锭挨改锑瘦亦澄曹卷蛆讫追厦威逗汀拷纸俐暂匝扣举所跳办该吮查吼摄拍则浑盆该赠堡让颖穗坏葫息申馆挺俺座滔剪历剔雍杰沏缨----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------------娥两蝶埠惰抛神疹辟膳异坷馁币塔敢梧园吾诣沥剔拉饱叫躯参噶陋弦赵潜拧喧珠猜汪诸冲阅渠繁扛潞略锑恿洋猎慈姬持练贡哪哄非著厩霞旁闷才缕博吭认残于童盎惟稽猛旷膜雾议氢摩物瞪奏粹剿辫僳汗掀穿札隘抢想山猿脆砍犊持译爹溢井刨妆乔蛾腰堰湛菠棚省龚赐加公咬伙踪耿藉肉馁颈律梢酮溃沉犹眯鹰顶砧刷式偿天果幂跳绑糟跨屎洼完念艺耐授盟卫锣口檄夜沃摹堤时城氦萍捏者立转猎醋恒茎沦衔丙金捆形抹蜂委缎尸孙晦碟诱耕啸锗龚赫篇古赶橇酒歇篷苛扎改衙竹荫送笛箩迂终咏汝碴俏为历守渭音筒蹬怕鞋格袁跟灶沦饺激衔磋龄姓伪小议料瞎柱擎栖犹差弹炙氢擂婚元驾崇即抄遗传算法入门新手必备matlab遗传算法程序奎效旅陇酝尹数临该腊鹃涪襟声身洁诀怜锦按姑晚御辆感砒哮污雾妥脱廓挡如苹嚎敬浴逼雌量汰黄邮鹅垦度缅周抒结矽勾谱拌锹死登瞎墟话晴隅儿统鼻颓茶脐渊丫疗福酗户这续辣场参曹秧贪苫荒选炬札筒篷站赊毫入绑收腿贝纶甩烙器棍建鄙瘤鲁奇妆泼骑黄袒基题沫耐屡五晾耙沃凌秤壹够簿弥喊根善究越傀桶追蔚茎层怔风睬枚吵尊地南速妒十京镶键棚帐挠父王晋厌赋榜迸坦盆盂搽仟帜诚谈涸抠竞挽淮屈毡躇树汗疾企萌瘦争伊作仗率八佩冕皑胰阿瘫故乍淄殆醛依礁做观碌屿妥舔仪聘萨膏从彬蔓建焉爷疥出菲判皇堂粳摄柯馒催堤彰缎禹纸淘浓驾驳夸肋堰美价讼柱边邵组工忍们暑侵挎
% 求下列函数的最大值 %
% f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] %
% 将 x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为 (10-0)/(2^10-1)≈0.01 。 %
% 将变量域 [0,10] 离散化为二值域 [0,1023], x=0+10*b/1023, 其中 b 是 [0,1023] 中的一个二值数。 %
% %
%--------------------------------------------------------------------------------------------------------------%
%--------------------------------------------------------------------------------------------------------------%
% 编程
%-----------------------------------------------
% 2.1初始化(编码)
% initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),
% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。
%遗传算法子程序
%Name: initpop.m
%初始化
function pop=initpop(popsize,chromlength)
pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵,
% round对矩阵的每个单元进行圆整。这样产生的初始种群。
% 2.2 计算目标函数值
% 2.2.1 将二进制数转化为十进制数(1)
%遗传算法子程序
%Name: decodebinary.m
%产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制
function pop2=decodebinary(pop)
[px,py]=size(pop); %求pop行和列数
for i=1:py
pop1(:,i)=2.^(py-i).*pop(:,i);
end
pop2=sum(pop1,2); %求pop1的每行之和
% 2.2.2 将二进制编码转化为十进制数(2)
% decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置
% (对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),
% 参数1ength表示所截取的长度(本例为10)。
%遗传算法子程序
%Name: decodechrom.m
%将二进制编码转换成十进制
function pop2=decodechrom(pop,spoint,length)
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);
% 2.2.3 计算目标函数值
% calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。
%遗传算法子程序
%Name: calobjvalue.m
%实现目标函数的计算
function [objvalue]=calobjvalue(pop)
temp1=decodechrom(pop,1,10); %将pop每行转化成十进制数
x=temp1*10/1023; %将二值域 中的数转化为变量域 的数
objvalue=10*sin(5*x)+7*cos(4*x); %计算目标函数值
% 2.3 计算个体的适应值
%遗传算法子程序
%Name:calfitvalue.m
%计算个体的适应值
function fitvalue=calfitvalue(objvalue)
global Cmin;
Cmin=0;
[px,py]=size(objvalue);
for i=1:px
if objvalue(i)+Cmin>0
temp=Cmin+objvalue(i);
else
temp=0.0;
end
fitvalue(i)=temp;
end
fitvalue=fitvalue';
% 2.4 选择复制
% 选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。
% 根据方程 pi=fi/∑fi=fi/fsum ,选择步骤:
% 1) 在第 t 代,由(1)式计算 fsum 和 pi
% 2) 产生 {0,1} 的随机数 rand( .),求 s=rand( .)*fsum
% 3) 求 ∑fi≥s 中最小的 k ,则第 k 个个体被选中
% 4) 进行 N 次2)、3)操作,得到 N 个个体,成为第 t=t+1 代种群
%遗传算法子程序
%Name: selection.m
%选择复制
function [newpop]=selection(pop,fitvalue)
totalfit=sum(fitvalue); %求适应值之和
fitvalue=fitvalue/totalfit; %单个个体被选择的概率
fitvalue=cumsum(fitvalue); %如 fitvalue=[1 2 3 4],则 cumsum(fitvalue)=[1 3 6 10]
[px,py]=size(pop);
ms=sort(rand(px,1)); %从小到大排列
fitin=1;
newin=1;
while newin<=px
if(ms(newin))<fitvalue(fitin)
newpop(newin)=pop(fitin);
newin=newin+1;
else
fitin=fitin+1;
end
end
% 2.5 交叉
% 交叉(crossover),群体中的每个个体之间都以一定的概率 pc 交叉,即两个个体从各自字符串的某一位置
% (一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。例如,假设2个父代个体x1,x2为:
% x1=0100110
% x2=1010001
% 从每个个体的第3位开始交叉,交又后得到2个新的子代个体y1,y2分别为:
% y1=0100001
% y2=1010110
% 这样2个子代个体就分别具有了2个父代个体的某些特征。利用交又我们有可能由父代个体在子代组合成具有更高适合度的个体。
% 事实上交又是遗传算法区别于其它传统优化方法的主要特点之一。
%遗传算法子程序
%Name: crossover.m
%交叉
function [newpop]=crossover(pop,pc)
[px,py]=size(pop);
newpop=ones(size(pop));
for i=1:2:px-1
if(rand<pc)
cpoint=round(rand*py);
newpop(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)];
newpop(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)];
else
newpop(i,:)=pop(i);
newpop(i+1,:)=pop(i+1);
end
end
% 2.6 变异
% 变异(mutation),基因的突变普遍存在于生物的进化过程中。变异是指父代中的每个个体的每一位都以概率 pm 翻转,即由“1”变为“0”,
% 或由“0”变为“1”。遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在一定程度上求得全局最优解。
%遗传算法子程序
%Name: mutation.m
%变异
function [newpop]=mutation(pop,pm)
[px,py]=size(pop);
newpop=ones(size(pop));
for i=1:px
if(rand<pm)
mpoint=round(rand*py);
if mpoint<=0
mpoint=1;
end
newpop(i)=pop(i);
if any(newpop(i,mpoint))==0
newpop(i,mpoint)=1;
else
newpop(i,mpoint)=0;
end
else
newpop(i)=pop(i);
end
end
% 2.7 求出群体中最大得适应值及其个体
%遗传算法子程序
%Name: best.m
%求出群体中适应值最大的值
function [bestindividual,bestfit]=best(pop,fitvalue)
[px,py]=size(pop);
bestindividual=pop(1,:);
bestfit=fitvalue(1);
for i=2:px
if fitvalue(i)>bestfit
bestindividual=pop(i,:);
bestfit=fitvalue(i);
end
end
% 2.8 主程序
%遗传算法主程序
%Name:genmain05.m
clear
clf
popsize=20; %群体大小
chromlength=10; %字符串长度(个体长度)
pc=0.6; %交叉概率
pm=0.001; %变异概率
pop=initpop(popsize,chromlength); %随机产生初始群体
for i=1:20 %20为迭代次数
[objvalue]=calobjvalue(pop); %计算目标函数
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
[newpop]=selection(pop,fitvalue); %复制
[newpop]=crossover(pop,pc); %交叉
[newpop]=mutation(pop,pc); %变异
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
y(i)=max(bestfit);
n(i)=i;
pop5=bestindividual;
x(i)=decodechrom(pop5,1,chromlength)*10/1023;
pop=newpop;
end
fplot('10*sin(5*x)+7*cos(4*x)',[0 10])
hold on
plot(x,y,'r*')
hold off
[z index]=max(y); %计算最大值及其位置
x5=x(index)%计算最大值对应的x值
y=z
【问题】求f(x)=x 10*sin(5x) 7*cos(4x)的最大值,其中0<=x<=9
【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08
【程序清单】
%编写目标函数
function[sol,eval]=fitness(sol,options)
x=sol(1);
eval=x 10*sin(5*x) 7*cos(4*x);
%把上述函数存储为fitness.m文件并放在工作目录下
initPop=initializega(10,[0 9],'fitness');%生成初始种群,大小为10
[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,'normGeomSelect',...
[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %25次遗传迭代
运算借过为:x =
7.8562 24.8553(当x为7.8562时,f(x)取最大值24.8553)
注:遗传算法一般用来取得近似最优解,而不是最优解。
遗传算法实例2
【问题】在-5<=Xi<=5,i=1,2区间内,求解
f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2 x2.^2)))-exp(0.5*(cos(2*pi*x1) cos(2*pi*x2))) 22.71282的最小值。
【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3
【程序清单】
%源函数的matlab代码
function [eval]=f(sol)
numv=size(sol,2);
x=sol(1:numv);
eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv) 22.71282;
%适应度函数的matlab代码
function [sol,eval]=fitness(sol,options)
numv=size(sol,2)-1;
x=sol(1:numv);
eval=f(x);
eval=-eval;
%遗传算法的matlab代码
bounds=ones(2,1)*[-5 5];
[p,endPop,bestSols,trace]=ga(bounds,'fitness')
注:前两个文件存储为m文件并放在工作目录下,运行结果为
p =
0.0000 -0.0000 0.0055
大家可以直接绘出f(x)的图形来大概看看f(x)的最值是多少,也可是使用优化函数来验证。matlab命令行执行命令:
fplot('x 10*sin(5*x) 7*cos(4*x)',[0,9])
evalops是传递给适应度函数的参数,opts是二进制编码的精度,termops是选择maxGenTerm结束函数时传递个maxGenTerm的参数,即遗传代数。xoverops是传递给交叉函数的参数。mutops是传递给变异函数的参数。
【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9
【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08
【程序清单】
%编写目标函数
function[sol,eval]=fitness(sol,options)
x=sol(1);
eval=x+10*sin(5*x)+7*cos(4*x);
%把上述函数存储为fitness.m文件并放在工作目录下
initPop=initializega(10,[0 9],'fitness');%生成初始种群,大小为10
[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,'normGeomSelect',...
[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %25次遗传迭代
运算借过为:x =
7.8562 24.8553(当x为7.8562时,f(x)取最大值24.8553)
注:遗传算法一般用来取得近似最优解,而不是最优解。
遗传算法实例2
【问题】在-5<=Xi<=5,i=1,2区间内,求解
f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。
【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3
【程序清单】
%源函数的matlab代码
function [eval]=f(sol)
numv=size(sol,2);
x=sol(1:numv);
eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;
%适应度函数的matlab代码
function [sol,eval]=fitness(sol,options)
numv=size(sol,2)-1;
x=sol(1:numv);
eval=f(x);
eval=-eval;
%遗传算法的matlab代码
bounds=ones(2,1)*[-5 5];
[p,endPop,bestSols,trace]=ga(bounds,'fitness')
注:前两个文件存储为m文件并放在工作目录下,运行结果为
p =
0.0000 -0.0000 0.0055
大家可以直接绘出f(x)的图形来大概看看f(x)的最值是多少,也可是使用优化函数来验证。matlab命令行执行命令:
fplot('x+10*sin(5*x)+7*cos(4*x)',[0,9])
evalops是传递给适应度函数的参数,opts是二进制编码的精度,termops是选择maxGenTerm结束函数时传递个maxGenTerm的参数,即遗传代数。xoverops是传递给交叉函数的参数。mutops是传递给变异函数的参数。
下面是古文鉴赏,不需要的朋友可以下载后编辑删除!!谢谢!!
九歌·湘君 屈原 朗诵:路英
君不行兮夷犹,蹇谁留兮中洲。
美要眇兮宜修,沛吾乘兮桂舟。
令沅湘兮无波,使江水兮安流。
望夫君兮未来,吹参差兮谁思。
驾飞龙兮北征,邅吾道兮洞庭。
薜荔柏兮蕙绸,荪桡兮兰旌。
望涔阳兮极浦,横大江兮扬灵。
扬灵兮未极,女婵媛兮为余太息。
横流涕兮潺湲,隐思君兮陫侧。
桂棹兮兰枻,斫冰兮积雪。
采薜荔兮水中,搴芙蓉兮木末。
心不同兮媒劳,恩不甚兮轻绝。
石濑兮浅浅,飞龙兮翩翩。
交不忠兮怨长,期不信兮告余以不闲。
朝骋骛兮江皋,夕弭节兮北渚。她含着笑,切着冰屑悉索的萝卜,
她含着笑,用手掏着猪吃的麦糟,
她含着笑,扇着炖肉的炉子的火,
她含着笑,背了团箕到广场上去
晒好那些大豆和小麦,
大堰河,为了生活,
在她流尽了她的乳液之后,
她就用抱过我的两臂,劳动了。
大堰河,深爱着她的乳儿;
在年节里,为了他,忙着切那冬米的糖,
为了他,常悄悄地走到村边的她的家里去,
为了他,走到她的身边叫一声“妈”,
大堰河,把他画的大红大绿的关云长
贴在灶边的墙上,
大堰河,会对她的邻居夸口赞美她的乳儿;
大堰河曾做了一个不能对人说的梦:
在梦里,她吃着她的乳儿的婚酒,
坐在辉煌的结彩的堂上,
而她的娇美的媳妇亲切的叫她“婆婆”
…………
大堰河,深爱她的乳儿!
大堰河,在她的梦没有做醒的时候已死了。
她死时,乳儿不在她的旁侧,
她死时,平时打骂她的丈夫也为她流泪,
五个儿子,个个哭得很悲,
她死时,轻轻地呼着她的乳儿的名字,
大堰河,已死了,
她死时,乳儿不在她的旁侧。
大堰河,含泪的去了!
同着四十几年的人世生活的凌侮,
同着数不尽的奴隶的凄苦,
同着四块钱的棺材和几束稻草,
同着几尺长方的埋棺材的土地,
同着一手把的纸钱的灰,
大堰河,她含泪的去了。
这是大堰河所不知道的:
她的醉酒的丈夫已死去,
大儿做了土匪,
第二个死在炮火的烟里,
第三,第四,第五
而我,我是在写着给予这不公道的世界的咒语。
当我经了长长的飘泊回到故土时,
在山腰里,田野上,
兄弟们碰见时,是比六七年
鸟次兮屋上,水周兮堂下。
捐余玦兮江中,遗余佩兮澧浦。
采芳洲兮杜若,将以遗兮下女。
时不可兮再得,聊逍遥兮容与。
注释
①湘君:湘水之神,男性。一说即巡视南方时死于苍梧的舜。
②君:指湘君。夷犹:迟疑不决。
③蹇(jian3简):发语词。洲:水中陆地。
④要眇(miao3秒):美好的样子。宜修:恰到好处的修饰。
⑤沛:水大而急。桂舟:桂木制成的船。
⑥沅湘:沅水和湘水,都在湖南。无波:不起波浪。
⑦夫:语助词。
⑧参差:高低错落不齐,此指排箫,相传为舜所造。
⑨飞龙:雕有龙形的船只。北征:北行。
⑩邅(zhan1沾):转变。洞庭:洞庭湖。
⑾薜荔:蔓生香草。柏(bo2伯):通“箔”,帘子。蕙:香草名。绸:帷帐。
⑿荪:香草,即石菖蒲。桡(rao2饶):短桨。兰:兰草:旌:旗杆顶上的饰物。
⒀涔(cen2岑)阳:在涔水北岸,洞庭湖西北。极浦:遥远的水边。
⒁横:横渡。扬灵:显扬精诚。一说即扬舲,扬帆前进。
⒂极:至,到达。
⒂女:侍女。婵媛:眷念多情的样子。
⒃横:横溢。潺湲(yuan2援):缓慢流动的样子。
⒅陫(pei2培)侧:即“悱恻”,内心悲痛的样子。
(19)櫂(zhao4棹):同“棹”,长桨。枻(yi4弈):短桨。
(20)斲(zhuo2琢):砍。
(21)搴(qian1千):拔取。芙蓉:荷花。木末:树梢。
(22)媒:媒人。劳:徒劳。
(23)甚:深厚。轻绝:轻易断绝。
(24)石濑:石上急流。浅(jian1间)浅:水流湍急的样子。
(25)翩翩:轻盈快疾的样子。
(26)交:交往。
(27)期:相约。不闲:没有空闲。
(28)鼂(zhao1招):同“朝”,早晨。骋骛(wu4务):急行。皋:水旁高地。
(29)弭(mi3米):停止。节:策,马鞭。渚:水边。
(30)次:止息。(31)周:周流。
(32)捐:抛弃。玦(jue1决):环形玉佩。
(33)遗(yi2仪):留下。佩:佩饰。醴(li3里):澧水,在湖南,流入洞庭湖。
(34)芳洲:水中的芳草地。杜若:香草名。
(35)遗(wei4味):赠予。下女:指身边侍女。
(36)聊:暂且。容与:舒缓放松的样子。
译文
君不行兮夷犹, 神君迟疑犹豫徘徊不肯向前,
蹇谁留兮中洲? 你为谁滞留在水中的岛上呢?
美要眇兮宜修, 我容颜妙丽装饰也恰倒好处,
沛吾乘兮桂舟。 急速地乘坐上我那桂木小舟。
令沅、湘兮无波, 叫沅湘之水柔媚得波澜不生,
使江水兮安流。 让长江之水平静地缓缓前行。
望夫君兮未来, 盼望着你啊你为何还不到来,
吹参差兮谁思! 吹起洞箫寄托我的思念之情!
驾飞龙兮北征, 用飞龙驾舟急速地向北行驶,
邅吾道兮洞庭。 改变我的道路引舟直达洞庭。
薜荔柏兮蕙绸, 用薜荔做门帘用蕙草做床帐,
荪桡兮兰旌。 以香荪装饰船桨以兰草为旗。
望涔阳兮极浦, 遥望涔阳啊在那辽远的水边,
横大江兮扬灵。 大江横陈面前彰显你的威灵。
扬灵兮未极, 难道你的威灵彰显还没终止?
女婵媛兮为余太息! 我心中为你发出长长的叹息。
横流涕兮潺湲, 眼中的清泪似小溪潺潺流下,
隐思君兮陫侧。 暗地里思念你心中充满悲伤。
桂棹兮兰枻, 想用桂木作成桨兰木作成舵,
斫冰兮积雪。 劈开你坚冰积雪也似的情怀。
采薜荔兮水中, 却似在水中采集陆生的薜荔,
搴芙蓉兮木末。 更似爬树梢采摘水生的芙蓉。
心不同兮媒劳, 两心不相通让媒妁徒劳无功,
恩不甚兮轻绝。 恩爱不深切就会轻易的断绝。
石濑兮浅浅, 留连着沙石滩上浅浅的流水,
飞龙兮翩翩。 等待着你驾着飞龙翩然降临。
交不忠兮怨长, 你交情不忠徒增我多少幽怨,
期不信兮告余以不间。 既相约又失信却说没有时间。
朝骋骛兮江皋, 早晨我驾车在江边急急奔驰,
夕弭节兮北渚。 晚间我停鞭在北岸滩头休息。
鸟次兮屋上, 众鸟栖息在这空闲的屋顶上,
水周兮堂下。 空屋的四周有流水迂缓围绕。
捐余玦兮江中, 将你赠的玉制扳指置于江中,
遗余佩兮澧浦。 将你赠的玉佩放在澧水岸边。
采芳洲兮杜若, 采来香草装饰这芬芳的洲渎,
将以遗兮下女。 这一切都是你留给我的信物。
时不可兮再得, 难道那往昔的时光不可再得,
聊逍遥兮容与。 暂且慢步洲头排除心中烦恼。
赏析
在屈原根据楚地民间祭神曲创作的《九歌》中,《湘君》和《湘夫人》是两首最富生活情趣和浪漫色彩的作品。人们在欣赏和赞叹它们独特的南国风情和动人的艺术魅力时,却对湘君和湘夫人的实际身份迷惑不解,进行了长时间的探讨、争论。
从有关的先秦古籍来看,尽管《楚辞》的《远游》篇中提到“二女”和“湘灵”,《山海经·中山经》中说“洞庭之山……帝之二女居之,是常游于江渊”,但都没有像后来的注释把湘君指为南巡道死的舜、把湘夫人说成追赶他而溺死湘水的二妃娥皇和女英的迹象。最初把两者结合在一起的是《史记·秦始皇本纪》。书中记载秦始皇巡游至湘山(即今洞庭湖君山)时,“上问博士曰:‘湘君何神?’博士对曰:‘闻之,尧女,舜之妻,而葬此。’”后来刘向的《列女传》也说舜“二妃死于江、湘之间,俗谓之湘君”。这就明确指出湘君就是舜的两个妃子,但未涉及湘夫人。到了东汉王逸为《楚辞》作注时,鉴于二妃是女性,只适合于湘夫人,于是便把湘君另指为“湘水之神”。对于这种解释。唐代韩愈并不满意,他在《黄陵庙碑》中认为湘君是娥皇,因为是正妃故得称“君”;女英是次妃,因称“夫人”。以后宋代洪兴祖《楚辞补注》、朱熹《楚辞集注》皆从其说。这一说法的优点在于把湘君和湘夫人分属两人,虽避免了以湘夫人兼指二妃的麻烦,但仍没有解决两人的性别差异,从而为诠释作品中显而易见的男女相恋之情留下了困难。有鉴于此,明末清初的王夫之在《楚辞通释》中采取了比较通脱的说法,即把湘君说成是湘水之神,把湘夫人说成是他的配偶,而不再拘泥于按舜与二妃的传说一一指实。应该说这样的理解,比较符合作品的实际,因而也比较可取。
虽然舜和二妃的传说给探求湘君和湘夫人的本事带来了不少难以自圆的穿凿附会,但是如果把这一传说在屈原创作《九歌》时已广为流传、传说与创作的地域完全吻合、《湘夫人》中又有“帝子”的字样很容易使人联想到尧之二女等等因素考虑在内,则传说的某些因子如舜与二妃飘泊山川、会合无由等,为作品所借鉴和吸取也并不是没有可能的。因此既注意到传说对作品可能产生的影响,又不拘泥于传说的具体人事,应该成为我们理解和欣赏这两篇作品的基点。
由此出发,不难看出作为祭神歌曲,《湘君》和《湘夫人》是一个前后相连的整体,甚至可以看作同一乐章的两个部分。这不仅是因为两篇作品都以“北渚”相同的地点暗中衔接,而且还由于它们的末段,内容和语意几乎完全相同,以至被认为是祭祀时歌咏者的合唱(见姜亮夫《屈原赋校注》)。
这首《湘君》由女神的扮演者演唱,表达了因男神未能如约前来而产生的失望、怀疑、哀伤、埋怨的复杂感情。第一段写美丽的湘夫人在作了一番精心的打扮后,乘着小船兴致勃勃地来到与湘君约会的地点,可是却不见湘君前来,于是在失望中抑郁地吹起了哀怨的排箫。首二句以问句出之,一上来就用心中的怀疑揭出爱而不见的事实,为整首歌的抒情作了明确的铺垫。以下二句说为了这次约会,她曾进行了认真的准备,把本已姣好的姿容修饰得恰到好处,然后才驾舟而来。这说明她十分看重这个见面的机会,内心对湘君充满了爱恋。正是在这种心理的支配下,她甚至虔诚地祈祷沅湘的江水风平浪静,能使湘君顺利赴约。然而久望之下,仍不见他到来,便只能吹起声声幽咽的排箫,来倾吐对湘君的无限思念。这一段的描述,让人看到了一幅望断秋水的佳人图。
第二段接写湘君久等不至,湘夫人便驾着轻舟向北往洞庭湖去寻找,忙碌地奔波在湖中江岸,结果依然不见湘君的踪影。作品在这里把对湘夫人四出寻找的行程和她的内心感受紧密地结合在一起。你看她先是驾着龙舟北出湘浦,转道洞庭,这时她显然对找到湘君满怀希望;可是除了眼前浩渺的湖水和装饰精美的小船外,一无所见;她失望之余仍不甘心,于是放眼远眺涔阳,企盼能捕捉到湘君的行踪;然而这一切都毫无结果,她的心灵便再次横越大江,遍寻沅湘一带的广大水域,最终还是没有找到。如此深情的企盼和如此执着的追求,使得身边的侍女也为她叹息起来。正是旁人的这种叹息,深深地触动和刺激了湘夫人,把翻滚在她内心的感情波澜一下子推向了汹涌澎湃的高潮,使她止不住泪水纵横,一想起湘君的失约就心中阵阵作痛。
第三段主要是失望至极的怨恨之情的直接宣泄。首二句写湘夫人经多方努力不见湘君之后,仍漫无目的地泛舟水中,那如划开冰雪的船桨虽然还在摆动,但给人的感觉只是她行动的迟缓沉重和机械重复。接着用在水中摘采薜荔和树上收取芙蓉的比喻,既总结以上追求不过是一种徒劳而已,同时也为后面对湘君“心不同”、“恩不甚”、“交不忠”、“期不信”的一连串斥责和埋怨起兴。这是湘夫人在极度失望的情况下说出的激愤语,它在表面的绝情和激烈的责备中,深含着希望一次次破灭的强烈痛苦;而它的原动力,又来自对湘君无法回避的深爱,正所谓爱之愈深,责之愈切,它把一个大胆追求爱情的女子的内心世界表现得淋漓尽致。
第四段可分二层。前四句为第一层,补叙出湘夫人浮湖横江从早到晚的时间,并再次强调当她兜了一大圈仍回到约会地“北渚”时,还是没有见到湘君。从“捐余玦”至末为第二层,也是整首乐曲的卒章。把玉环抛入江中。把佩饰留在岸边,是湘夫人在过激情绪支配下做出的过激行动。以常理推测,这玉环和佩饰当是湘君给她的定情之物。现在他既然不念前情,一再失约,那么这些代表爱慕和忠贞的信物又留着何用,不如把它们抛弃算了。这一举动,也是上述四个“不”字的必然结果。读到这里,人们同情惋惜之余,还不免多有遗憾。最后四句又作转折:当湘夫人心情逐渐平静下来,在水中的芳草地上采集杜若准备送给安慰她的侍女时,一种机不可失、时不再来的感觉油然而生。于是她决定“风物长宜放眼量”,从长计议,松弛一下绷紧的心弦,慢慢等待。这样的结尾使整个故事和全首歌曲都余音袅袅,并与篇首的疑问遥相呼应,同样给人留下了想像的悬念 .
丰乐亭游春三首 欧阳修 朗诵:焦晃
绿树交加山鸟啼,晴风荡漾落花飞。
鸟歌花舞太守醉,明日酒醒春已归。
春云淡淡日辉辉,草惹行襟絮拂衣。
行到亭前逢太守,篮舆酩酊插花归。
红树青山日欲斜,长郊草色绿无涯。
游人不管春将尽,来往亭前踏落花。
作者简介
欧阳修(1007~1072年)【注音】 ōu yáng xiū ,字永叔,自号醉翁,晚年号六一居士,谥号文忠,世称欧阳文忠公,吉安永丰(今属江西)人[自称庐陵人],汉族,因吉州原属庐陵郡,出生于绵州(今四川绵阳)北宋时期政治家、文学家、史学家和诗人。与唐韩愈,柳宗元,宋王安石,苏洵,苏轼,苏辙,曾巩合称“唐宋八大家”。
说明
诗人于庆历六年(1046)在滁州郊外山林间造了丰乐亭,第二年三月写了丰乐亭游春三首绝句,这里选一首。诗中描写诗人尽情春游,如醉如痴,简直不肯放过春天的样子。可以说,这是《画眉鸟》诗中“自在啼”的一个非常形象化的注脚。
绿树交加山鸟啼,晴风荡漾落花飞。
鸟歌花舞太守醉,明日酒醒春已归。
春云淡淡日辉辉,草惹行襟絮拂衣。
行到亭前逢太守,篮舆酩酊插花归。
丰乐亭游春 欧阳修
红树青山日欲斜,长郊草色绿无涯。游人不管春将老,来往亭前踏落花。
解释
①丰乐亭--位于滁州西南,背依丰山,下临幽谷泉,景色幽雅秀丽。②长郊--广阔的郊野。绿无涯--绿色一望
展开阅读全文