for productivity, and even then, python and matlab both have facilities for implementing interfaces to compiled code in c or c + + so that performance - critical code can be implemented to execute quickly. most languages have a foreign function interface to c, which would be enough to interface with most libraries of interest to computational scientists. should you be interested in functional programming? that all depends on what you think is cool. if you're the type of person who is willing to buck convention and you're willing to go through the slog of evangelizing to people about the virtues of whatever it is you want to do with functional programming, i'd say go for it. i would love to see people do cool things with functional programming in computational science, if for no other reason than to prove all of the naysayers wrong ( and there will be a lot of naysayers ). if you're not the type of person who wants to deal with a bunch of people asking you, " why in hell are you using a functional programming language instead of ( insert their favorite procedural programming language here )? ", then i wouldn't bother. there's been some use of functional programming languages for simulation - intensive work. the quantitative trading firm jane street uses ocaml for financial modeling and execution of its trading strategies. ocaml was also used in fftw for generating some c code used in the library. liszt is a domain - specific language developed at stanford and implemented in scala that is used for solving pdes. functional programming is definitely used in industry ( not necessarily in computational science ) ; it remains to be seen whether it will take off in computational science.


when is a mosfet more appropriate as a switch than a bjt? answer : 1 ) a mosfet is better than a bjt when : when you need really low power. mosfets are voltage - controlled. so, you can just charge their gate once and now you have no more current draw, and they stay on. bjt transistors, on the other hand, are current - controlled, so to keep them on you have to keep sourcing ( for npn ) or sinking ( for pnp ) current through their base to emitter channel. this makes mosfets ideally - suited to low - power applications, because you can make them draw a lot less power, especially in steady - state ( ex : always on ) scenarios. when your switching frequencies aren't too high. mosfets start losing their efficiency gains the faster you switch them, because : charging and discharging their gate capacitances repeatedly is like charging and discharging a tiny little battery repeatedly, and that takes power and current, especially since you are likely discharging that tiny little charge to gnd, which is just dumping it and converting it into heat instead of recovering it. the high gate capacitances can involve rather large ( up to hundreds of ma, for example, for a to - 220 - sized part ) momentary input and output currents, and power losses are proportional to the square of the current ( p = i ^ 2 * r ). this means each time you double the current you quadruple the power losses and heat generation in a part. high gate capacitances on mosfets with high - speed switching means you must have large gate drivers and very high drive currents to a mosfet ( ex : + / - 500ma ), as opposed to the low drive currents to a bjt ( ex : 50ma ). so, faster switching frequencies means more losses in driving the gate of a mosfet, as opposed to driving the base of a bjt. rapid switching of the gate also significantly increases losses through the primary drain to source channel because the faster your switching frequency, the more time ( or times per second, however you want to think about it ) you spend in the ohmic region of the transistor, which is the region between fully on and fully off, where r _ ds ( resistance from drain to source ) is high, and hence, so are losses and heat production. so, in summary : the


faster your switching frequency, the more mosfet transistors lose their efficiency gains they otherwise naturally have over bjt transistors, and the more bjt transistors begin to be appealing from a " low power " stand - point. also ( see the book reference, quotes, and example problem below! ) bjt transistors can switch a touch faster than mosfets ( ex : 15. 3 ghz vs 9. 7 ghz in " example g. 3 " below ). when your power and current requirements are a dominating factor ( ie : when you need to control really high power ). for any given component package size, my personal experience in searching for parts indicates the best bjt transistors can only drive about 1 / 10 as much current as the best mosfet transistors. so, mosfets excel at driving high currents and high powers. example : a tip120 npn bjt darlington transistor can only drive about 5a continuous current, whereas the irlb8721 n - channel logic - level mosfet, in the same physical to - 220 package, can drive as much as 62a. additionally, and this is really important! : mosfets can be placed in parallel to increase a circuit's current - capability. ex : if a given mosfet can drive 10a, then putting 10 of them in parallel can drive 10a / mosfet x 10 mosfets = 100a. putting bjt transistors in parallel, however, is not recommended unless you have active or passive ( ex : using power resistors ) load balancing for each bjt transistor in parallel, as bjt transistors are diodic in nature, and hence act more like diodes when placed in parallel : the one with the smallest diodic voltage drop, vce, from collector to emitter, will end up passing the largest current, possibly destroying it. so, you'd have to add a load - balancing mechanism : ex : a tiny - resistance, but huge power, power resistor in series with each bjt transistor / resistor pair in parallel. again, mosfets do not have this limitation, and hence are ideal for placing in parallel to increase current limits of any given design. when you need to etch transistors into integrated circuits. apparently, based on the quote below, as well as numerous other sources, mosfets are easier


to miniaturise and etch into ics ( chips ), so most computer chips are mosfet - based. [ i need to find a source for this - - please post a comment if you have one ] when voltage spike robustness is not your primary concern. if i recall correctly, bjt transistors are more resistant to having their voltage ratings momentarily exceeded than are mosfets. when you need a giant ( high power ) diode! mosfets have a built - in and natural body diode, which is sometimes even specified and rated in a mosfet's datasheet. this diode can frequently handle very large currents, and can be very useful. for an n - channel mosfet ( nmos ), for instance, which can switch current from drain to source, the body diode goes in the opposite direction, pointing from source to drain. so, feel free to take advantage of this body diode when necessary, or just use the mosfet as a diode directly. here's a quick google search for " mosfet body diode " and " mosfet diode ", and a brief article : digikey : the significance of the intrinsic body diodes inside mosfets. beware, however, due to this body diode, mosfets can not naturally block, switch, or control currents in the opposite direction ( from source to drain for an n - channel, or from drain to source for a p - channel ), so to switch ac current with a mosfet you'd need to place two mosfets back - to - back so their diodes work together to block or allow the current, as appropriately, in conjunction with any active switching you might do to control the mosfet. 2 ) so, here's a few cases you might still choose a bjt over a mosfet : ( more pertinent reasons in bold - - this is somewhat subjective ). you need higher switching frequencies. see above. ( although this is rarely ever an issue i think since mosfets can be switched so fast these days anyway ). someone with a lot of real - world, high - frequency design experience feel free to chime in, but based on the textbook below, bjts are faster : example : a certain npn bjt transistor reached 15. 3 ghz with a collector current, i _ c, of 1 ma, as opposed to a comparable nm


##os transistor ( n - channel mosfet ) which only reached a transition frequency of 9. 7 ghz at a drain current, i _ d, of 1 ma. you need to make an op - amp. the textbook i cite farther below says bjts are good for this ( being used to make op - amps ) here ( emphasis added ) : it can thus be seen that each of the two transistor types has its own distinct and unique advantages : bipolar technology has been extremely useful in the design of very - high - quality general - purpose circuit building blocks, such as op amps. [ results may vary ] you care about cost and availability a lot. when choosing parts, sometimes many parts work for a given design objective, and bjts may be cheaper at times. if they are, use them. with bjts having been around much longer than mosfets, my somewhat - limited, subjective experience buying parts shows bjts are really cheap and have more surplus and inexpensive options to choose from, especially when searching for through - hole ( tht ) parts for easy hand - soldering. however, your experience may vary, perhaps even based on where in the world you are located ( i don't know for sure ). modern - day searches from modern - day reputable suppliers, such as digikey, show the opposite to be true, and mosfets win again. a search on digikey in oct. 2020 shows 37808 results for mosfets, with 11537 of them being tht, and only 18974 results for bjts, with 8849 of them being tht. [ much more - relevant ] the gate driver ics and circuits frequently required to drive mosfets ( see just below ) can add cost to your mosfet - based design. you want simplicity in design. all bjts are effectively " logic level " ( this isn't really a concept for bjts, but bear with me ), because they are current - driven, not voltage driven. contrast this to mosfets, where most require a v _ gs, or gate to source voltage, of 10v ~ 12v to fully turn on. creating the circuitry to drive a mosfet gate with these high voltages when using a 3. 3v or 5v microcontroller is a pain in the butt, especially for newcomers. you may need more transistors, push - pull circuits / half - h - bridges


, charge pumps, expensive gate driver ics, etc., just to turn on the stinking thing. contrast this to a bjt where all you need is one resistor and your 3. 3v microcontroller can turn it on just fine, especially if it's a darlington bjt transistor so it has a huge hfe gain ( of around 500 ~ 1000 or more ) and can be turned on with super low ( < 1 ~ 10 ma ) currents. so, designs can get much more complicated to properly drive a mosfet transistor as a switch instead of a simple bjt transistor as a switch. the solution then is to use " logic - level " mosfets, which means they are designed to have their gates controlled with microcontroller " logic levels ", such as 3. 3v or 5v. the problem, however, is : logic - level mosfets are more rare still, and have fewer options to choose from, they are much more expensive, relatively speaking, and they still may have high gate capacitances to overcome when trying to do high - speed switching. this means even with logic - level mosfets you still may need to go right back to a more - complicated design to get a push - pull gate driver circuit / half - h - bridge, or a high - current, expensive, gate driver ic in order to enable high - speed switching of the logic - level mosfet. this book ( isbn - 13 : 978 - 0199339136 ) microelectronic circuits ( the oxford series in electrical and computer engineering ), 7th edition, by adel s. sedra and kenneth c. smith, in " appendix g : comparison of the mosfet and the bjt " ( view online here ), provides some additional insight ( emphasis added ) : g. 4 combining mos and bipolar transistors — bicmos circuits from the discussion above it should be evident that the bjt has the advantage over the mosfet of a much higher transconductance ( gm ) at the same value of dc bias current. thus, in addition to realizing higher voltage gains per amplifier stage, bipolar transistor amplifiers have superior high - frequency performance compared to their mos counterparts. on the other hand, the practically infinite input resistance at the gate of a mosfet makes it possible to design amplifiers with extremely high input resistances and an almost zero input


bias current. also, as mentioned earlier, the mosfet provides an excellent implementation of a switch, a fact that has made cmos technology capable of realizing a host of analog circuit functions that are not possible with bipolar transistors. it can thus be seen that each of the two transistor types has its own distinct and unique advantages : bipolar technology has been extremely useful in the design of very - high - quality general - purpose circuit building blocks, such as op amps. on the other hand, cmos, with its very high packing density and its suitability for both digital and analog circuits, has become the technology of choice for the implementation of very - large - scale integrated circuits. nevertheless, the performance of cmos circuits can be improved if the designer has available ( on the same chip ) bipolar transistors that can be employed in functions that require their high gm and excellent current - driving capability. a technology that allows the fabrication of high - quality bipolar transistors on the same chip as cmos circuits is aptly called bicmos. at appropriate locations throughout this book we present interesting and useful bicmos circuit blocks. this answer repeats this : are bjts used in modern integrated circuits to the same extent as mosfets?. in the " appendix g " of the textbook quoted above, you can also refer to " example g. 3 ". in this example, they show an npn bjt transistor reaching a transition frequency, f _ t as high as 15. 3 ghz with a collector current, i _ c, of 1 ma. this is contrasted to the nmos transistor ( n - channel mosfet ) reaching a transition frequency of only 9. 7 ghz at a drain current, i _ d, of 1 ma. additional study and help for using transistors, whether bjts or mosfets [ my answer ] switching a solenoid using arduino's 5v output? - here i present a full, detailed tutorial on how to read an npn bjt transistor datasheet, pull out the necessary values, and calculate gains, currents, and required resistors and other components to drive a solenoid or relay or other inductive load, including with necessary snubber diode to eliminate harmful back - emf voltages and currents and " ringing ". going further my notes on what " open drain " ( for a mosfet ) or " open collector " ( for a b


##jt ) mean for tri - state gpio pins in microcontrollers : search this page for " open drain " :


genomes are commonly stored as either fasta files (. fa ) or twobit (. 2bit ) files. fasta files store the entire sequence as text and are thus not particularly compressed. twobit files store each nucleotide in two bits and contain additional metadata that indicates where there's regions containing n ( unknown ) bases. for more information, see the documentation on the twobit format at the ucsc genome browser. you can convert between twobit and fasta format using the fatotwobit and twobittofa utilities. for the human genome, you can download it in either fasta or twobit format here :


white gaussian noise in the continuous - time case is not what is called a second - order process ( meaning $ e [ x ^ 2 ( t ) ] $ is finite ) and so, yes, the variance is infinite. fortunately, we can never observe a white noise process ( whether gaussian or not ) in nature ; it is only observable through some kind of device, e. g. a ( bibo - stable ) linear filter with transfer function $ h ( f ) $ in which case what you get is a stationary gaussian process with power spectral density $ \ frac { n _ 0 } { 2 } | h ( f ) | ^ 2 $ and finite variance $ $ \ sigma ^ 2 = \ int _ { - \ infty } ^ \ infty \ frac { n _ 0 } { 2 } | h ( f ) | ^ 2 \, \ mathrm df. $ $ more than what you probably want to know about white gaussian noise can be found in the appendix of this lecture note of mine.


power supplies are slow... they take roughly 10 us to respond ( i. e. bandwidth up to 100 khz ). so when your big, bad, multi - mhz microcontroller switches a bunch of outputs from high to low, it will draw from the power supply, causing the voltage to start drooping until it realizes ( 10 us later! ) that it needs to do something to correct the drooping voltage. to compensate for slow power supplies, we use decoupling capacitors. decoupling capacitors add fast " charge storage " near the ic. so when your micro switches the outputs, instead of drawing charge from the power supply, it will first draw from the capacitors. this will buy the power supply some time to adjust to the changing demands. the " speed " of capacitors varies. basically, smaller capacitors are faster ; inductance tends to be the limiting factor, which is why everyone recommends putting the caps as close as possible to vcc / gnd with the shortest, widest leads that are practical. so pick the largest capacitance in the smallest package, and they will provide the most charge as fast as possible.


notice : i have altered my answer slightly from the original as i have turned the original script into a pip installable program ( with tests ) and have updated the links and code snippets accordingly. the essence of the answer is still exactly the same. this is something i have been meaning to get around to for a while, so thanks for the prompt. i have created a python program called fast5seek to do what ( i think ) you're after. as you have mentioned this is for educational purposes i have added a tonne of comments to the code too so i think you shouldn't have any issues following it. the docs on the github repo have all the info, but for those reading along at home pip3 install fast5seek fast5seek - i / path / to / fast5s - r in. fastq in. bam in. sam - o out. txt what it does is read in < in. fastq | in. bam | in. sam > and extract the read id from each header. it then goes through all the fast5 files under / path / to / fast5s and checks whether their read id is in the set of read ids from < in. fastq | in. bam | in. sam >. if it is, the path to the file is written to it's own line in out. txt. if no output ( - o ) is given, it will write the output to stdout. so if you wanted to pipe these paths into another program, you could do something like mkdir subset _ dir / fast5seek - i / path / to / fast5s / - r in. fastq | xargs cp - t subset _ dir / the above example would copy the fast5 files that are found in your fastq / bam / sam to subset _ dir /.


the answer is complex due to the way the gps system operates, so i'm going to simplify a number of things so you understand the principle, but if you are interested in how it's really implemented you'll need to go find a good gps reference. in other words, what's written below is meant to give you an idea of how it works, but is technically wrong in some ways. the below is not correct enough to implement your own gps software. background all the satellites transmit on essentially the same frequency. they are technically walking all over each others'signals. so how does the gps receiver deal with this? first, each satellite transmits a different message every ms. the message is 1024 bits long, and is generated by a pseudo random number generator. the gps receiver receives the entire spectrum of all the transmitters, then it performs a process called correlation - it generates the specific sequence of one of the satellites, multiplies it by the signal input, and if its signal matches a satellite's signal exactly then the correlator has found one satellite. the mixing essentially pulls the satellite's signal out of the noise, and verified that 1 ) we have the right sequence and 2 ) we have the right timing. however, if it hasn't found a match, it has to shift its signal by one bit and try again, until it's gone through all 1023 bit periods and hasn't found a satellite. then it moves on to trying to detect a different satellite at a different period. due to the time shifting ( 1023 bits, 1, 000 transmissions per second ), in theory it can completely search a code in one second to find ( or determine there's nothing ) at a particular code. due to the code shifting ( there are currently 32 different prn codes, one each for each satellite ) it can therefore take 30 + seconds to search each satellite. further, doppler shift due to the speed of the satellite relative to your ground speed, means that the timebase could be shifted by as much as + / - 10khz, therefore requiring searching about 40 different frequency shifts for a correlator before it can give up on a particular prn and timing. what this means this leaves us with a possible worst case scenario ( one satellite in the air, and we try everything but the exact match first ) of a time to first fix off a cold start ( ie, no information about the time or location of the receiver, or location of the


satellites ) of 32 seconds, assuming we don't make any assumptions, or perform any clever tricks, the received signal is good, etc. however, if you have two correlators, you've just halved that time because you can search for two satellites at once. get 12 correlators on the job and it takes less than a few seconds. get a million correlators and in theory it can take a few milliseconds. each correlator is called a " channel " for the sake of marketing. it's not wholly wrong - in a sense, the correlator is demodulating one particular coded frequency at a time, which is essentially what a radio receiver does when you switch channels. there are a lot of assumptions a gps receiver can make, though, that simplify the problem space such that a generic 12 channel receiver can get a fix, in the worst case, in about 1 - 3 minutes. while you can get a 3d fix with a 4 channel gps, when you lose a gps signal ( goes beyond the horizon, or you go under a bridge, etc ) then you lose 3d fix and go to 2d fix with three satellites while one of your channels goes back into correlation mode. now your receiver starts to downloaded the ephemeris and almanac, which allows the receiver to very intelligently search for signals. after 12 minutes or so it knows exactly which satellites should be in view. so the search goes pretty quickly because you know the position and code for each satellite, but you still only have a 2d fix until you actually find a new satellite. if you have a 12 channel receiver, though, you can use 4 of the strongest channels to provide your fix, a few channels to lock onto backup satellites so it can switch the calculations to them if needed, and several channels to keep searching for satellites the receiver should be able to see. in this way you never lose the full 3d fix. since you can only see up to 12 satellites, why would you need more than 12 channels? there are 24 or so gps satellites operating at any given time, which means that on one point on the earth you can really only see half of them. but remember - you can only search for one satellite per correlator, so the primary reason to increase correlators past twelve is to improve the time to first fix, and the main reason to improve that is for power consumption. if your gps chipset has to be powered all the time,


it's a 100mw power drain all the time. if, however, you only need to turn it on once per second for only 10ms each time, then you just cut your power consumption down to 1mw. this means your cell phone, location beacon, etc can operate for two orders of magnitude longer time on the same set of batteries while still maintaining a full real time fix on their location. further, with millions of correlators, one can do more exact searches which can help reduce the effects of radio reflections in urban canyons ( tall buildings in big cities used to foul up gps receivers with fewer correlators ). lastly, while only 4 satellites are needed to get a 3d fix, good receivers use more satellites in its position algorithm to get a more accurate fix. so only a 4 channel receiver is required, but a 12 channel receiver can get more accuracy. conclusion so the millions of correlators : speeds up satellite acquisition reduces power consumption reduces likelihood of losing a 3d fix even in urban canyons provide better sensitivity, allowing fixes in dense forests, and even in some tunnels provides better positioning accuracy thanks to borzakk for some corrections.


a flip flop is built from two back to back latches with opposite polarity clocks, which form a master slave topology. the type of latch is irrelevant ( jk, sr, d, t ) to this constraint, but it is important that the transparency is controlled by some pin ( call it clock or enable or whatever you like ). sr latches throw everyone for a loop because the most basic design is transparent all the time. so, once the clock enable is added people start calling it a flip flop. well, it isn't ; it is a gated latch. you can build a sr flip flop out of two gated sr latches however : or two jk latches : or two d latches : adding a clock pin to a latch ( sr or jk ) does not make it a flip flop - - it makes it a gated latch. pulsing the clock to a gated latch does not make it a flip flop either ; it makes it a pulse latch ( pulse latch description ). flip flops are edge triggered and the setup and hold times are both relative to this active edge. a traditional flip flop will not allow any time borrowing through cycle borders, since the master - slave topology acts like a lock - and - dam system to create a hard edge at the active clock. latches on the other hand setup to the transparency of the latch and hold until the latch closes. they also allow time borrowing through the entire transparency phase. this means that if one half cycle path is slow and the other half cycle path is fast ; with a latch based design the slow path can borrow time into the fast paths cycle. a very common design trick when you need to squeeze every picosecond out of a path is to spread the flip flop apart ( into two seperate latches ) and do logic in between. basically the setup and hold times are completely different between a latch and a flip flop ; in terms of how the cycle boundaries are handled. the distinction is important if you do any latch based design. a lot of people ( even on this site ) will mix the two up. but once you start timing through them the difference becomes crystal clear. also see : good text describing latches and flip flops what is a flip flop? edit : just showing a t - gate based d - flip flop ( notice it is built from two back to back t - gate based d latches with opposite phase clocks ).


in my opinion, the catalytic, solar - driven conversion of carbon dioxide to methanol, formic acid, etc. is much more interesting and promising, but since enrico asked for the conversion of carbon dioxide to carbon itself : the group around yutaka tamaura was / is active in this field. in one of their earlier publications, [ 1 ] they heated magnetite ( $ \ ce { fe3o4 } $ ) at 290 °c for 4 hours in a stream of hydrogen to yield a material which turned out to be stable at room temperature under nitrogen. this material, $ \ ce { fe _ { 3 + \ delta } o4 } $ $ ( \ delta = 0. 127 ) $, i. e. the metastable cation - excess magnetite is able to incorporate oxygen in the form of $ \ ce { o ^ 2 - } $. under a $ \ ce { co2 } $ atmosphere, the oxygen - deficient material is converted to " ordinary " $ \ ce { fe3o4 } $ with carbon deposited on the surface. this remarkable reaction however is not catalytic, but a short recherche showed that the authors have published a tad more in this field. maybe somebody else finds a report on a catalytic conversion among their publications. tamaura, y. ; tahata, m. complete reduction of carbon dioxide to carbon using cation - excess magnetite. nature 1990, 346 ( 6281 ), 255 – 256. doi : 10. 1038 / 346255a0.


you can best look at it in the frequency domain. if $ x [ n ] $ is the input sequence and $ h [ n ] $ is the filter's impulse response, then the result of the first filter pass is $ $ x ( e ^ { j \ omega } ) h ( e ^ { j \ omega } ) $ $ with $ x ( e ^ { j \ omega } ) $ and $ h ( e ^ { j \ omega } ) $ the fourier transforms of $ x [ n ] $ and $ h [ n ] $, respectively. time reversal corresponds to replacing $ \ omega $ by $ - \ omega $ in the frequency domain, so after time - reversal we get $ $ x ( e ^ { - j \ omega } ) h ( e ^ { - j \ omega } ) $ $ the second filter pass corresponds to another multiplication with $ h ( e ^ { j \ omega } ) $ : $ $ x ( e ^ { - j \ omega } ) h ( e ^ { j \ omega } ) h ( e ^ { - j \ omega } ) $ $ which after time - reversal finally gives for the spectrum of the output signal $ $ y ( e ^ { j \ omega } ) = x ( e ^ { j \ omega } ) h ( e ^ { j \ omega } ) h ( e ^ { - j \ omega } ) = x ( e ^ { j \ omega } ) | h ( e ^ { j \ omega } ) | ^ 2 \ tag { 1 } $ $ because for real - valued filter coefficients we have $ h ( e ^ { - j \ omega } ) = h ^ { * } ( e ^ { j \ omega } ) $. equation ( 1 ) shows that the output spectrum is obtained by filtering with a filter with frequency response $ | h ( e ^ { j \ omega } ) | ^ 2 $, which is purely real - valued, i. e. its phase is zero and consequently there are no phase distortions. this is the theory. in real - time processing there is of course quite a large delay because time - reversal only works if you allow a latency corresponding to the length of the input block. but this does not change the fact that there are no phase distortions, it's just an additional delay of the output data. for fir filtering, this approach is not especially useful because you might as well define a new filter $ \ hat { h } [ n ] = h [


n ] * h [ - n ] $ and get the same result with ordinary filtering. it is more interesting to use this method with iir filters, because they cannot have zero - phase ( or linear phase, i. e. a pure delay ). in sum : if you have or need an iir filter and you want zero phase distortion, and processing delay is no problem then this method is useful if processing delay is an issue you shouldn't use it if you have an fir filter, you can easily compute a new fir filter response which is equivalent to using this method. note that with fir filters an exactly linear phase can always be realized.


short answer eigenvectors make understanding linear transformations easy. they are the " axes " ( directions ) along which a linear transformation acts simply by " stretching / compressing " and / or " flipping " ; eigenvalues give you the factors by which this compression occurs. the more directions you have along which you understand the behavior of a linear transformation, the easier it is to understand the linear transformation ; so you want to have as many linearly independent eigenvectors as possible associated to a single linear transformation. slightly longer answer there are a lot of problems that can be modeled with linear transformations, and the eigenvectors give very simply solutions. for example, consider the system of linear differential equations \ begin { align * } \ frac { dx } { dt } & = ax + by \ \ \ \ frac { dy } { dt } & = cx + dy. \ end { align * } this kind of system arises when you describe, for example, the growth of population of two species that affect one another. for example, you might have that species $ x $ is a predator on species $ y $ ; the more $ x $ you have, the fewer $ y $ will be around to reproduce ; but the fewer $ y $ that are around, the less food there is for $ x $, so fewer $ x $ s will reproduce ; but then fewer $ x $ s are around so that takes pressure off $ y $, which increases ; but then there is more food for $ x $, so $ x $ increases ; and so on and so forth. it also arises when you have certain physical phenomena, such a particle on a moving fluid, where the velocity vector depends on the position along the fluid. solving this system directly is complicated. but suppose that you could do a change of variable so that instead of working with $ x $ and $ y $, you could work with $ z $ and $ w $ ( which depend linearly on $ x $ and also $ y $ ; that is, $ z = \ alpha x + \ beta y $ for some constants $ \ alpha $ and $ \ beta $, and $ w = \ gamma x + \ delta y $, for some constants $ \ gamma $ and $ \ delta $ ) and the system transformed into something like \ begin { align * } \ frac { dz } { dt } & = \ kappa z \ \ \ \ frac { dw } { dt } &


= \ lambda w \ end { align * } that is, you can " decouple " the system, so that now you are dealing with two independent functions. then solving this problem becomes rather easy : $ z = ae ^ { \ kappa t } $, and $ w = be ^ { \ lambda t } $. then you can use the formulas for $ z $ and $ w $ to find expressions for $ x $ and $ y $.. can this be done? well, it amounts precisely to finding two linearly independent eigenvectors for the matrix $ \ left ( \ begin { array } { cc } a & b \ \ c & d \ end { array } \ right ) $! $ z $ and $ w $ correspond to the eigenvectors, and $ \ kappa $ and $ \ lambda $ to the eigenvalues. by taking an expression that " mixes " $ x $ and $ y $, and " decoupling it " into one that acts independently on two different functions, the problem becomes a lot easier. that is the essence of what one hopes to do with the eigenvectors and eigenvalues : " decouple " the ways in which the linear transformation acts into a number of independent actions along separate " directions ", that can be dealt with independently. a lot of problems come down to figuring out these " lines of independent action ", and understanding them can really help you figure out what the matrix / linear transformation is " really " doing.


let's go through some questions in order and see where it takes us. [ or skip to the bit about complex numbers below if you can't be bothered. ] what are natural numbers? it took quite some evolution, but humans are blessed by their ability to notice that there is a similarity between the situations of having three apples in your hand and having three eggs in your hand. or, indeed, three twigs or three babies or three spots. or even three knocks at the door. and we generalise all of these situations by calling it'three'; same goes for the other natural numbers. this is not the construction we usually take in maths, but it's how we learn what numbers are. natural numbers are what allow us to count a finite collection of things. we call this set of numbers $ \ mathbb { n } $. what are integers? once we've learnt how to measure quantity, it doesn't take us long before we need to measure change, or relative quantity. if i'm holding three apples and you take away two, i now have'two fewer'apples than i had before ; but if you gave me two apples i'd have'two more '. we want to measure these changes on the same scale ( rather than the separate scales of'more'and'less'), and we do this by introducing negative natural numbers : the net increase in apples is $ - 2 $. we get the integers from the naturals by allowing ourselves to take numbers away : $ \ mathbb { z } $ is the closure of $ \ mathbb { n } $ under the operation $ - $. what are rational numbers? my friend and i are pretty hungry at this point but since you came along and stole two of my apples i only have one left. out of mutual respect we decide we should each have the same quantity of apple, and so we cut it down the middle. we call the quantity of apple we each get'a half ', or $ \ frac { 1 } { 2 } $. the net change in apple after i give my friend his half is $ - \ frac { 1 } { 2 } $. we get the rationals from the integers by allowing ourselves to divide integers by positive integers [ or, equivalently, by nonzero integers ] : $ \ mathbb { q } $ is ( sort of ) the closure of $ \ mathbb { z } $ under the operation $ \ div $. what


are real numbers? i find some more apples and put them in a pie, which i cook in a circular dish. one of my friends decides to get smart, and asks for a slice of the pie whose curved edge has the same length as its straight edges ( i. e. arc length of the circular segment is equal to its radius ). i decide to honour his request, and using our newfangled rational numbers i try to work out how many such slices i could cut. but i can't quite get there : it's somewhere between $ 6 $ and $ 7 $ ; somewhere between $ \ frac { 43 } { 7 } $ and $ \ frac { 44 } { 7 } $ ; somewhere between $ \ frac { 709 } { 113 } $ and $ \ frac { 710 } { 113 } $ ; and so on, but no matter how accurate i try and make the fractions, i never quite get there. so i decide to call this number $ 2 \ pi $ ( or $ \ tau $? ) and move on with my life. the reals turn the rationals into a continuum, filling the holes which can be approximated to arbitrary degrees of accuracy but never actually reached : $ \ mathbb { r } $ is the completion of $ \ mathbb { q } $. what are complex numbers? [ finally! ] our real numbers prove to be quite useful. if i want to make a pie which is twice as big as my last one but still circular then i'll use a dish whose radius is $ \ sqrt { 2 } $ times bigger. if i decide this isn't enough and i want to make it thrice as big again then i'll use a dish whose radius is $ \ sqrt { 3 } $ times as big as the last. but it turns out that to get this dish i could have made the original one thrice as big and then that one twice as big ; the order in which i increase the size of the dish has no effect on what i end up with. and i could have done it in one go, making it six times as big by using a dish whose radius is $ \ sqrt { 6 } $ times as big. this leads to my discovery of the fact that multiplication corresponds to scaling $ - $ they obey the same rules. ( multiplication by negative numbers responds to scaling and then flipping. ) but i can also spin a pie around. rotating it by one angle and then another has


the same effect as rotating it by the second angle and then the first $ - $ the order in which i carry out the rotations has no effect on what i end up with, just like with scaling. does this mean we can model rotation with some kind of multiplication, where multiplication of these new numbers corresponds to addition of the angles? if i could, then i'd be able to rotate a point on the pie by performing a sequence of multiplications. i notice that if i rotate my pie by $ 90 ^ { \ circ } $ four times then it ends up how it was, so i'll declare this $ 90 ^ { \ circ } $ rotation to be multiplication by'$ i $'and see what happens. we've seen that $ i ^ 4 = 1 $, and with our funky real numbers we know that $ i ^ 4 = ( i ^ 2 ) ^ 2 $ and so $ i ^ 2 = \ pm 1 $. but $ i ^ 2 \ ne 1 $ since rotating twice doesn't leave the pie how it was $ - $ it's facing the wrong way ; so in fact $ i ^ 2 = - 1 $. this then also obeys the rules for multiplication by negative real numbers. upon further experimentation with spinning pies around we discover that defining $ i $ in this way leads to numbers ( formed by adding and multiplying real numbers with this new'$ i $'beast ) which, under multiplication, do indeed correspond to combined scalings and rotations in a'number plane ', which contains our previously held'number line '. what's more, they can be multiplied, divided and rooted as we please. it then has the fun consequence that any polynomial with coefficients of this kind has as many roots as its degree ; what fun! the complex numbers allow us to consider scalings and rotations as two instances of the same thing ; and by ensuring that negative reals have square roots, we get something where every ( non - constant ) polynomial equation can be solved : $ \ mathbb { c } $ is the algebraic closure of $ \ mathbb { r } $. [ final edit ever : it occurs to me that i never mentioned anything to do with anything'imaginary ', since i presumed that sachin really wanted to know about the complex numbers as a whole. but for the sake of completeness : the imaginary numbers are precisely the real multiples of $ i $ $ - $ you scale the pie and rotate it by


$ 90 ^ { \ circ } $ in either direction. they are the rotations / scalings which, when performed twice, leave the pie facing backwards ; that is, they are the numbers which square to give negative real numbers. ] what next? i've been asked in the comments to mention quaternions and octonions. these go ( even further ) beyond what the question is asking, so i won't dwell on them, but the idea is : my friends and i are actually aliens from a multi - dimensional world and simply aren't satisfied with a measly $ 2 $ - dimensional number system. by extending the principles from our so - called complex numbers we get systems which include copies of $ \ mathbb { c } $ and act in many ways like numbers, but now ( unless we restrict ourselves to one of the copies of $ \ mathbb { c } $ ) the order in which we carry out our weird multi - dimensional symmetries does matter. but, with them, we can do lots of science. i have also completely omitted any mention of ordinal numbers, because they fork off in a different direction straight after the naturals. we get some very exciting stuff out of these, but we don't find $ \ mathbb { c } $ because it doesn't have any natural order relation on it. historical note the above succession of stages is not a historical account of how numbers of different types are discovered. i don't claim to know an awful lot about the history of mathematics, but i know enough to know that the concept of a number evolved in different ways in different cultures, likely due to practical implications. in particular, it is very unlikely that complex numbers were devised geometrically as rotations - and - scalings $ - $ the needs of the time were algebraic and people were throwing away ( perfectly valid ) equations because they didn't think $ \ sqrt { - 1 } $ could exist. their geometric properties were discovered soon after. however, this is roughly the sequence in which these number sets are ( usually ) constructed in zf set theory and we have a nice sequence of inclusions $ $ 1 \ hookrightarrow \ mathbb { n } \ hookrightarrow \ mathbb { z } \ hookrightarrow \ mathbb { q } \ hookrightarrow \ mathbb { r } \ hookrightarrow \ mathbb { c } $ $ stuff to read the other answers to this question give


very insightful ways of getting $ \ mathbb { c } $ from $ \ mathbb { r } $ in different ways, and discussing how and why complex numbers are useful $ - $ there's only so much use to spinning pies around. a visual, intuitive guide to imaginary numbers $ - $ thanks go to joe, in the comments, for pointing this out to me. some older questions, e. g. here and here, have some brilliant answers. i'd be glad to know of more such resources ; feel free to post any in the comments.


it is american woodcock, scolopax minor. superbly camouflaged against the leaf litter, the brown - mottled american woodcock walks slowly along the forest floor, probing the soil with its long bill in search of earthworms. unlike its coastal relatives, this plump little shorebird lives in young forests and shrubby old fields across eastern north america. its cryptic plumage and low - profile behavior make it hard to find except in the springtime at dawn or dusk, when the males show off for females by giving loud, nasal peent calls and performing dazzling aerial displays. the newborns are even more camouflaged in downs. references : audubon all about birds


several papers have made this distinction, and a few indeed use different terms to distinguish between them. for example, kazaux et al. ( 2016 ) acknowledge that : these constraints favour the use of a version of the de bruijn graph ( dbg ) dedicated to genome assembly – a version which differs from the combinatorial structure invented by n. g. de bruijn. kingsford et al. ( 2010 ) also recognise the distinction : note that this definition of a de bruijn graph differs from the traditional definition described in the mathematical literature in the 1940s that requires the graph to contain all length - k strings that can be formed from an alphabet ( rather than just those strings present in the genome ). the oldest reference i found for a specific term to refer to the assembly - related structure is skiena and sundaram ( 1995 ), where they call it a subgraph of the de bruijn digraph. later, in 2002, błazewicz et al. will refer to it as a de bruijn induced subgraph. the term de bruijn subgraph is also formally defined in quitzau ’ s thesis ( 2009 ). there, and also in the article ( quitzau and stoye, 2008 ) the authors describe the sequence graph as a modification of the sparse de bruijn subgraph ( commonly used in assembly problems ), where non - branching paths are replaced by a single vertex. the term sparse de bruijn graph is also used by chauve et al. ( 2013 ). another term that i found was word graph, described by both malde et al. ( 2005 ) and by heath and pati ( 2007 ) as a subgraph or as a generalization of a de bruijn graph. rødland ( 2013 ) summarises some of the terms used for this data structure : the data structure is best understood in terms of the de bruijn subgraph representation of s [ k ]. (... ) some authors may refer to this as a word graph, or even just a de bruijn graph. although we can recognise that the distinction is not very relevant, the question is asking specifically for the situation where one wants to make such a distinction.


the normalized counts themselves can be accessed with counts ( dds, normalized = t ). now as to what the basemean actually means, that will depend upon whether an " expanded model matrix " is in use or not. given your previous question, we can see that geno _ treat has a bunch of levels, which means that expanded models are not in use. in such cases, the basemean should be the mean of the base factor in geno _ treat.


to expand on @ believeinvis's answer - - in the early 19th century, when the royal society was really in the swing of things, the dominant language of scholarship was still latin. since latin didn't have words for the new metallic elements, new words were coined from the existing terms for the substances and given latinate endings. from the oed's entry on - ium : the latin names of metals were in - um, e. g. aurum, argentum, ferrum ; the names of sodium, potassium, and magnesium, derived from soda, potassa or potash, and magnesia, were given by davy in 1807, with the derivative form - ium ; and although some of the later metals have received names in - um, the general form is in - ium, as in cadmium, iridium, lithium, osmium, palladium, rhodium, titanium, uranium ; in conformity with which aluminum has been altered to aluminium. so, i think after that, other elements were simply given the suffix to fit the generally useful naming scheme, and then, metal names which were already in common use kept their common language names ( e. g. gold as opposed to aurum ) simply by force of usage.


if you want something quick and dirty you could rapidly index the fasta with samtools faidx and then put the lengths column through r ( other languages are available ) on the command line. samtools faidx $ fasta cut - f2 $ fasta. fai | rscript - e'data < - as. numeric ( readlines ( " stdin " ) ) ; summary ( data ) ; hist ( data )'this outputs a statistical summary, and creates a pdf in the current directory called rplots. pdf, containing a histogram.


one simple way to derive this is to come up with a parabola approximation. just getting the roots correct we have $ $ f ( x ) = x ( \ pi - x ) $ $ then, we need to scale it ( to get the heights correct ). and we are gonna do that by dividing by another parabola $ p ( x ) $ $ $ f ( x ) = \ frac { x ( \ pi - x ) } { p ( x ) } $ $ let's fix this at three points ( thus defining a parabola ). easy rational points would be when $ \ sin $ is $ 1 / 2 $ or $ 1 $. so we fix it at $ x = \ pi / 6, \ pi / 2, 5 \ pi / 6 $. we want $ $ f ( \ pi / 6 ) = f ( 5 \ pi / 6 ) = 1 / 2 = \ frac { 5 \ pi ^ 2 / 36 } { p ( \ pi / 6 ) } = \ frac { 5 \ pi ^ 2 / 36 } { p ( 5 \ pi / 6 ) } $ $ and we conclude that $ p ( \ pi / 6 ) = p ( 5 \ pi / 6 ) = 5 \ pi ^ 2 / 18 $ we do the same at $ x = \ pi / 2 $ to conclude that $ p ( \ pi / 2 ) = \ pi ^ 2 / 4 $. the only parabola through those points is $ $ p ( x ) = \ frac { 1 } { 16 } ( 5 \ pi ^ 2 - 4x ( \ pi - x ) ) $ $ and thus we have the original approximation. in the spirit of answering the question : this method could be applied for most trig functions on some small symmetric bound.


i think this is a symptom of how students are taught basic algebra. rather than being told explicit axioms like $ a ( x + y ) = ax + ay $ and theorems like $ ( x + y ) / a = x / a + y / a, $ students are bombarded with examples of how these axioms / theorems are used, without ever being explicitly told : hey, here's a new rule you're allowed to use from now on. so they just kind of wing it. they learn to guess. so the solution, really, is to teach the material properly. make it clear that $ a ( x + y ) = ax + ay $ is a truth ( perhaps derive it from a geometric argument ). then make it clear how to use such truths : for example, we can deduce that $ 3 \ times ( 5 + 1 ) = ( 3 \ times 5 ) + ( 3 \ times 1 ) $. we can also deduce that $ x ( x ^ 2 + 1 ) = xx ^ 2 + x 1 $. then make it clear how to use those truths. for example, if we have an expression possessing $ x ( x ^ 2 + 1 ) $ as a subexpression, we're allowed to replace this subexpression by $ x x ^ 2 + x 1. $ the new expression obtained in this way is guaranteed to equal the original, because we replaced a subexpression with an equal subexpression. perhaps have a cheat - sheet online, of all the truths students are allowed to use so far, which is updated with more truths as the class progresses. i think that, if you teach in this way, students will learn to trust that if a rule ( truth, whatever ) hasn't been explicitly written down, then its either false, or at the very least, not strictly necessary to solve the problems at hand. this should cure most instances of universal linearity.


the third pin is usually for an internal temperature sensor, to ensure safety during charging. cheap knock - off batteries sometimes have a dummy sensor that returns a " temp ok " value regardless of actual temperature. some higher - end batteries have internal intelligence for charge control and status monitoring, in which case the third pin is for communications.


training set a set of examples used for learning : to fit the parameters of the classifier in the multilayer perceptron ( mlp ) case, we would use the training set to find the “ optimal ” weights with the back - prop rule validation set a set of examples used to tune the hyper - parameters of a classifier in the mlp case, we would use the validation set to find the “ optimal ” number of hidden units or determine a stopping point for the back - propagation algorithm test set a set of examples used only to assess the performance of a fully - trained classifier in the mlp case, we would use the test to estimate the error rate after we have chosen the final model ( mlp size and actual weights ) after assessing the final model on the test set, you must not tune the model any further! why separate test and validation sets? the error rate estimate of the final model on validation data will be biased ( smaller than the true error rate ) since the validation set is used to select the final model after assessing the final model on the test set, you must not tune the model any further! source : introduction to pattern analysis, ricardo gutierrez - osunatexas a & m university, texas a & m university


for one - offs or prototypes i use : press - n - peel transfer film with a laser printer ( the blue one ) steel wool and detergent to clean the pcb blank, then a short etch in ammonium persulphate : that gives a very clean surface, important for a good transfer from the film a laminator to transfer the pattern to the pcb ; i modified the laminator to raise its operating temperature a bit, and the pcb is a bit thick for the laminator but it works ammonium persulphate made with hot water in an ice - cream container, and that sits in a bath of hot water ( a larger ice - cream container ) this gives good results down to 10 mil trace widths ; could probably go finer but haven't needed to yet. for double - sided boards i tape the two layers of press - n - peel film to two scraps of pcb at the edges so that i can get the two layers well aligned, then put the pcb blank in and feed it through the laminator. here are some pictures to illustrate : the bottom ( left ) and top ( right ) of a simple double - sided board ( the top one is printed out mirrored so they overlay when its turned over ). normally i would print onto the blue press - n - peel film, just using paper here for illustration. with one side taped to the scrap pcb ( left side ) and the printed sides facing each other, hold them up to the light and align the other one so that all the holes and the board outline line up. here they are both stuck to the pcb scrap. you can now put the clean blank pcb between the two ( probably best to tape it to both sides to avoid any movement ) and run it through the laminator ( or iron it ) to transfer the toner onto the pcb. you can tape the two pieces of film or paper together without using the scrap of pcb, but when you put the blank pcb between them you can get some relative movement as they flex around the thick pcb. with the scrap piece the same thickness as the blank pcb they stay in the right place. a bench drill is good for any drilling. i use drills down to 0. 5 mm diameter but with 3 mm shanks so they are easily held in the drill chuck. for through holes i solder thin copper wire to the pads on either side. the wire comes from a multi - core flexible cable ; individual strands are or about 0.


2 mm or 8 mil diameter. this takes some time! and to solder i place solder paste with a fine - tipped syringe, place parts with fine tweezers then reflow in an electric frying pan. a few more pictures : syringing solder paste onto smd pads. placing component with tweezers a finshed board - the pcb was professionally made but i assembled components and soldered as described here. these are 0402 - size resistors and capacitors ( quite small, amazingly easy to lose ), an accelerometer in a qfn - 16 package ( 4x4 mm ) and a memory chip in an 8 pin leadless package, similar size to a soic - 8. ( this is part of a small accelerometer data logger, see vastmotion. com. au ). good luck!


i think it would help to understand how a capacitor blocks dc ( direct current ) while allowing ac ( alternating current ). let's start with the simplest source of dc, a battery : when this battery is being used to power something, electrons are drawn into the + side of the battery, and pushed out the - side. let's attach some wires to the battery : there still isn't a complete circuit here ( the wires don't go anywhere ), so there is no current flow. but that doesn't mean that there wasn't any current flow. you see, the atoms in the copper wire metal are made up of a nuclei of the copper atoms, surrounded by their electrons. it can be helpful to think of the copper wire as positive copper ions, with electrons floating around : note : i use the symbol e - to represent an electron in a metal it is very easy to push the electrons around. in our case we have a battery attached. it is able to actually suck some electrons out of the wire : the wire attached to the positive side of the battery has electrons sucked out of it. those electrons are then pushed out the negative side of the battery into the wire attached to the negative side. it's important to note that the battery can't remove all the electrons. the electrons are generally attracted to the positive ions they leave behind ; so it's hard to remove all the electrons. in the end our red wire will have a slight positive charge ( cause it's missing electrons ), and the black wire will have a slight negative charge ( cause it has extra electrons ). so when you first connect the battery to these wires, only a little bit of current will flow. the battery isn't able to move very many electrons, so the current flows very briefly, and then stops. if you disconnected the battery, flipped it around, and reconnected it : electrons in the black wire would be sucked into the battery and pushed into the red wire. once again there would only a tiny amount of current flow, and then it would stop. the problem with just using two wires is that we don't have very many electrons to push around. what we need is a large store of electrons to play with - a large hunk of metal. that's what a capacitor is : a large chunk of metal attached to the ends of each wire. with this large chunk of metal, there are a lot more electrons we can easily push around. now the " positive


" side can have a lot more electrons sucked out of it, and the " negative " side can have a lot more electrons pushed into it : so if you apply an alternating current source to a capacitor, some of that current will be allowed to flow, but after a while it will run out of electrons to push around, and the flow will stop. this is fortunate for the ac source, since it then reverses, and current is allowed to flow once more. but why is a capacitor rated in dc volts a capacitor isn't just two hunks of metal. another design feature of the capacitor is that it uses two hunks of metal very close to each other ( imagine a layer of wax paper sandwiched between two sheets of tin foil ). the reason they use " tin foil " separated by " waxed paper " is because they want the negative electrons to be very close to the positive " holes " they left behind. this causes the electrons to be attracted to the positive " holes " : because the electrons are negative, and the " holes " are positive, the electrons are attracted to the holes. this causes the electrons to actually stay there. you can now remove the battery and the capacitor will actually hold that charge. this is why a capacitor can store a charge ; electrons being attracted to the holes they left behind. but that waxed paper isn't a perfect insulator ; it's going to allow some leakage. but the real problem comes if you have too many electrons piled up. the electric field between the two " plates " of the capacitor can actually get so intense that it causes a breakdown of the waxed paper, permanently damaging the capacitor : in reality a capacitor isn't made of tin foil and waxed paper ( anymore ) ; they use better materials. but there is still a point, a " voltage ", where the insulator between the two parallel plates breaks down, destroying the device. this is the capacitor's rated maximum dc voltage.


in most countries, cosmetic product labels use the international nomenclature of cosmetic ingredients ( inci ) for listing ingredients. the inci name “ aqua ” indeed just describes water ( which is used as a solvent ).


the best book to answer your question would probably be : cooper and torczon, " engineering a compiler, " 2003. if you have access to a university library you should be able to borrow a copy. in a production compiler like llvm or gcc the designers make every effort to keep all the algorithms below $ o ( n ^ 2 ) $ where $ n $ is the size of the input. for some of the analysis for the " optimization " phases this means that you need to use heuristics rather than producing truly optimal code. the lexer is a finite state machine, so $ o ( n ) $ in the size of the input ( in characters ) and produces a stream of $ o ( n ) $ tokens that is passed to the parser. for many compilers for many languages the parser is lalr ( 1 ) and thus processes the token stream in time $ o ( n ) $ in the number of input tokens. during parsing you typically have to keep track of a symbol table, but, for many languages, that can be handled with a stack of hash tables ( " dictionaries " ). each dictionary access is $ o ( 1 ) $, but you may occasionally have to walk the stack to look up a symbol. the depth of the stack is $ o ( s ) $ where $ s $ is the nesting depth of the scopes. ( so in c - like languages, how many layers of curly braces you are inside. ) then the parse tree is typically " flattened " into a control flow graph. the nodes of the control flow graph might be 3 - address instructions ( similar to a risc assembly language ), and the size of the control flow graph will typically be linear in the size of the parse tree. then a series of redundancy elimination steps are typically applied ( common subexpression elimination, loop invariant code motion, constant propagation,... ). ( this is often called " optimization " although there is rarely anything optimal about the result, the real goal is to improve the code as much as is possible within the time and space constraints we have placed on the compiler. ) each redundancy elimination step will typically require proofs of some facts about the control flow graph. these proofs are typically done using data flow analysis. most data - flow analyses are designed so that they will converge in $ o ( d ) $ passes over the flow graph where $ d $ is ( roughly speaking ) the loop nesting depth


and a pass over the flow graph takes time $ o ( n ) $ where $ n $ is the number of 3 - address instructions. for more sophisticated optimizations you might want to do more sophisticated analyses. at this point you start running into tradeoffs. you want your analysis algorithms to take much less than $ o ( n ^ 2 ) $ time in the size of the whole - program's flow graph, but this means you need to do without information ( and program improving transformations ) that might be expensive to prove. a classic example of this is alias analysis, where for some pair of memory writes you would like to prove that the two writes can never target the same memory location. ( you might want to do an alias analysis to see if you could move one instruction above the other. ) but to get accurate information about aliases you might need to analyze every possible control path through the program, which is exponential in the number of branches in the program ( and thus exponential in the number of nodes in the control flow graph. ) next you get into register allocation. register allocation can be phrased as a graph - coloring problem, and coloring a graph with a minimal number of colors is known to be np - hard. so most compilers use some kind of greedy heuristic combined with register spilling with the goal of reducing the number of register spills as best as possible within reasonable time bounds. finally you get into code generation. code generation is typically done a maximal basic - block at a time where a basic block is a set of linearly connected control flow graph nodes with a single entry and single exit. this can be reformulated as a graph covering problem where the graph you are trying to cover is the dependence graph of the set of 3 - address instructions in the basic block, and you are trying to cover with a set of graphs that represent the available machine instructions. this problem is exponential in the size of the largest basic block ( which could, in principle, be the same order as the size of the entire program ), so this is again typically done with heuristics where only a small subset of the possible coverings are examined.


the earliest mention of the 30x paradigm i could find is in the original illumina whole - genome sequencing paper : bentley, 2008. specifically, in figure 5, they show that most snps have been found, and that there are few uncovered / uncalled bases by the time you reach 30x : these days, 30x is still a common standard, but large - scale germline sequencing projects are often pushing down closer to 25x and finding it adequate. every group doing this seriously has done power calculations based on specifics of their machines and prep ( things like error rates and read lengths matter! ). cancer genomics is going in the other direction. when you have to contend with purity, ploidy, and subclonal populations, much more coverage than 30x is needed. our group showed in this 2015 paper that even 300x whole - genome coverage of a tumor was likely missing real rare variants in a tumor. on the whole, the sequence coverage you need really depends on what questions you're asking, and i'd recommend that anyone designing a sequencing experiment consult with both a sequencing expert and a statistician beforehand ( and it's even better if those are the same person! )


dfam has recently launched a sister resource, dfam _ consensus, whose stated aim is to replace repbase. from the annoucement : dfam _ consensus provides an open framework for the community to store both seed alignments ( multiple alignments of instances for a given family ) and the corresponding consensus sequence model. both repeatmasker and repeatmodeler have been updated to support dfam _ consensus. i haven ’ t tried it yet but it looks promising.


one example that appears in many areas of physics, and in particular classical mechanics and quantum physics, is the two - body problem. the two - body problem here means the task of calculating the dynamics of two interacting particles which, for example, interact by gravitational or coulomb forces. the solution to this problem can often be found in closed form by a variable transformation into center - of - mass and relative coordinates. however, as soon as you consider three particles, in general no closed - form solutions exist.


try kicad. now it even does spice simulations, ngspice specifically, and it handles pretty much everything else. other than that, if you wish, kicad has also the tools to design printed circuit boards, and even has a 3d viewer and exporter for the boards! kicad runs on windows, linux and apple os x. there is also a project called esim that bundles kicad with a spice simulator and differential equation solver.


if the values lie along a line the distribution has the same shape ( up to location and scale ) as the theoretical distribution we have supposed. local behaviour : when looking at sorted sample values on the y - axis and ( approximate ) expected quantiles on the x - axis, we can identify from how the values in some section of the plot differ locally from an overall linear trend by seeing whether the values are more or less concentrated than the theoretical distribution would suppose in that section of a plot : as we see, less concentrated points increase more and more concentrated points increase less rapidly than an overall linear relation would suggest, and in the extreme cases correspond to a gap in the density of the sample ( shows as a near - vertical jump ) or a spike of constant values ( values aligned horizontally ). this allows us to spot a heavy tail or a light tail and hence, skewness greater or smaller than the theoretical distribution, and so on. overall apppearance : here's what qq - plots look like ( for particular choices of distribution ) on average : but randomness tends to obscure things, especially with small samples : note that at $ n = 21 $ the results may be much more variable than shown there - i generated several such sets of six plots and chose a'nice'set where you could kind of see the shape in all six plots at the same time. sometimes straight relationships look curved, curved relationships look straight, heavy - tails just look skew, and so on - with such small samples, often the situation may be much less clear : it's possible to discern more features than those ( such as discreteness, for one example ), but with $ n = 21 $, even such basic features may be hard to spot ; we shouldn't try to'over - interpret'every little wiggle. as sample sizes become larger, generally speaking the plots'stabilize'and the features become more clearly interpretable rather than representing noise. [ with some very heavy - tailed distributions, the rare large outlier might prevent the picture stabilizing nicely even at quite large sample sizes. ] you may also find the suggestion here useful when trying to decide how much you should worry about a particular amount of curvature or wiggliness. a more suitable guide for interpretation in general would also include displays at smaller and larger sample sizes.


one can disprove string theory by many observations that will almost certainly not occur, for example : by detecting lorentz violation at high energies : string theory predicts that the lorentz symmetry is exact at any energy scale ; recent experiments by the fermi satellite and others have shown that the lorentz symmetry works even at the planck scale with a precision much better than 100 % and the accuracy may improve in the near future ; for example, if an experiment ever claimed that a particle is moving faster than light, string theory predicts that an error will be found in that experiment by detecting a violation of the equivalence principle ; it's been tested with the relative accuracy of $ 10 ^ { - 16 } $ and it's unlikely that a violation will occur ; string theory predicts that the law is exact by detecting a mathematical inconsistency in our world, for example that $ 2 + 2 $ can be equal both to $ 4 $ as well as $ 5 $ ; such an observation would make the existing alternatives of string theory conceivable alternatives because all of them are mathematically inconsistent as theories of gravity ; clearly, nothing of the sort will occur ; also, one could find out a previously unknown mathematical inconsistency of string theory - even this seems extremely unlikely after the neverending successful tests by experimentally proving that the information is lost in the black holes, or anything else that contradicts general properties of quantum gravity as predicted by string theory, e. g. that the high center - of - mass - energy regime is dominated by black hole production and / or that the black holes have the right entropy ; string theory implies that the information is preserved in any processes in the asymptotical minkowski space, including the hawking radiation, and confirms the hawking - bekenstein claims as the right semiclassical approximation ; obviously, you also disprove string theory by proving that gravitons don't exist ; if you could prove that gravity is an entropic force, it would therefore rule out string theory as well by experimentally proving that the world doesn't contain gravity, fermions, or isn't described by quantum field theories at low energies ; or that the general postulates of quantum mechanics don't work ; string theory predicts that these approximations work and the postulates of quantum mechanics are exactly valid while the alternatives of string theory predict that nothing like the standard model etc. is possible by experimentally showing that the real world contradicts some of the


general features predicted by all string vacua which are not satisfied by the " swampland " qfts as explained by cumrun vafa ; if we lived in the swampland, our world couldn't be described by anything inside the landscape of string theory ; the generic predictions of string theory probably include the fact that gravity is the weakest force, moduli spaces have a finite volume and similar predictions that seem to be satisfied so far by mapping the whole landscape, calculating the accurate predictions of each vacuum for the particle physics ( masses, couplings, mixings ), and showing that none of them is compatible with the experimentally measured parameters of particle physics within the known error margins ; this route to disprove string theory is hard but possible in principle, too ( although the full mathematical machinery to calculate the properties of any vacuum at any accuracy isn't quite available today, even in principle ) by analyzing physics experimentally up to the planck scale and showing that our world contains neither supersymmetry nor extra dimensions at any scale. if you check that there is no susy up to a certain higher scale, you will increase the probability that string theory is not relevant for our universe but it won't be a full proof a convincing observation of varying fundamental constants such as the fine - structure constant would disprove string theory unless some other unlikely predictions of some string models that allow such variability would be observed at the same time the reason why it's hard if not impossible to disprove string theory in practice is that string theory - as a qualitative framework that must replace quantum field theory if one wants to include both successes of qft as well as gr - has already been established. there's nothing wrong with it ; the fact that a theory is hard to exclude in practice is just another way of saying that it is already shown to be " probably true " according to the observations that have shaped our expectations of future observations. science requires that hypotheses have to be disprovable in principle, and the list above surely shows that string theory is. the " criticism " is usually directed against string theory but not quantum field theory ; but this is a reflection of a deep misunderstanding of what string theory predicts ; or a deep misunderstanding of the processes of the scientific method ; or both. in science, one can only exclude a theory that contradicts the observations. however, the landscape of string theory predicts the same set of possible observations at low energies as quantum field theories. at long distances,


string theory and qft as the frameworks are indistinguishable ; they just have different methods to parameterize the detailed possibilities. in qft, one chooses the particle content and determines the continuous values of the couplings and masses ; in string theory, one only chooses some discrete information about the topology of the compact manifold and the discrete fluxes and branes. although the number of discrete possibilities is large, all the continuous numbers follow from these discrete choices, at any accuracy. so the validity of qft and string theory is equivalent from the viewpoint of doable experiments at low energies. the difference is that qft can't include consistent gravity, in a quantum framework, while string theory also automatically predicts a consistent quantum gravity. that's an advantage of string theory, not a disadvantage. there is no known disadvantage of string theory relative to qft. for this reason, it is at least as established as qft. it can't realistically go away. in particular, it's been shown in the ads / cft correspondence that string theory is automatically the full framework describing the dynamics of theories such as gauge theories ; it's equivalent to their behavior in the limit when the number of colors is large and in related limits. this proof can't be " unproved " again : string theory has attached itself to the gauge theories as the more complete description. the latter, older theory - gauge theory - has been experimentally established, so string theory can never be removed from physics anymore. it's a part of physics to stay with us much like qcd or anything else in physics. the question is only what is the right vacuum or background to describe the world around us. of course, this remains a question with a lot of unknowns. but that doesn't mean that everything, including the need for string theory, remains unknown. what could happen - although it is extremely, extremely unlikely - is that a consistent, non - stringy competitor to string theory is also able to predict the same features of the universe as string theory can emerge in the future. ( i am carefully watching all new ideas. ) if this competitor began to look even more consistent with the observed details of the universe, it could supersede or even replace string theory. it seems almost obvious that there exists no " competing " theory because the landscape of possible unifying theories has been pretty much mapped, it is very diverse, and whenever all consistency conditions are carefully imposed, one finds out that he returns to the


full - fledged string / m - theory in one of its diverse descriptions. even in the absence of string theory, it could hypothetically happen that new experiments will discover new phenomena that are impossible - at least unnatural - according to string theory. obviously, people would have to find a proper description of these phenomena. for example, if there were preons inside electrons, they would need some explanation. they seem incompatible with the string model building as we know it today. but even if such a new surprising observation were made, a significant fraction of the theorists would obviously try to find an explanation within the framework of string theory, and that's obviously the right strategy. others could try to find an explanation elsewhere. but neverending attempts to " get rid of string theory " are almost as unreasonable as attempts to " get rid of relativity " or " get rid of quantum mechanics " or " get rid of mathematics " within physics. you simply can't do it because those things have already been showed to work at some level. physics hasn't yet reached the very final endpoint - the complete understanding of everything - but that doesn't mean that it's plausible that physics may easily return to the pre - string, pre - quantum, pre - relativistic, or pre - mathematical era again. it almost certainly won't.


it's not an argument. it is a ( a bit strongly stated ) fact that formal normality tests always reject on the huge sample sizes we work with today. it's even easy to prove that when n gets large, even the smallest deviation from perfect normality will lead to a significant result. and as every dataset has some degree of randomness, no single dataset will be a perfectly normally distributed sample. but in applied statistics the question is not whether the data / residuals... are perfectly normal, but normal enough for the assumptions to hold. let me illustrate with the shapiro - wilk test. the code below constructs a set of distributions that approach normality but aren't completely normal. next, we test with shapiro. test whether a sample from these almost - normal distributions deviate from normality. in r : x < - replicate ( 100, { # generates 100 different tests on each distribution c ( shapiro. test ( rnorm ( 10 ) + c ( 1, 0, 2, 0, 1 ) ) $ p. value, # $ shapiro. test ( rnorm ( 100 ) + c ( 1, 0, 2, 0, 1 ) ) $ p. value, # $ shapiro. test ( rnorm ( 1000 ) + c ( 1, 0, 2, 0, 1 ) ) $ p. value, # $ shapiro. test ( rnorm ( 5000 ) + c ( 1, 0, 2, 0, 1 ) ) $ p. value ) # $ } # rnorm gives a random draw from the normal distribution ) rownames ( x ) < - c ( " n10 ", " n100 ", " n1000 ", " n5000 " ) rowmeans ( x < 0. 05 ) # the proportion of significant deviations n10 n100 n1000 n5000 0. 04 0. 04 0. 20 0. 87 the last line checks which fraction of the simulations for every sample size deviate significantly from normality. so in 87 % of the cases, a sample of 5000 observations deviates significantly from normality according to shapiro - wilk. yet, if you see the qq plots, you would never ever decide on a deviation from normality. below you see as an example the qq - plots for one set of random samples with p - values n10 n100 n1000 n5000 0. 760 0. 681 0. 164 0. 00


when you look at a surface like sand, bricks, etc, the light you are seeing is reflected by diffuse reflection. with a flat surface like a mirror, light falling on the surface is reflected back at the same angle it hit the surface ( specular reflection ) and you see a mirror image of the light falling on the surface. however a material like sand is basically lots of small grains of glass, and light is reflected at all the surfaces of the grains. the result is that the light falling on the sand gets reflected back in effectively random directions and the reflected light just looks white. the reflection comes from the refractive index mismatch at the boundary between between air $ \ left ( n = 1. 004 \ right ) $ and sand $ \ left ( n \ approx 1. 54 \ right ) $. light is reflected from any refractive index change. so suppose you filled the spaces between the sand grains with a liquid of refractive index $ 1. 54 $. if you did this there would no longer be a refractive index change when light crossed the boundary between the liquid and the sand, so no light would be reflected. the result would be that the sand / liquid would be transparent. and this is the reason behind the darkening you see when you add water to sand. the refractive index of water $ \ left ( n = 1. 33 \ right ) $ is less than sand, so you still get some reflection. however the reflection from a water / sand boundary is a lot less than from an air / sand boundary because the refractive index change is less. the reason that sand gets darker when you add water to it is simply that there is a lot less light reflected. the same applies to brick, cloth, etc. if you look at a lot of material close up you find they're actually transparent. for example cloth is made from cotton or man made fibres, and if you look at a single fibre under a microscope you'll find you can see through it. the reason the materials are opaque is purely down to reflection at the air / material boundaries.


nobody really knows. using the naive bohr model of the atom, we run into trouble around $ z = 137 $ as the innermost electrons would have to be moving above the speed of light. this result is because the bohr model doesn't take into account relativity. solving the dirac equation, which comes from relativistic quantum mechanics, and taking into account that the nucleus is not a point particle, then there seems to be no real issue with arbitrarily high atomic numbers, although unusual effects start happening above $ z \ approx 173 $. these results may be overturned by an even deeper analysis with current quantum electrodynamics theory, or a new theory altogether. as far as we can tell, however, we will never get anywhere close to such atomic numbers. very heavy elements are extremely unstable with respect to radioactive decay into lighter elements. our current method of producing superheavy elements is based on accelerating a certain isotope of an relatively light element and hitting a target made of an isotope of a much heavier element. this process is extremely inefficient, and it takes many months to produce significant amounts of material. for the heaviest elements, it takes years to detect even a handful of atoms. the very short lifetime of the heaviest targets and the very low collision efficiency between projectile and target mean that it will be extremely difficult to go much further than the current 118 elements. it is possible that we may find somewhat more stable superheavy isotopes in the islands of stability around $ z = 114 $ and $ z = 126 $, but the predicted most stable isotopes ( which even then are not expect to last more than a few minutes ) have such a huge amount of neutrons in their nuclei that we have no idea how to produce them ; we may be condemned to merely skirt the shores of the islands of stability, while never climbing them. edit : note that the best calculation presented above is based on quantum electrodynamics alone, i. e. only electromagnetic forces are taken into account. obviously, to predict how nuclei will behave ( and therefore how many protons you can stuff into a nucleus before it's impossible to go any further ), one needs detailed knowledge of the strong and weak nuclear forces. unfortunately, the mathematical description of nuclear forces is still an incredibly tough problem in physics today, so no one can hope to provide a rigorous answer from that angle. there must be some limit, as the residual nuclear forces are very short - ranged. at some point there will be so many proton


##s and neutrons in the nucleus ( and the resulting nucleus will have become so large ) that the diametrically opposite parts of the nucleus won't be able to " detect " each other, as they are too far away. each additional proton or neutron produces a weaker stabilization via the strong nuclear force. meanwhile, the electrical repulsion between protons has infinite range, so every additional proton will contribute repulsively just the same. this is why heavier elements need higher and higher neutron - to - proton ratios to remain stable. thus, at some atomic number, possibly not much higher than our current record of $ z = 118 $, the electrical repulsion of the protons will always win against the strong nuclear attractions of protons and neutrons, no matter the configuration of the nucleus. hence, all sufficiently heavy atomic nuclei will suffer spontaneously fission almost immediately after coming into existence, or all the valid reaction pathways to reach an element will require events which are so fantastically unlikely that if even all the nucleons in the entire observable universe were being collided with each other since the big bang in an attempt to synthesize the heaviest element possible, we would statistically expect some sufficiently heavy atom to not have been produced even once.


there are about $ 10 ^ { 23 } $ stars in the observable universe. thanks to the expansion of the universe, those stars are currently spread over a sphere that is about $ d = 2. 8 \ times 10 ^ { 10 } $ parsecs across. of course some stars will have died whilst their light has been travelling towards us, but others will have been born, so i am going to ignore that complication. if we imagine the stars uniformly spread through this volume $ ^ { * } $, they have a number density of $ n = 3 \ times 10 ^ { - 58 } $ m $ ^ { - 3 } $ ( or $ \ sim 10 ^ { - 8 } $ pc $ ^ { - 3 } $ ). if we then define an average radius for a star $ r $ we can ask how many stars lie within $ r $ of a plane that goes through the earth. the volume occupied by this slice is $ 2 \ pi d ^ 2 r / 4 $ and the number of stars within that volume is $ $ n = \ pi d ^ 2 r n / 2. $ $ if $ r \ sim 1 r _ { \ odot } $ ( many stars are much bigger, most stars are a bit smaller ), then $ n \ sim 2 \ times 10 ^ 5 $. so my surprising conclusion ( to me anyway ) is that many stars would be " sliced " by a plane going through the entire observable universe. $ * $ nb : stars are not distributed uniformly - they are concentrated in galaxies and those galaxies are organised into groups, clusters and filamentary superstructures. however, on the largest scales the universe is rather homogeneous ( see the cosmic microwave background ) and so to first order the smaller - scale non - uniformity will not affect an estimate of the average total number of " sliced " stars across the observable universe, but may mean there is a larger variance in the answer than simple poissonian statistics would suggest. could the clustering of stars affect the conclusion? it could if the clustering is strong enough that the median number of stars within $ r $ of the plane becomes $ < 1 $, but with the mean number unchanged. as an example consider an extreme bimodal model where all stars are found in galaxies of $ n _ * $ stars, where the average density is $ n _ * $. the " structure " of the universe could then be characterised by uniformly distributed galactic " cubes " of side


$ l = ( n _ * / n _ * ) ^ { 1 / 3 } $ and of voids with side $ ( n _ * / n ) ^ { 1 / 3 } l = ( n _ g / n ) ^ { 1 / 3 } $. the number density of galaxies is the number of galaxies divided by the volume of the observable universe $ n _ g = ( 10 ^ { 23 } / n _ * ) / ( \ pi d ^ 3 / 6 ) $ the number of galaxies intersected by the plane will be $ $ n _ g \ sim \ left ( \ frac { 6 \ times 10 ^ { 23 } } { \ pi d ^ 3 n _ * } \ right ) \ left ( \ frac { \ pi d ^ 2 } { 4 } \ right ) l = 1. 5 \ times 10 ^ { 23 } \ left ( \ frac { l } { n _ * d } \ right ) $ $ and in each of those galaxies there will be $ \ sim l ^ 2 r n _ * = r n _ * / l $ intersections with a star. if we let $ n _ * = 0. 1 $ pc $ ^ { - 3 } $ ( the local stellar density in our galaxy ) and $ n _ * = 10 ^ { 11 } $ ( the size of our galaxy ), then $ l = 10 ^ 4 $ pc, $ n _ g = 5 \ times 10 ^ { 5 } $ and the number of stellar intersections per galaxy will be about 0. 25. thus the average number of intersections will be about the same ( by design ) but the variance won't be much different either. i think the only way density contrasts could give an appreciable chance of no intersection is if $ n _ g < 1 $, and thus $ l / n _ * < 2 \ times 10 ^ { - 13 } $ - i. e. if galaxies / structures contain lots more stars and are very dense so that there is a good chance that the plane will not intersect a single " galaxy ". for example if $ n _ * = 10 ^ { 21 } $ and $ n _ * = 10 ^ 3 $ pc $ ^ { - 3 } $, then $ l = 10 ^ 6 $ pc and $ n _ g \ sim 0. 05 $. in this circumstance ( which looks nothing like our universe ) there is a high chance that the plane would not intersect one of the 100 big "


galaxies ", but if it did there would be about $ 10 ^ 7 $ stellar intersections.


what is meant by a complete description of a stochastic process? well, mathematically, a stochastic process is a collection $ \ { x ( t ) \ colon t \ in { \ mathbb t } \ } $ of random variables, one for each time instant $ t $ in an index set $ \ mathbb t $, where usually $ \ mathbb t $ is the entire real line or the positive real line, and a complete description means that for each integer $ n \ geq 1 $ and $ n $ time instants $ t _ 1, t _ 2, \ ldots, t _ n \ in \ mathbb t $, we know the ( joint ) distributions of the $ n $ random variables $ x ( t _ 1 ) $, $ x ( t _ 2 ) $, $ \ ldots, x ( t _ n ) $. this is an enormous amount of information : we need to know the cdf of $ x ( t ) $ for each time instant $ t $, the ( two - dimensional ) joint cdf of $ x ( t _ 1 ) $ and $ x ( t _ 2 ) $ for all choices of time instants $ t _ 1 $ and $ t _ 2 $, the ( three - dimensional ) cdfs of $ x ( t _ 1 ) $, $ x ( t _ 2 ) $, and $ x ( t _ 3 ) $, etc. etc. etc. so naturally people have looked about for simpler descriptions and more restrictive models. one simplification occurs when the process is invariant to a change in the time origin. what this means is that all the random variables in the process have identical cdfs : $ f _ { x ( t _ 1 ) } ( x ) = f _ { x ( t _ 2 ) } ( x ) $ for all $ t _ 1, t _ 2 $. any two random variables separated by some specified amount of time have the same joint cdf as any other pair of random variables separated by the same amount of time. for example, the random variables $ x ( t _ 1 ) $ and $ x ( t _ 1 + \ tau ) $ are separated by $ \ tau $ seconds, as are the random variables $ x ( t _ 2 ) $ and $ x ( t _ 2 + \ tau ) $, and thus $ f _ { x ( t _ 1 ), x ( t _ 1 + \ tau ) } ( x, y )


= f _ { x ( t _ 2 ), x ( t _ 2 + \ tau ) } ( x, y ) $ any three random variables $ x ( t _ 1 ) $, $ x ( t _ 1 + \ tau _ 1 ) $, $ x ( t _ 1 + \ tau _ 1 + \ tau _ 2 ) $ spaced $ \ tau _ 1 $ and $ \ tau _ 2 $ apart have the same joint cdf as $ x ( t _ 2 ) $, $ x ( t _ 2 + \ tau _ 1 ) $, $ x ( t _ 2 + \ tau _ 1 + \ tau _ 2 ) $ which as also spaced $ \ tau _ 1 $ and $ \ tau _ 2 $ apart. equivalently, the joint cdf of $ x ( t _ 1 ), x ( t _ 2 ), x ( t _ 3 ) $ is the same as the joint cdf of $ x ( t _ 1 + \ tau ), x ( t _ 2 + \ tau ), x ( t _ 3 + \ tau ) $ and similarly for all multidimensional cdfs. effectively, the probabilistic descriptions of the random process do not depend on what we choose to call the origin on the time axis : shifting all time instants $ t _ 1, t _ 2, \ ldots, t _ n $ by some fixed amount $ \ tau $ to $ t _ 1 + \ tau, t _ 2 + \ tau, \ ldots, t _ n + \ tau $ gives the same probabilistic description of the random variables. this property is called strict - sense stationarity and a random process that enjoys this property is called a strictly stationary random process or, more simply, a stationary random process. be aware that in some of the statistics literature ( especially the parts related to econometrics and time - series analysis ), stationary processes are defined somewhat differently ; in fact as what are described later in this answer as wide - sense stationary processes. note that strict stationarity by itself does not require any particular form of cdf. for example, it does not say that all the variables are gaussian. the adjective strictly suggests that is possible to define a looser form of stationarity. if the $ n ^ { \ text { th } } $ - order joint cdf of $ x ( t _ 1 ), x ( t _ 2 ), \ ldots, x ( t _


n ) $ is the same as the $ n ^ { \ text { th } } $ - order joint cdf of $ x ( t _ 1 + \ tau ), x ( t _ 2 + \ tau ), \ ldots, x ( t _ n + \ tau ) $ for all choices of $ t _ 1, t _ 2, \ ldots, t _ n $ and $ \ tau $, then the random process is said to be stationary to order $ n $ and is referred to as a $ n ^ { \ text { th } } $ - order stationary random process. note that a $ n ^ { \ text { th } } $ - order stationary random process is also stationary to order $ n $ for each positive $ n < n $. ( this is because the $ n ^ { \ text { th } } $ - order joint cdf is the limit of the $ n ^ { \ text { th } } $ - order cdf as $ n - n $ of the arguments approach $ \ infty $ : a generalization of $ f _ x ( x ) = \ lim _ { y \ to \ infty } f _ { x, y } ( x, y ) $ ). a strictly stationary random process then is a random process that is stationary to all orders $ n $. if a random process is stationary to ( at least ) order $ 1 $, then all the $ x ( t ) $'s have the same distribution and so, assuming the mean exists, $ e [ x ( t ) ] = \ mu $ is the same for all $ t $. similarly, $ e [ ( x ( t ) ) ^ 2 ] $ is the same for all $ t $, and is referred to as the power of the process. all physical processes have finite power and so it is common to assume that $ e [ ( x ( t ) ) ^ 2 ] < \ infty $ in which case, and especially in the older engineering literature, the process is called a second - order process. the choice of name is unfortunate because it invites confusion with second - order stationarity ( cf. this answer of mine on stats. se ), and so here we will call a process for which $ e [ ( x ( t ) ) ^ 2 ] $ is finite for all $ t $ ( whether or not $ e [ ( x ( t ) ) ^ 2 ] $ is a constant ) as a finite - power


process and avoid this confusion. but note again that a first - order stationary process need not be a finite - power process. consider a random process that is stationary to order $ 2 $. now, since the joint distribution of $ x ( t _ 1 ) $ and $ x ( t _ 1 + \ tau ) $ is the same as the joint distribution function of $ x ( t _ 2 ) $ and $ x ( t _ 2 + \ tau ) $, $ e [ x ( t _ 1 ) x ( t _ 1 + \ tau ) ] = e [ x ( t _ 2 ) x ( t _ 2 + \ tau ) ] $ and the value depends only on $ \ tau $. these expectations are finite for a finite - power process and their value is called the autocorrelation function of the process : $ r _ x ( \ tau ) = e [ x ( t ) x ( t + \ tau ) ] $ is a function of $ \ tau $, the time separation of the random variables $ x ( t ) $ and $ x ( t + \ tau ) $, and does not depend on $ t $ at all. note also that $ $ e [ x ( t ) x ( t + \ tau ) ] = e [ x ( t + \ tau ) x ( t ) ] = e [ x ( t + \ tau ) x ( t + \ tau - \ tau ) ] = r _ x ( - \ tau ), $ $ and so the autocorrelation function is an even function of its argument. a finite - power second - order stationary random process has the properties that its mean $ e [ x ( t ) ] $ is a constant its autocorrelation function $ r _ x ( \ tau ) = e [ x ( t ) x ( t + \ tau ) ] $ is a function of $ \ tau $, the time separation of the random variables $ x ( t ) $ and $ x ( t + \ tau ) $, and does not depend on $ t $ at all. the assumption of stationarity simplifies the description of a random process to some extent but, for engineers and statisticians interested in building models from experimental data, estimating all those cdfs is a nontrivial task, particularly when there is only a segment of one sample path ( or realization ) $ x ( t ) $ on which measurements can be made. two measurements that are relatively easy to make ( because the engineer already has


the necessary instruments on his workbench ( or programs in matlab / python / octave / c + + in his software library ) are the dc value $ \ frac 1t \ int _ 0 ^ t x ( t ) \, \ mathrm dt $ of $ x ( t ) $ and the autocorrelation function $ r _ x ( \ tau ) = \ frac 1t \ int _ 0 ^ t x ( t ) x ( t + \ tau ) \, \ mathrm dt $ ( or its fourier transform, the power spectrum of $ x ( t ) $ ). taking these measurements as estimates of the mean and the autocorrelation function of a finite - power process leads to a very useful model that we discuss next. a finite - power random process is called a wide - sense - stationary ( wss ) process ( also weakly stationary stochastic process which fortunately also has the same initialism wss ) if it has a constant mean and its autocorrelation function $ r _ x ( t _ 1, t _ 2 ) = e [ x ( t _ 1 ) x ( t _ 2 ) ] $ depends only on the time difference $ t _ 1 - t _ 2 $ ( or $ t _ 2 - t _ 1 $ ). note that the definition says nothing about the cdfs of the random variables comprising the process ; it is entirely a constraint on the first - order and second - order moments of the random variables. of course, a finite - power second - order stationary ( or $ n ^ { \ text { th } } $ - order stationary ( for $ n > 2 $ ) or strictly stationary ) random process is a wss process, but the converse need not be true. a wss process need not be stationary to any order. consider, for example, the random process $ \ { x ( t ) \ colon x ( t ) = \ cos ( t + \ theta ), - \ infty < t < \ infty \ } $ where $ \ theta $ takes on four equally likely values $ 0, \ pi / 2, \ pi $ and $ 3 \ pi / 2 $. ( do not be scared : the four possible sample paths of this random process are just the four signal waveforms of a qpsk signal ). note that each $ x ( t ) $ is a discrete random variable that, in general, takes on four equally likely values $ \ cos ( t ), \


cos ( t + \ pi / 2 ) = - \ sin ( t ), \ cos ( t + \ pi ) = - \ cos ( t ) $ and $ \ cos ( t + 3 \ pi / 2 ) = \ sin ( t ) $, it is easy to see that in general $ x ( t ) $ and $ x ( s ) $ have different distributions, and so the process is not even first - order stationary. on the other hand, $ $ e [ x ( t ) ] = \ frac 14 \ cos ( t ) + \ frac 14 ( - \ sin ( t ) ) + \ frac 14 ( - \ cos ( t ) ) + \ frac 14 \ sin ( t ) = 0 $ $ for every $ t $ while \ begin { align } e [ x ( t ) x ( s ) ] & = \ left. \ left. \ frac 14 \ right [ \ cos ( t ) \ cos ( s ) + ( - \ cos ( t ) ) ( - \ cos ( s ) ) + \ sin ( t ) \ sin ( s ) + ( - \ sin ( t ) ) ( - \ sin ( s ) ) \ right ] \ \ & = \ left. \ left. \ frac 12 \ right [ \ cos ( t ) \ cos ( s ) + \ sin ( t ) \ sin ( s ) \ right ] \ \ & = \ frac 12 \ cos ( t - s ). \ end { align } in short, the process has zero mean and its autocorrelation function depends only on the time difference $ t - s $, and so the process is wide sense stationary. but it is not first - order stationary and so cannot be stationary to higher orders either. even for wss processes that are second - order stationary ( or strictly stationary ) random processes, little can be said about the specific forms of the distributions of the random variables. in short, a wss process is not necessarily stationary ( to any order ), and the mean and autocorrelation function of a wss process is not enough to give a complete statistical description of the process. wss processes are a subclass of what are called covariance - stationary random processes. covariance - stationary processes have the property that the _ covariance function of the process, \ begin { align } c _ x ( t _ 1, t _