matlab四合一(dream)(5)

2019-04-22 19:42

[p S mu]=polyfit(x,y,5);

[m delta]=polyval(p,x,S,mu); plot(x,m,'m','linewidth',2); hold off; xlabel('x'); ylabel('y');

title('Plynomialfits to randomdata');

legend('Original','Order 1','Order 2','Order 3','Order 4','Order 5',4); 5.神经脉冲传导过程Hodgkin-Huxley方程仿真

你需要先写一个ODE方程去描述神经脉冲。方程的描述方式我们参考了Hodgkin和Huxley1952年提出的模型。他们也因此获得了Noble奖。这个模型的思路是,神经膜有对电压敏感的闸门,随着膜电压的改变,这个闸门会打开或者关闭以形成离子通道。一旦闸门打开,离子就可以在他们之间流动从而影响膜电压。这个模型是非线性的,我们只能使用数值的方法求解。这个题目稍复杂,耐心按照下面一步步进行:

A. 首先下载HH.zip压缩包,解压后发现里面有6个m文件,分别是alphah.m,alpham.m,

alphan.m,betan.m,betam.m和betah.m。这些方程用来描述了闸门开转台alpha(V)和闭状态beta(V)与电压的关系。h,m,n是三个闸门。 B. 接下来按照下面的式子写ODE方程。

dn/dt?(1?n)?n(V)?n?n(V)dm/dt?(1?m)?m(V)?m?m(V)dh/dt?(1?h)?h(V)?h?h(V)dV/dt??1(Gkn4(V?Ek)?GNam3h(V?ENa)?GL(V?EL))C

其中C是膜电容,G是电导系数,E是K,Na,L通道的逆转电位。

C?1Gk?36GNa?120令,GL?0.3

Ek??72ENa?55EL??49.4有了这些常量以及上述微分方程,我们就可以写ODE方程了。 C. 编写一个脚本叫HH.m,我们使用ode45函数来求解微分方程,并且画出膜电压曲线。

首先我们定义时间尺度为0-20ms,我们的方程单位其实就是ms,初始状态为n=0.5;m=0.5,h=0.5;V=-60。计算结果应该为一个21×4的矩阵,其中每一列就是对应我们解出的n(t),m(t),h(t),和V(t)。我们这里绘制V(t)曲线,查看电压变化变至平稳的状态。参考图如下:

Approaching Steady State4020Transmembrane Voltage (mV)0-20-40-60-80024681012Time(ms)14161820

D. 更进一步,我们来考察一个神经元放电的情况,神经元只有在膜电压超过一定的电压阈

值才被认为有活动,为了找到这些阈值,我们求解这个模型10次,每次都用计算得到的结果作为下一次的初始解,不同的是,V在每次求解时都在上一次基础上加1,2,3,4,。。。10.求解完成后,我们找到每次求解结果的最大值,如果最大值大于0,则绘制为红色曲线,如果小于0则绘制为黑色。那么我们就可以从曲线的颜色上判断一个神经元是否发放了。参考图如下:

Threshold Behavior6040Transmembrane Voltage (mV)200-20-40-60-80024681012Time(ms)14161820

function dy=HHODEfun(t,y) %n,m,h,v C=1; Gk=36; Gna=120; Gl=0.3; Ek=-72; Ena=55; El=-49.4;

an=alphan(y(4)); bn=betan(y(4)); am=alpham(y(4)); bm=betam(y(4)); ah=alphah(y(4)); bh=betah(y(4)); dy=zeros(4,1);

dy(1)=(1-y(1))*an-y(1)*bn; dy(2)=(1-y(2))*am-y(2)*bm; dy(3)=(1-y(3))*ah-y(3)*bh;

dy(4)=-1/C*(Gk*y(1)^4*(y(4)-Ek)+Gna*y(2)^3*y(3)*(y(4)-Ena)+Gl*(y(4)-El));

figure(1)

[t,x]=ode45(@HHODEfun,0:0.001:20,[0.5 0.5 0.5 -60]);

plot(t,x(:,4))

xlabel('Time(ms)');

ylabel('Transmembrane Voltage (mV)'); title('Approaching Steady State');

figure(2) for i=1:10

[t,x]=ode45(@HHODEfun,0:0.001:20,[x(end,1) x(end,2) x(end,3) x(end,4)+i]); if max(x(:,4))>0

plot(t,x(:,4),'r','lineWidth',2); else

plot(t,x(:,4),'k','lineWidth',2); end hold on; end

xlabel('Time(ms)');

ylabel('Transmembrane Voltage (mV)'); title('Threshold Behavior');

6.Julia分形集:

这个练习我们试着产生Julia sets,关于Julia sets,对Julia sets感兴趣的同学可以参看http://en.wikipedia.org/wiki/Julia_Sets。其定义,给定两个复数c和z0,那么定义如下的递归:

2zn?zn?1?c,这个动态系统我们成为二次映射。给定c和z0的话,上述的递归方程会

给出一系列的z(k)值。不同的c和z0产生的结果当然是不一样的。这实际上也可以看作是一个混沌系统。我们下来来做这个系统,并且采用imagesc绘制看看这个美丽的分形图案。 A. 声明一个函数,julia(zMax,c,k,v); B. 其中c是上述递归方程中的c,k给出了迭代次数,v指定了点数的规模,zMax为

了定义值的范围; C. 为了确定递归不会陷入无限循环,可以证明当z的模不大于2时,可以避免死循环,

因此在函数中应该声明一个常量为2;

D. 使用linspace,ones生成变量A,A的尺度为v×v的矩阵,其中的值在-zMax和

zMax之间。注意A是一个复数矩阵,复数的实部和虚部都应在-zMax和zMax之间;

E. 开始迭代,次数为k,在迭代中,每次根据上述递归方程得到新的A,如果A的模

不大于2,则保留,如此反复循环,将所有得到的新的模不大于2的A叠加在一起,最后是叠加完毕的v×v的矩阵。

F. 使用imagesc(0.1×atan(叠加后的矩阵))来显示你的结果,为了好看,可以另外

输入axis xy。

参考图如下:julia(1,-0.297491+i*0.641051,100,500)

5004504003503002502001501005050100150200250300350400450500

另,julia(.35,-.297491+i*0.641051,100,250),c保持不变,点数变少,值范围变小,如下图:

2502001501005050100150200250

M=julia(1,-0.297491+i*0.641051,100,500); figure(1);


matlab四合一(dream)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年郑州市初中毕业年级适应性测试

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: