xdel(winsid()) clear; t = linspace(-5,20,5000); a = 0.4; b = 0.45; k = 1; magnitude = 100; offset = 20 // Generera självaste pulsformen y = k*(exp(-a*t) - exp(-b*t) ); // Fyll på med lite platt mark före t=0 y(y<0) = 0; // Normalisera till 1 och multiplicera med magnituden y = y/max(y)*magnitude; // Hitta index för första passagen av 10% x10r = 0; for i = [1:length(y)] if(y(i) > 0.1*magnitude) if((y(i)-0.1*magnitude) < (0.1*magnitude-y(x10r))) x10r = i; end; break; end; x10r = i; end // Hitta index för första passagen av 90% x90r = 0; for i = [1:length(y)] if(y(i) > 0.9*magnitude) if((y(i)-0.9*magnitude) < (0.9*magnitude-y(x90r))) x90r = i; end; break; end; x90r = i; end // Hitta index för första passagen av 10% x10f = 0; for i = [length(y):-1:1] if(y(i) > 0.1*magnitude) if((y(i)-0.1*magnitude) < (0.1*magnitude-y(x10f))) x10f = i; end; break; end; x10f = i; end // Lägg på ett offset y = y+offset; // Lägg på lite av nästa kurva, en kopia av dena kurvan y = [y y(1:2000)]; t = [t linspace(25,25*(1+2/5), 2000)]; //Generera vertikala linjer xpts = [1 1]; //plot(xpts*0, ypts, '-black'); // Vertikalt streck på x = ypts = [(0.1*magnitude+offset) max(y)*1.5]; plot(xpts*t(x10r), ypts, '-'); // 10% rise plot(xpts*t(x10f), ypts, '-'); // 10% fall plot(xpts*t(x10r+5000), ypts, '-'); // second 10% rise ypts = [(0.9*magnitude+offset) max(y)*1.25]; plot(xpts*t(x90r), ypts, '-'); // 90% rise // Generera horisontella linjer // Pulsen plot(t, y, "black"); p = get("hdl"); p = p.children; p.thickness = 3; // max och min horisontella hline = ones(1,length(t)); plot(t,hline.*max(y), '--'); plot(t,hline.*min(y), '--'); plot(t,hline.*0, '-black'); // 10 och 90% horizontella tshort = t(x10r-150:length(t)) hline = ones(1,length(tshort)); plot(tshort,hline.*y(x10r), '-'); tshort = t(x10r-150:x90r) hline = ones(1,length(tshort)); plot(tshort,hline.*y(x90r), '-'); // titletxt = ['$y = k(e^{-\alpha t} - e^{-\beta t})$' ; strcat(['$k=', string(k), ', \alpha=', string(a), ', \beta=', string(b), '$']) ]; //titletxt = '$u(t) = k(e^{-\alpha t} - e^{-\beta t})$'; //title(titletxt , 'fontsize', 8); //xlabel('t (s)', 'fontsize', 7); //ylabel('U (V)', 'fontsize', 7, 'rotation', 0); a = get("current_axes"); //a.axes_visible = "off"; // Rita axlarna i 0 //a.x_location = "origin"; //a.y_location = "origin"; // Bestäm viewport och ta bort inramning a.data_bounds = [min(t),0;max(t),200]; a.box = "off"; // Fula pilar (nästan) på axlarna //b = a.data_bounds //xstring(b(1),b(4),"↑") //set(gce(), "clip_state","off", "text_box_mode","centered", "font_size",4) // //xstring(b(2),b(3),"→") //set(gce(), "clip_state","off", "text_box_mode","centered", "font_size",4) f=get("current_figure") f.figure_size=f.figure_size*1.3 // Råkade bli lagom storlek