www.gusucode.com > matlab编程以gui界面实现不同忆阻模型源码程序 > matlab编程以gui界面实现不同忆阻模型源码程序/Run_Simulation_Memristor.m
% This work is based on two papers as follows: % [1] Dmitri B. Strukov, Gregory S. Snider, Duncan R. Steward and R. % Stanley Williams, "The missing memristor found", Nature, vol.453, % pp.80-83, 2008 % [2]Yogesh N Joglekar and Stephen J Wolf, "The elusive memristor: properties of basic electrical circuits", European Journal of Physics, vol. 30, pp. 661-675, 2009. % Following is predefined, and you can change them and find the validation % according to those given in above papers % To run the simulation, you only need to click on Run after choosing % values of parameters % If you have any comment on this, please send directly to Thang Manh Hoang at % hmthang01@yahoo.com, http://fet.hut.edu.vn/SIP-LAB % v=v_0 sin(omega_0t) % D = 10nm = 10e-9 m % Muy_D = 1e-10 cm2s-1V-1 = 1e-14 m-2s-1V-1 % i_0 = v_0/R_ON=10 mA = 10^-2 A ===> R_ON = 100 ohm % R_OFF/R_ON = 160 ==> R_OFF = 16e+3 ohm % w_0/D = 0.5 ==> w_0 = 5nm = 5e-9 m % The voltage source applied on the Memristor v_0=1; bias=0; omega=1; % frequency (rad/s) phase=0; Nuy=-1; Muy_D=1e-14; R_OFF=16e+3; % resistance of undoped region R_ON=100; D = 10e-9; % Width of Memristor w_0 = 5e-009; % Width of doped region f1=figure(1); hold on; grid on; f2=figure(2); set(0,'CurrentFigure',2) hold on; grid on; for omega=1:5 comm=sprintf('set_param(''i_v_flux_of_memristor/Sine_wave'',''Amplitude'',''%.30f'')',v_0); % Amplitude eval(comm); comm=sprintf('set_param(''i_v_flux_of_memristor/Sine_wave'',''bias'',''%.30f'')',bias); % bias eval(comm); comm=sprintf('set_param(''i_v_flux_of_memristor/Sine_wave'',''Frequency'',''%.30f'')',omega); % Frequency eval(comm); comm=sprintf('set_param(''i_v_flux_of_memristor/Sine_wave'',''phase'',''%.30f'')',phase); % Phase eval(comm); % Other parameters of equation (7) in the page 665 of [2] comm=sprintf('set_param(''i_v_flux_of_memristor/i_v_flux/Nuy'',''value'',''%.30f'')',Nuy); % Nuy eval(comm); comm=sprintf('set_param(''i_v_flux_of_memristor/i_v_flux/Muy_D'',''value'',''%.30f'')',Muy_D); % Muy_D eval(comm); comm=sprintf('set_param(''i_v_flux_of_memristor/i_v_flux/R_OFF'',''value'',''%.30f'')',R_OFF); % Resistance of undoped eval(comm); comm=sprintf('set_param(''i_v_flux_of_memristor/i_v_flux/R_ON'',''value'',''%.30f'')',R_ON); % Resistance of doped eval(comm); comm=sprintf('set_param(''i_v_flux_of_memristor/i_v_flux/D'',''value'',''%.30f'')',D); % Width of Memristor eval(comm); comm=sprintf('set_param(''i_v_flux_of_memristor/i_v_flux/w_0'',''value'',''%.30f'')',w_0); % Width of doped region eval(comm); sim('i_v_flux_of_memristor'); disp('-----------------------------------------Results-----------------------------------------'); t_0=D*D/Muy_D/v_0; comm=sprintf('disp(''t_0=D^2/Muy_D/v_0 = %e'')',t_0); % Time that the dopants need to travel distance D under constant voltage v_0, chosen app. 1ms eval(comm); comm=sprintf('disp(''Omega_0=2*pi/t_0 = %e'')',2*pi/t_0); % Frequency scales for memristor circuit, chosen typically as given in [1] eval(comm); comm=sprintf('disp(''Q_0 = %e'')',Q_0); % eval(comm); qmax = Q_0*(1-w_0/D); comm=sprintf('disp(''q_max(t) = Q_0(1-w_0/D) = %e'')',qmax); eval(comm); % plot of v-i set(0,'CurrentFigure',1) f1=plot(v,i); set(0,'CurrentFigure',2) f2=plot(flux,q); end