text:
# Solved papers for JEE Main & Advanced Physics Semiconducting Devices JEE PYQ-Semiconducting Devices

### done JEE PYQ-Semiconducting Devices Total Questions - 82

• question_answer1) The energy band gap is maximum in [AIEEE 2002]

A)
metals

B)
superconductors

C)
insulators

D)
semiconductors

• question_answer2) The part of a transistor which is most heavily doped to produce large number of majority carriers is [AIEEE 2002]

A)
emitter

B)
base

C)
collector

D)
can be any of the above three

• question_answer3) Formation  of  covalent  bonds  in compounds exhibits                                               [AIEEE 2002]

A)
wave nature of electron

B)
particle nature of electron

C)
both wave and particle nature of electron

D)
None of the above

• question_answer4) In the middle of the depletion layer of reverse biased p-n junction, the            [AIEEE 2003]

A)
electric field is zero

B)
potential is maximum

C)
electric field is maximum

D)
potential is zero

• question_answer5) Whentransistor is used as an amplifier                                   [AIEEE 2004]

A)
electrons move from base to collector

B)
holes move from emitter to base

C)
electrons move from collector to base

D)
holes move from base to emitter

• question_answer6) For a transistor amplifier in common emitter configuration for load impedance of and the current gain is                            [AIEEE 2004]

A)

B)

C)

D)

• question_answer7) The manifestation of band structure in solids is due to                        [AIEEE 2004]

A)
Heisenberg's uncertainty principle

B)
Pauli's exclusion principle

C)
Bohr's correspondence principle

D)
Boltzmann s law

• question_answer8) Whenjunction diode is forward biased, then,                                         [AIEEE 2004]

A)
the depletion region is reduced and barrier height is increase

B)
the depletion region is widened and barrier height is reduced

C)
both the depiction region and barrier height are reduced

D)
both the depletion region and barrier height are increased

• question_answer9) The electrical conductivity of a semiconductor     increases     when electromagnetic radiation of wavelength shorter than 2480 nm, is incident on it. The band gap for the semiconductor is                      [AIEEE 2005]

A)
1.1 eV

B)
2.5 eV

C)
0.5 eV

D)
0.7 eV

• question_answer10) In a common base amplifier, the phase difference between the input signal voltage and output voltage is                   [AIEEE 2005]

A)

B)

C)
zero

D)

• question_answer11) In a full wave rectifier, circuit operating from 50 Hz mains frequency, the fundamental frequency in the ripple would be [AIEEE 2005]

A)
50 Hz

B)
25 Hz

C)
100 Hz

D)
70.7 Hz

• question_answer12) In a common-base mode of a transistor, the collector current is 5.488 mA for an emitter current of 5.60 mA. The value of the base current amplification factor (P) will be          [AIEEE 2006]

A)
49

B)
50

C)
51

D)
48

• question_answer13) A solid which is not transparent to visible light and whose conductivity increases with temperature is formed by            [AIEEE 2006]

A)
ionic bonding

B)
covalent bonding

C)
van der Waals' bonding

D)
metallic bonding

• question_answer14) In the following, which one of the diodes is reverse biased?                             [AIEEE 2006]

A)

B)

C)

D)

• question_answer15)  If the lattice constant of this semiconductor is decreased, then which of the following is correct? [AIEEE 2006]

A)
All increase

B)
andincrease, butdecreases

C)
anddecrease, butincreases

D)
Alldecrease

• question_answer16)  If in ajunction diode, a square input signal of 10 V is applied as shown Then, the output signal across  will be                                            [AIEEE 2007]

A)

B)

C)

D)

• question_answer17) Carbon, silicon and germanium have four valence electrons each. At room temperature, which one of the following statements is most appropriate?                                   [AIEEE 2007]

A)
The number of free conduction electrons is significant in C but small in Si and

B)
The number of free conduction electrons is negligibly small in all the three

C)
The number of free electrons for conduction is significant in all the three

D)
The number of free electrons for conduction is significant only inandbut small in C

• question_answer18) A working transistor with its three legs marked P, Q and R is tested using a multimeter. No conduction is found between P and Q. By connecting the common (negative) terminal of the multimeter to R and the other (positive) terminal to P or Q, some resistance is seen on the multimeter. Which of the following is true for the transistor?                                           [AIEEE 2008]

A)
It is a pnp transistor with R as emitter

B)
It is an npn transistor with R as collector

C)
It is an npn transistor with R as base

D)
It is a pnp transistor with R as collector

• question_answer19)  In the circuit shown, A and B represent two inputs and C represents the output. The circuit represents                      [AIEEE 2008]

A)
NAND gate

B)
OR gate

C)
NOR gate

D)
AND gate

• question_answer20)  A p-n junction (4) shown in the figure can act as a rectifier. An alternating current source (V) is connected in the circuit. The current (I) in the resistor (R) can be shown by:                                         [AIEEE 2009]

A)

B)

C)

D)

• question_answer21)  The logic circuit shown below has the input waveforms 'A' and 'B' as shown. Pick out the correct output waveform. Output is:                                 [AIEEE 2009]

A)

B)

C)

D)

• question_answer22)  The combination of gates shown below yields                                                 [AIEEE 2010]

A)
NAND gate

B)
OR gate

C)
NOT gate

D)
XOR gate

• question_answer23) The output of an OR gate is connected to both the inputs of a NAND gate. The combination will serve as a:                  [AIEEE 11-05-2011]

A)
NOT gate

B)
NOR gate

C)
AND gate

D)
OR gate

• question_answer24)  Truth table for system of four NAND gates as shown in figure is: [AIEEE 2012]

A)

B)

C)

D)

• question_answer25)  Which logic gate with inputs A and B performs the same operation as that performed by the following circuit?       [JEE ONLINE 07-05-2012]

A)
NAND gate

B)
OR gate

C)
NOR gate

D)
AND gate

• question_answer26)  This question has Statement 1 and Statement 2 Of the four choices given after the Statements, choose the one that best describes the two Statements. Statement 1: A pure semiconductor has negative temperature coefficient of resistance. Statement 2: On raising the temperature, more charge carriers are released into the conduction band.      [JEE ONLINE 12-05-2012]

A)
Statement 1 is false. Statement 2 is true.

B)
Statement 1 is true. Statement 2 is false.

C)
Statement 1 is true. Statement 2 is true, Statement 2 is not a correct explanation of Statement 1.

D)
Statement 1 is true. Statement 2 is true, Statement 2 is the correct explanation of Statement 1.

• question_answer27) Which one of the following is the Boolean expression for NOR gate? [JEE ONLINE 19-05-2012]

A)

B)

C)

D)

• question_answer28)  The figure shows a combination of two NOT gates and a NOR gate. [JEE ONLINE 26-05-2012] The combination is equivalent to a

A)
NAND gate

B)
NOR gate

C)
AND gate

D)
OR gate

• question_answer29) The I − V characteristic of an LED is:                                              [JEE MAIN 2013]

A)

B)

C)

D)

• question_answer30)  Consider two transistors as shown in figure. If 0 `volts corresponds to false and 5Volts correspond to true then the output at corresponds to:           [JEE ONLINE 09-04-2013

A)
A NAND B

B)
A OR B

C)
A AND B

D)
A NOR B

• question_answer31)  Figure shows a circuit in which three identical diodes are used. Each diode has forward resistance of 20  and infinite backward resistance. Resistors . Battery voltage is 6 V. The current though . [JEE ONLINE 22-04-2013]

A)
50 mA

B)
100 mA

C)
60 mA

D)
25 mA

• question_answer32)  A system of four gates is set up as shown. The 'truth table' corresponding to this system is: [JEE ONLINE 23-04-2013]

A)

B)

C)

D)

• question_answer33)  Which of the following circuits correctly represents the following truth table? [JEE ONLINE 25-04-2013]

A)

B)

C)

D)

• question_answer34) The forward biased diode connection is:                                                      [JEE MAIN 2014]

A)

B)

C)

D)

• question_answer35)  Identify the gate and match A, B, Y in bracket to check.                   [JEE ONLINE 09-04-2014]

A)
AND (A = 1, B = 1, Y = 1)

B)
OR (A = 1, B = 1, Y = 0)

C)
NOT (A = 1, B = 1, Y = 1)

D)
XOR (A = 0, B = 0, Y = 0)

• question_answer36) An n-p-n transistor has three leads A, B and C. Connecting B and C by moist fingers, A to the positive lead of an ammeter, and C to the negative lead of the ammeter, one finds large deflection. Then, A, B and C refer respectively to:                             [JEE ONLINE 09-04-2014]

A)
Emitter, base and collector

B)
Base, emitter and collector

C)
Base, collector and emitter

D)
Collector, emitter and base

• question_answer37)  Zener diode is connected to a battery and a load as show below: The currents,  and  are respectively.                          [JEE ONLINE 11-04-2014]

A)
15 mA, 5 mA, 10 mA

B)
15 mA, 7.5 mA, 7.5 mA

C)
12.5 mA, 5 mA, 7.5 mA

D)
12.5 mA, 7.5 mA, 5 mA

• question_answer38) For LEDs to emit light in visible region of electromagnetic light, it should have energy band gap in the range of:                                                         [JEE ONLINE 12-04-2014]

A)
eV to 0.4 eV

B)
0.5 eV to 0.8 eV

C)
0.9 eV to 1.6 eV

D)
1.7 eV to 3.0 eV

• question_answer39)  Given: A and B are input terminals. Logic 1 = > 5 V Logic 0 = < 1 V Which logic gate operation, the above circuit does?                         [JEE ONLINE 19-04-2014]

A)
AND Gate

B)
OR Gate

C)
XOR Gate

D)
NOR Gate

• question_answer40) In an unbiased n-p Junction electrons diffuse from n - region to p - region because:          [JEE ONLINE 10-04-2015]

A)
only electrons move from n to p  holes in p- region and not the vice - versa

B)
holes in p - region attract them

C)
electrons travel across the junction due to potential difference

D)
electron concentration in n - region is more as compared to that in p-region

• question_answer41)  The value of the resistor, needed in the dc voltage regulator circuit shown here, equals : [JEE MAIN 11-04-2015]

A)

B)

C)

D)

• question_answer42)  A 2V battery is connected across AB as shown in the figure. The value of the current supplied by the battery when in one case battery's positive terminal is connected to A and in other case when positive terminal of battery is connected to B will respectively be : [JEE MAIN 11-04-2015]

A)
0.2 A and 0.1 A

B)
0.4 A and 0.2 A

C)
0.1 A and 0.2 A

D)
0.2 A and 0.4 A

• question_answer43) For a common emitter configuration, if and have their usual meanings, the incorrect relationship betweenandis [JEE MAIN - I 3-4-2016]

A)

B)

C)

D)

• question_answer44)  If a, b, c, d are inputs to a gate and x is its output, then as per the following time graph, the gate is                [JEE MAIN - I 3-4-2016] [d] [c] [b] [a] (x)

A)
NAND

B)
NOT

C)
AND

D)
OR

• question_answer45)  Identify the semiconductor devices whose characteristics are given below, in the order , , , :-  e       [JEE MAIN - I 3-4-2016] [a] [b] *-correct-answer-description-* [b] Factual [c] [d]

A)
Zener diode, Solar cell, Simple diode, Light dependent resistance

B)
Simple diode, Zener diode, Solar cell, Light dependent resistance

C)
Zener diode, Simple diode, Light dependent resistance, Solar cell

D)
Solar cell, Light dependent resistance, Zener diode, Simple diode

• question_answer46) An unknown transistor needs to be identified as npn or pnp type. A multi meter, with +ve and -ve terminals, is used to measure resistance between different terminals transistor. If terminal 2 is the base of the transistor then which of the following is correct for a pnp transistor? [JEE ONLINE 09-04-2016]

A)
+ve terminal 3, -ve terminal 2, resistance high

B)
+ve terminal 2, -ve terminal 3, resistance low

C)
+ve terminal 1, -ve terminal 2, resistance high

D)
+ve terminal 2, -ve terminal 1, resistance high

• question_answer47) An experiment is performed to determine the I - V characteristics of a Zener diode, which has a protective resistance of and maximum power of dissipation rating of 1W. The minimum voltage range of the DC source in the circuit is:                   [JEE ONLINE 09-04-2016]

A)
0. 12V

B)
0. 5V

C)
0. 24

D)
0. 8V

The truth table given in fig. represents:         [JEE ONLINE 09-04-2016]
 A B Y 0 0 0 0 1 1 1 0 1 1 1 1

A)
AND - Gate

B)
OR - Gate

C)
NOR - Gate

D)
NAND - Gate

• question_answer49) A realistic graph depicting the variation of the reciprocal of input resistance in an input characteristics measurement in a common emitter transistor configuration is:                      [JEE ONLINE 10-04-2016]

A)

B)

C)

D)

• question_answer50)  To get an output of 1 from the circuit shown in figure the input must be: [JEE ONLINE 10-04-2016]

A)
a = 1, b = 1, c = 0

B)
a = 1, b = 0, c = 0

C)
a = 0, b = 0, c = 1

D)
a = 1, b = 0, c = 1

• question_answer51) The ratio (R) of output resistance , and the input resistance  in measurements of input and output characteristics of a transistor is typically in the range:   [JEE ONLINE 10-04-2016]

A)

B)

C)

D)

• question_answer52) In a common emitter amplifier circuit using an n-p-n transistor, the phase difference between the input and the output voltages will be:                                   [JEE Main 2017]

A)

B)

C)

D)

• question_answer53) What is the conductivity of a semiconductor sample having electron concentration of  hole concentration of  electron mobility of and hole mobility of (Take charge of electron as ) [JEE Online 08-04-2017]

A)

B)

C)

D)

• question_answer54)  The V-I characteristic of a diode is shown in the figure. The ratio of forward to reverse bias resistance is :            [JEE Online 08-04-2017]

A)
100

B)
106

C)
10-6

D)
10

• question_answer55) The current gain of a common emitter amplifier is 69. If the emitter current is 7.0 mA, collector current is- [JEE Online 09-04-2017]

A)
69 mA

B)
0.69 mA

C)
6.9 mA

D)
9.6 mA

• question_answer56)  The reading of the ammeter for a silicon diode in the given circuit is : [JEE Main Online 08-04-2018]

A)
11.5 mA

B)
13.5 mA

C)
0

D)
15 mA

• question_answer57)  In a common emitter configuration with suitable bias, it is given than ${{R}_{L}}$ is the load resistance and ${{R}_{BE}}$ is small signal dynamic resistance (input side). Then, voltage gain, current gain and power gain are given, respectively, by:          [JEE Online 15-04-2018] $\beta$ is current gain, ${{I}_{B}},{{I}_{C}},{{I}_{E}}$ are respectively base, collector and emitter currents:

A)
$\beta \frac{{{R}_{L}}}{{{R}_{BE}}},\frac{\Delta {{I}_{E}}}{\Delta {{I}_{B}}},{{\beta }^{2}}\frac{{{R}_{L}}}{{{R}_{BE}}}$

B)
${{\beta }^{2}}\frac{{{R}_{L}}}{{{R}_{BE}}},\frac{\Delta {{I}_{C}}}{\Delta {{I}_{B}}},\beta \frac{{{R}_{L}}}{{{R}_{BE}}}$

C)
${{\beta }^{2}}\frac{{{R}_{L}}}{{{R}_{BE}}},\frac{\Delta {{I}_{C}}}{\Delta {{I}_{B}}},{{\beta }^{2}}\frac{{{R}_{L}}}{{{R}_{BE}}}$

D)
$\beta \frac{{{R}_{L}}}{{{R}_{BE}}},\frac{\Delta {{I}_{C}}}{\Delta {{I}_{B}}},{{\beta }^{2}}\frac{{{R}_{L}}}{{{R}_{BE}}}$

• question_answer58)  Truth table for the given circuit will be [JEE Online 15-04-2018 (II)]

A)

B)

C)

D)

• question_answer59)  In the given circuit, the current through zener diode is:                [JEE Main Online 16-4-2018]

A)
2.5 mA

B)
3.3 mA

C)
5.5 mA

D)
6.7 mA

• question_answer60) Mobility of electrons in a semiconductor is defined as the ratio of their drift velocity to the applied electric field. If, for an n-type semiconductor, the density of electrons is  and their mobility is  then the resistivity of the semiconductor (since it is an n-type semiconductor contribution of holes is ignored) is close to: [JEE Main 09-Jan-2019 Morning]

A)

B)

C)

D)

• question_answer61)  Ge and Si diodes start conducting at 0.3 V and 0.7 V respectively. In the following figure if Ge diode connection are reversed, the value of  changes by: (assume that the Ge diode has large breakdown voltage) [JEE Main 09-Jan-2019 Evening]

A)
0.4 V

B)
0.6 V

C)
0.8 V

D)
0.2 V

• question_answer62)  To get output 'I' at R, for the given logic gate circuit the input values must be- [JEE Main 10-Jan-2019 Morning]

A)

B)

C)

D)

• question_answer63)  For the circuit shown below, the current through the Zener diode is-    [JEE Main 10-Jan-2019 Evening]

A)
5 mA

B)
zero

C)
14 mA

D)
9 mA

• question_answer64)  The circuit shown below contains two ideal diodes, each with a forward resistance of  If the battery voltage is 6 V, the current through the resistance (in Amperes) is [JEE Main 11-Jan-2019 Evening]

A)
0.030

B)
0.027

C)
0.020

D)
0.036

• question_answer65)  The output of the given logic circuit is-                   [JEE Main 12-Jan-2019 Morning]

A)

B)

C)

D)

• question_answer66)  In the figure, given that supply can vary from 0 to and The minimum base current and the input voltage at which the transistor will go to saturation, will be respectively [JEE Main 12-Jan-2019 Evening]

A)
and 3.5 V

B)
and 3.5V

C)
and 2.8 V

D)
and 2.8 V

• question_answer67)  The reverse breakdown voltage of a Zener diode is 5.6 V in the given circuit. The current  through the Zener is : [JEE Main 8-4-2019 Morning]

A)
7 mA

B)
17 mA

C)
10 mA

D)
15mA

• question_answer68)  A common emitter amplifier circuit, built using an npn transistor, is shown in the figure. Its dc current gain is and What is the minimum base current for  to reach saturation? [JEE Main 8-4-2019 Afternoon]

A)

B)

C)

D)

• question_answer69) An NPN transistor is used in common emitter configuration as an amplifier with load resistance. Signal voltage of 10 mV is applied across the base-emitter. This produces a 3 mA change in the collector current and  change in the base current of the amplifier. The input resistance and voltage gain are: [JEE Main 9-4-2019 Morning]

A)

B)

C)

D)

• question_answer70)  The logic gate equivalent to the given logic circuit is :-    [JEE Main 9-4-2019 Afternoon]

A)
OR

B)
AND

C)
NOR

D)
NAND

• question_answer71) An npn transistor operates as a common emitter amplifier, with a power gain of 60 dB. The input circuit resistance is and the output load resistance is The common emitter current gain b is :      [JEE Main 10-4-2019 Morning]

A)

B)

C)

D)

• question_answer72)  The figure represents a voltage regulator circuit using a Zener diode. The breakdown voltage of the Zener diode is 6V and the load resistance is The series resistance of the circuit is If the battery voltage varies from 8V to 16V, what are the minimum and maximum values of the current through Zener diode? [JEE Main 10-4-2019 Afternoon]

A)
0.5 mA ; 6 mA

B)
0.5 mA ; 8.5 mA

C)
1.5 mA ; 8.5 mA

D)
1 mA ; 8.5 mA

• question_answer73)  The truth table for the circuit given in the fig. is: [JEE Main Held on 12-4-2019 Morning]

A)

B)

C)

D)

• question_answer74)  The transfer characteristic curve of a transistor, having input and output resistance  and respectively, is shown in the figure. The Voltage and Power gain, are respectively : [JEE Main Held on 12-4-2019 Morning]

A)

B)

C)

D)

• question_answer75)  Figure shown a DC voltage regulator circuit, with a Zener diode of breakdown voltage = 6V. If the unregulated input voltage varies between 10 V to 16 V, then what is the maximum Zener current? [JEE Main 12-4-2019 Afternoon]

A)
2.5 mA

B)
3.5 mA

C)
7.5 mA

D)
1.5 mA

• question_answer76) Which of the following gives a reversible operation? [JEE MAIN Held on 07-01-2020 Morning]

A)

B)

C)

D)

• question_answer77)  In the figure, potential difference between A and B is : [JEE MAIN Held on 07-01-2020 Evening]

A)
Zero

B)
5 V

C)
10 V

D)
15 V

• question_answer78)  Boolean relation at the output stage-Y for the Following circuit is: [JEE MAIN Held On 08-01-2020 Morning]

A)
$\overline{A}.\overline{B}$

B)
$A.B$

C)
$A+B$

D)
$\overline{A}+\overline{B}$

• question_answer79)  Both the diodes used in the circuit shown are assumed to be ideal and have negligible resistance when these are forward biased. Built in potential in each diode is 0.7 V. For the input voltages shown in the figure, the voltage (in Volts) at point A is ___________ [JEE MAIN Held on 09-01-2020 Morning]

• question_answer80)  The current i in the network is [JEE MAIN Held on 09-01-2020 Evening]

A)
0.3A

B)
0.6 A

C)
0 A

D)
0.2 A

• question_answer81)  Two identical capacitors A and B, charged to the same potential 5V are connected in two different circuits as shown below at time t = 0. If the charge on capacitors A and B at time t = CR is ${{Q}_{A}}$ and ${{Q}_{B}}$ respectively, then (Here e is the base of natural logarithm) [JEE MAIN Held on 09-01-2020 Evening]

A)
${{Q}_{A}}=\frac{CV}{2},{{Q}_{B}}=\frac{VC}{e}$

B)
${{Q}_{A}}=VC,{{Q}_{B}}=CV$

C)
${{Q}_{A}}=\frac{CV}{e},{{Q}_{B}}=\frac{VC}{2}$

D)
${{Q}_{A}}=VC,{{Q}_{B}}=\frac{VC}{e}$

• question_answer82)  The circuit shown below is working as a $8\text{ }V\text{ }dc$regulated voltage source. When 12 V is used as input, the power dissipated (in mW) in each diode is; (considering both zener diodes are identical) ______. [JEE MAIN Held on 09-01-2020 Evening]


text:
# Empty Product

In mathematics, an empty product, or nullary product, is the result of multiplying no factors. It is equal to the multiplicative identity 1, given that it exists for the multiplication operation in question, just as the empty sum—the result of adding no numbers—is zero, or the additive identity.

When a mathematical recipe says "multiply all the numbers in this list", and the list contains, say, 2, 3, 2 and 4, we multiply first the first number by the second, then the result by the third, and so on until the end of the list, so the product of (2,3,2,4) would be 48. If the list contains only one number, so that we cannot multiply first by second, common convention holds that the 'product of all' is that same number, and if the list has no numbers at all, the 'product of all' is 1. This value is necessary to be consistent with the recursive definition of what a product over a sequence (or set, given commutativity) means. For example,

\begin{align} \text{prod}(\{2,3,5\}) & = \text{prod}(\{2,3\}) \times 5 = \text{prod}(\{2\}) \times 3 \times 5 \\ & = \text{prod}(\{\}) \times 2 \times 3 \times 5 = 1 \times 2 \times 3 \times 5. \end{align}

In general, we define

The empty product is used in discrete mathematics, algebra, the study of power series, and computer programs.

The term "empty product" is most often used in the above sense when discussing arithmetic operations. However, the term is sometimes employed when discussing set-theoretic intersections, categorical products, and products in computer programming; these are discussed below.

Read more about Empty Product:  0 Raised To The 0th Power, Nullary Conjunction and Intersection, Nullary Cartesian Product, Nullary Categorical Product, In Computer Programming

### Famous quotes containing the words empty and/or product:

Poetry is either something that lives like fire inside you—like music to the musician or Marxism to the Communist—or else it is nothing, an empty formalized bore around which pedants can endlessly drone their notes and explanations.
F. Scott Fitzgerald (1896–1940)

The writer’s language is to some degree the product of his own action; he is both the historian and the agent of his own language.
Paul De Man (1919–1983)

format: plain


text:
## Thursday, June 13, 2013

### When is an Autoregressive Model Dynamically Stable?

Autoregressive processes arise frequently in econometrics. For example, we might have a simple dynamic model of the form:

yt = β0 + β1yt-1 + εt   ;   εt ~ i.i.d.[0 , σ2]       .           (1)

Or, we might have a regression model in which everything is "standard", except that the errors follow an autoregressive process:

yt = β0 + β1xt + ut               (2)

ut = ρ ut-1 + εt    ;  εt ~ i.i.d.[0 , σ2] .

In each of these examples a first-order autoregressive, or AR(1), process is involved.

Higher-order AR processes are also commonly used. Although most undergrad. econometrics students are familiar with the notion of "stationarity" in the context of an AR(1) process, often they're not aware of the conditions needed to ensure the stationarity of more general AR models. Let's take a look at this issue.

First, what do we mean by a stochastic process that's "stationary"?

There are several types of "stationarity". Here, I'm going to use what we call "weak stationarity" (or "covariance stationarity"). What this means is that the mean and variance of the process are both finite and must not depend on time; and the covariances between pairs of random values from the process can depend on how far apart the values are in time, but not the value of time itself.

let's go back to the model in (1) above, and see what we mean by "stationarity" in this simple case. Notice that if we lag the equation by one period, we get:

yt-1 = β0 + β1yt-2 + εt-1   ;      εt-1 ~ i.i.d.[0 , σ2]  .                (3)

Now, use (3) to eliminate yt-1 from (1), yielding:

yt = β0 + β1 [ β0 + β1yt-2 + εt-1 ] + εt  .

Now, keep doing this repeatedly, and we end up with:

yt = β[1 + β1 + β12 + β13 + .......] + [εt + β1 εt-1 + β12εt-2 + ....]

or,

yt = β0Σ( β1) + Σ( β1iεt-i ),                        (4)

where the range of summation is from zero to infinity in each case.

Given what we assumed about the εt values in equation (1), we see from (4) that:
• E[ yt ] =  β0Σ( β1) = μ   ;    say
• var.[ yt ] = σ2 Σ( β12i)
• cov.[ εt , εs ] = 0  ;    for all t ≠ s .
Now, recalling some simple high school math, we know that  Σ( β1) converges to the finite limit (1 - β1)-1, if and only if |β1| < 1. That is, it converges if and only if β1 lies strictly inside the unit interval. If this condition holds, then both E[ yt ] and var.[ yt ] will be finite - and you can see that neither they nor the covariances depend on the value of 't'. This condition on the value of β1 ensures that the series, yt, is covariance stationary.

The case where β1 = 1 is termed the "unit root" case, for reasons that will become even more apparent below; and if | β| > 1, the yt series is "explosive". Let's see why this particular terminology is used. If the stationarity condition is not satisfied, then any "shock" to the yt series will lead to a subsequent time-path that has an unbounded mean and variance. On the other hand, if the process is stationary, then following such a "shock", the time-path for yt will eventually settle down to what it was previously. The shock will be "absorbed". For this reason we often say that non-stationary time-series have "long memories".

Let's see some examples of this. (Keep in mind that you can enlarge the charts by clicking on them.)

If you don't believe that this really is an explosive case, let's go out to t = 100:

The Eviews file that I used to create these charts is on the code page for this blog.

More generally, let's suppose that we have an AR(p) model, of the form:

yt = γ1 yt-1 + γ2 yt-2 + .......... + γp yt-p + εt   ;         εt ~ i.i.d.[0 , σ2]

Then the condition that must be satisfied in order that this model is dynamically stable is that all of the roots of the following so-called "characteristic equation"

1 - γ1 z - γ2 z2 - ..... - γp zp = 0  ,

lie strictly outside the unit circle.

It's worth noting that some authors define the characteristic equation as

zp - γ1 zp-1 - γ2 zp-2 - ...... - γp = 0 ,

and then the AR(p) process will be stationary if all of this equation's roots lie strictly inside the unit circle.

Let's go back to the AR(1) model - that is, set p = 1. In that case, the characteristic equation is

1 - γ1 z = 0.

Solving for z, we get z = 1 / γ1so the stationarity condition is that |1 / γ1| > 1; or, equivalently, |γ1| < 1. This is exactly the condition that we saw above, now in our new notation.

Next, let's think about a series that is second-order autoregressive, or AR(2). In this case, the conditions that need to be satisfied to ensure stationarity of the series are more complicated. Suppose that our AR(2) model for Y is written as:

yt = γ1 yt-1 + γ2 yt-2 + εt    ;      εt ~ i.i.d.[0 , σ2]  .

This model will be stationary (i.e., dynamically stable) if the roots of the characteristic equation,

1 - γ1z - γ2z2 = 0  ,

all lie strictly outside the unit circle.  Equivalently, the roots of the equation,

z2 - γ1z - γ2 = 0,

must lie strictly inside the unit circle.

As I show in this attachment, when these roots are real (rather than complex) this is equivalent to requiring that the coefficients  of the AR(2) model satisfy all of the following three conditions:
1. 1 + γ2) < 1
2. 2 - γ1) < 1
3. 2| < 1
These three conditions allow us to depict the stationary and non-stationary regions of the parameter space in the following way:

Notice that this diagram also identifies the regions in the parameter space in which the series will respond to shocks in an oscillatory or non-oscillatory manner. The following two graphs illustrate this for two stationary AR(2) processes. In the first case, we have γ1 = 0.1 and γ2 = 0.8, so we are in the stationary/non-oscillatory region in the above chart:

The next case is for γ1 = 0.1 and γ2 = -0.8, so we are now in the stationary/oscillatory region of the parameter space:

A "blow-up" of these last two graphs follows:

Again, the EViews file that I used to create these data and charts is on the code page for this blog.
As we move to AR processes of higher order, the conditions that the parameters have to satisfy, to ensure that the process is stationary, become increasingly complicated to write down. However, the same basic principle applies - the roots of the associated "characteristic equation" must lie strictly outside the unit circle. Or, equivalently, the inverse roots must lie strictly inside that circle.

This is a condition that can be checked numerically, once we have values (estimates) of the coefficients of the AR process. It's just a matter of solving the characteristic equation for its roots, using these estimated values for the coefficients. Keep in mind that the roots will be functions of the coefficients, as we saw in the AR(1) and AR(2) cases.

In other words, even if it's really difficult to write down the formulae for the roots of the characteristic equation, it's a relatively simple matter to solve the equation for these roots, numerically. When we're estimating AR models using EViews, this gets done as a matter of course. In addition, you can request a diagram of the results, which is especially helpful if some of the roots are complex (rather than real).

To illustrate this, let's look at an example in which a restricted AR(4) model is used to "explain" the logarithm of real imports into Canada from the U.S.. The quarterly data exhibit a seasonal pattern, so seasonal dummy variables are included in the model:

Notice that the coefficient of the 1-period lagged value of the dependent variable is less than one in absolute value. So, we might be tempted to conclude that the model is dynamically stable. However, let's see what happens if we re-estimate the model using an apparently different, but mathematically equivalent, way:

The estimated coefficients and standard errors for the lagged values of the dependent variable in the first output are identical to the coefficients of the AR terms in the second output. Although the estimated intercept and dummy variable coefficients are different, in fact the model "fit" is identical in each case. You might guess this by observing that any of the reported statistics that are based on the residuals (e.g., R2, F-statistic, D-W statistic) are identical across the outputs.

However, the really interesting thing about the second set of results is that we now see the inverse roots of the characteristic equation associated with the restricted AR(4) process that we've used. This equation has four roots, of course, and it happens that ion this case there are two real roots, and a complex conjugate pair of roots. (More on the latter point below.) In particular, one of the real roots is one in value! Let's see this graphically:

Oh dear - we have a "unit root" situation associated with the dynamics of our AR(4) model. Note that I'm referring to the AR(4) process that describes how log(IMP) is related to lags of log(IMP). I'm not talking about the errors of that regression model.

Not surprisingly, when we "shock" the process by an amount equal to one sample standard deviation for the IMP variable, the shock does not die out. The effect just keeps on accumulating:

What can I do about this? Well, the log(IMP) data series itself is actually non-stationary, and I didn't take this into account. Using both the ADF test and the KPSS test, it's clear that the series is integrated of order one (i.e., I(1)). So, I need to first-difference the log(IMP) series to make it stationary, and then model it. Here's what I get:

In this case, the model for log(IMP) is dynamically stable, as we can see from the following diagram:

Once again, the characteristic equation has two real roots, and a complex conjugate pair of roots - and the inverted roots are all strictly inside the unit circle.

The EViews file for this example is on the code page for this blog, and the imports data are in a text file on then data page.

A few words of explanation may be in order with respect to the charts that show the inverse roots of the characteristic equation. These charts are in the form of an Argand diagram. They allow for the fact that some roots may be complex numbers, of the form z = (x  +/ -iy), where the imaginary number, i, satisfies i2 = -1. The X-axis in those diagrams plots the real (x) part of z, and the Y-axis plots the imaginary (y) part of z. So, if a root is real, it will lie on the horizontal axis; but if it's complex, if will be located at the point (x , y).

If you want to explore Argand diagrams interactively, you can always use this Wolfram cdf file.

What's the take-away message from all of this?

If you look back to the very first set of OLS results above, you'll see that the coefficient of log(IMP)t-1 was 0.8948. It was less than one in absolute value. However, once the full dynamic structure of the model was taken into account we found that the model was actually unstable. If you're estimating a higher-order AR process, you need to take special care when interpreting the magnitudes of the estimated coefficients!

Being able to see the values of the roots of the characteristic equation  is enormously helpful when we're estimating an AR model (or, for that matter an MA or ARMA model). You certainly don't to inadvertently use a model that's dynamically unstable for forecasting purposes!
.

© 2013, David E. Giles

1. I tend to shy away from the advice to always difference when you have a unit root if your concern is primarily forecasting and you're not emphasizing hypothesis tests. The main reason is that when you generalize to a VAR, one variable having a unit root doesn't mean that all variables should be differenced. I could have equity prices and interest rates. On their own, the equity prices could be differenced, but the interest rates shouldn't. Together, the situation becomes more complicated.

I liked that you stress that it can be difficult to write down the formula for the roots even though it can be straightforward to find them numerically. I tried to use Matlab's symbolic math toolbox to derive them for even small size VARs on they look really complicated.

I will say that when I was learning about time series, I never had any idea what my Prof was talking about when she was talking about the characteristic equation since she didn't really explain how it comes about (or if she did, I didn't understand it). A matrix representation of the process makes it far more obvious, IMHO.

1. John - thanks for the constructive comments. I totally agree about the differencing, in general. I think my view on this will be clear from my other posts on VAR models, Granger causality, etc.

DG

2. Hello Prof. Giles,

Under equation 4, where you have the first two moments and the autocovariance, since var(ax) = a^2*var(x), should it not be that var(y) = sigma^2 * sum(beta1 ^ 2) ?

Thanks!

1. JJ - thanks! Fixed!

3. Prof. Giles,

If I am estimating a regression model in difference or log difference form to address stationarity, is it still meaningful to put a trend variable? Thanks.

1. Only if the transformed data still exhibits a deterministic trend. This is unlikely after differencing.

4. Pro. Giles,
I estimated an ARIMA model, if one root of MA is 0.98, is there any problems to forecast with it? Thanks.

1. That depends on the other rots, including those associated with the AR process. You need to check the stationarity of the AR component and the invertibility of the full MA component. For example, if you have an MA(2) process, the invertibility condition are (Theta1+Thea2) < 1 & (Theta2 - Theta1) < 1 & |Theta2| < 1 . Just looking at one of the roots isn't enough.

5. Dear Prof. Giles,
Thanks for useful information. Can you please give the procedure how inverse roots of AR/MA polynomials can be obtained and graphed in Eviews software ? I really appreciate your help.
Thanks.

1. Once you've fitted the model, select "View", "ARMA Structure", "Roots", Graph".
This is all in "HELP".

2. Thank you so much for prompt reply.

6. Trivial typo: In the repeated substitution expression that appears just above equation (4), the B0 term is missing. It is correctly included in equation (4), however, in the form of B0*B1^0.

1. Thanks for spotting that. Now fixed.

7. Great post. Does the cointegration concept apply to AR(m) model?
For example, my goal is to use variable X(such as maket interest rate ) to forecast y (such as product pricing) by fitting AR(m) model as below
y_t=x_t*β+v_t
v_t=-φ_1* v_(t-1)-…-φ_m *v_(t-m)+ε_t

However I found out both x and y are stationary I(1). If I fit the AR model with my orginal data without differencing, what necessary steps I should take to verify x and y are cointegrated in the AR model? Does the cointegration concept apply to AR(m) model with nonstationary x and y? Thanks

1. If x and y are both I(1) then I think you meant to say that they are NON-stationary. In this case, the usual cointegration methods apply in this context.

8. Hi Dr.Giles
If I use the residual based two step Engle-Granger approach to prove cointegration for AR(m) model,

y_t=x_t*β+v_t
v_t=-φ_1* v_(t-1)-…-φ_m *v_(t-m)+e_t

which residual term, v_t or e_t, should I pick to test for stationarity in order to prove cointegration? Your answer is appreciated.

9. Dear Prof Giles
Nice blog Sir, My question is regarding the Image of Inverse roots of AR characteristics of Polynomials. As on of the observation is just on the boundary of circle. Could we consider this system stable enough to proceed further

1. That's analagous to the "unit root" case, and has the same adverse implications. The system isn't stationary.

10. thanks prof.Giles, for your valuable and fruitful discussion on ARDL and related topics.

11. Dear Professor Giles,
I run a VAR model in STATA, and find that is not stable. Noted the series are stationary.

What can be probable solution?

best regards,

1. Don't use STATA! (Just kidding). You'll have to adjust the maximum lag lengths.

12. Dear Professor, thanks a lot for sharing this information. I have a doubt in the second characteristic equation (zp - γ1 zp-1 - γ2 zp-2 - ...... - γp = 0) of the AR model. The signs of the terms in the equation are different from what I observed in other texts (zp + γ1 zp-1 + γ2 zp-2 + ...... + γp = 0). Of course, the change in signs have significant impacts on assessing the behaviour of the process. Could you please share your comments on this?

1. It's simply that there are 2 conventions. Then you either look at the roots, or the inverse roots. In the end it amounts to the same thing.

13. I really had a hard time trying to understand characteristic roots until now. Your explanations were so much clearer. Thank you Prof., please keep this going!

14. Prof Giles, I will appreciate if you help in clarifying some concepts about implications of complex roots. What are the implications of complex roots in AR processes? Tsay says that they give rise to business cycles. This may be true with annual or quarterly aggregate economic series but how to interpret the complex roots of the AR/ARMA processes fitted to e.g daily data or non-macro series?

1. Yes, the series will oscillate in this case. I wouldn't call it a "business cycle" in such cases.

15. Where did y_{t-k} go on the right hand side of equation 4?

1. As I said in the text, you just keep substituting. You replace y_(t-2) with beta_0 + beta_1*y_(t-3) + epsilon_(t-2); etc. You do this indefinitely. Note that the ranges of summation are from zero to infinity.


text:
# How many Jellybeans are in the bottle

There are $n$ jellybeans in a bottle with unknown dimensions. What is the only surefire way of knowing how many jellybeans are in the bottle?

• +1, an easy question, but still might be interesting to the beginners. – Kenshin Nov 8 '14 at 13:45
• I've made a discussion about problem difficulty here: meta.puzzling.stackexchange.com/questions/1391/… – Kenshin Nov 8 '14 at 13:52
• Maybe this is lateral thinking? I mean, the only reason this wouldn't be immediately answered (and thus not really a puzzle) is because people try to ignore trivial answers. – TheRubberDuck Nov 8 '14 at 15:07
• These types of questions attract the dumbness in my brain, hahah DVL16 $\color{darkorange}{\bigstar}$ :P – Mr Pie Aug 29 '18 at 7:15

Perhaps by counting the number of jellybeans in the bottle.

• Alternative Answer: Eat them and say 0! – warspyking Nov 8 '14 at 13:49
• Could you place this as a spoiler? – warspyking Nov 8 '14 at 13:49
• @warspyking eating them all means 0 are in the bottle, 0!=1 isn't zero :P – libathos Nov 10 '14 at 14:52
• You'd better pour them out of the bottle first, otherwise you can only see the outer layer. – singletee Feb 9 '15 at 22:07

You can empty the bottle and count the jellybeans on the table.

• Why even bother counting them? If they're no longer in the bottle, the bottle contains zero jellybeans. – Simon Forsberg Nov 9 '14 at 0:46

There is another way that is probably far less time-consuming, depending on $n$.

Weigh the bottle of jellybeans. Call this value $F$.
Pour out the bottle of jellybeans.
Weigh the empty bottle. Call this value $E$.
Weigh a single jellybean. Call this value $J$.

The number of jellybeans is

$\frac{F-E}{J}$.

• You have no measure of the standard deviation of jelly bean mass this way. For a very large population, this will not produce a concrete answer. – Doresoom Jan 30 '15 at 16:18

Eat all of the jellybeans because jellybeans are yummy. There are 0 jellybeans in the bottle.


text:
# ASP.NET ViewState Helper (Fiddler Extension) Crack [Mac/Win] (Latest)

ASP.NET ViewState Helper (Fiddler Extension) was designed to be an extension for Fiddler2. Fiddler2 is an HTTP debugging proxy application that runs alongside Internet Explorer and helps to analyze HTTP traffic.
The ASP.NET ViewState Helper Fiddler Extension is an extension that adds the ability to decode the ViewState on the selected page and display it in plain text. It works with the ViewState from v1.0, v1.1 and v2.0 webforms.

ASP.NET ViewState Helper supports Internet Explorer and Fiddler. It was designed for webmasters to quickly decode and analyze ASP.NET ViewState. It doesn’t work with WebMatrix. It doesn’t work with.NET 3.5. Because it was designed to work with the default.NET Framework of 3.0 or above, it might not work with Mono. However, in theory it should work with Mono.
ASP.NET ViewState Helper doesn’t work with ASP.NET Ajax request. ASP.NET Ajax has already been decoded.
It’s easy to install the Fiddler Extension on the Fiddler.NET

ASP.NET ViewState Helper (Fiddler Extension) Crack For Windows Features:

It can be used with Fiddler.
It can be used without the Fiddler Internet Explorer address bar and Fiddler tool bar.
It can be used to decode the ViewState from the page that you are viewing.
It can be used to decode the ViewState and view it in plain text.
It supports IE 8, IE 9, IE 10 and IE 11.

Install Microsoft ASP.NET ViewState Helper (Fiddler Extension)

ASP.NET ViewState Helper (Fiddler Extension) Requirements:

Internet Explorer version 7.0 or above
Fiddler 2
Fiddler Internet Explorer Add-on (for Internet Explorer)
Fiddler2

Q:

nth-of-type not working for input type number

I’m trying to add style to the nth-of-type for a particular input type number.
It works fine with anything else but number, I’ve looked at everything and tried a bunch of different things, but nothing works. If it helps, the page is in WordPress.
If anyone can help, that’d be awesome. I’ve tried it on both Firefox and Chrome, and it fails on both.

background-color: #B6D793;
margin-top: 5px;
color: #fff;
}

.description {
font-weight: normal;

## ASP.NET ViewState Helper (Fiddler Extension) Crack+ Free For PC [Latest-2022]

The ASP.NET ViewState Helper (Fiddler Extension) 2022 Crack adds the ability to
decode the ViewState from the selected page and display it in plain
text, including any encrypted data associated with it.

How to Install:

Extract the files from the ZIP file to your ‘Extensions’ folder.
You can then start the ‘ViewState Helper’ by opening Fiddler and opening a new session.
The ViewState Helper should now be listed in the ‘Extensions’ menu on Fiddler

How to Use:

Open any.aspx or.ascx page and click the ‘View State’ link. If you are on a v2.0 page, then click the ‘View State’ link above the Submit button
The raw view state will be displayed in plain text – you can use any text editor to edit the ViewState if needed
You can select any of the ViewState headers to be sent and edited

Example:

0.64 ± 0.04 0.93 ± 0.03 0.93 ± 0.03
FGF-21 (ng/ml) 6.06 ± 1.35 7.26 ± 1.01 8.11 ± 0.59
09e8f5149f

## ASP.NET ViewState Helper (Fiddler Extension) Crack+

The ViewState Helper for Fiddler2 was designed to be an extension for Fiddler2. Fiddler2 is an HTTP debugging proxy application that runs alongside Internet Explorer and helps to analyze HTTP traffic.

Once installed, the ViewState Helper for Fiddler2 displays the contents of the ViewState, i.e., the ViewState includes the different HTTP headers necessary to render the page properly, and the form data, as it has been sent to the server.

Using the ViewState Helper for Fiddler2, you can view and analyze the ViewState of all the pages that are viewable in Fiddler2.

Features:

View the ViewState of all the pages that are viewable in Fiddler2.
View the form data and the HTTP headers of all the pages that are viewable in Fiddler2.

A:

Just write this code in Application_Start
ViewStateEncryptionMode = System.Web.UI.WebControls.ViewStateEncryptionMode.Always

Also find the following property for viewstate security

$T$ *cannot be terminated*\
($T$-*terminated*)

Given a surface-changing word $T\in\mathcal{L}^*$, we can compute in linear time an equivalent blockword in the class of $T$-terminated words, which we denote by $block_T(L_T)$. Since $block_T(L_T)$ contains the same blocks as $L_T$, we have that $block_T(L_T)$ is reduced if $L_T$ is reduced. Moreover, if $L_T$ is $T$-terminated, then $L$ and $block_T(L_T)$ must have the same prefixes. In this sense, $T$-terminated words are a generalization of $T$-reduced words.

Conclusion
==========

In this paper we have considered the problem of a surface-changing word $T$ to compute an equivalent $T$-reduced word, where the algorithm has to return a (finite) word which is a subset of the given input

## What’s New In ASP.NET ViewState Helper (Fiddler Extension)?

The ASP.NET ViewState Helper can decode the ViewState of an ASP.NET webforms page and display it in plain text. It works with the ViewState from v1.0, v1.1 and v2.0 webforms. It can also detect the PostData used with and display it as well.

** Note: this is for the original (v1.0, v1.1, v2.0) version. Unfortunately, it doesn’t work for v2.5 yet, but you can use Fiddler2 instead (which works with v2.5) instead of the ASP.NET ViewState Helper.

John O’Rourke (14 December 1870 – 19 November 1951) was a newspaper and advertising executive in Ireland. He worked in the newspaper industry for more than 40 years, including as managing director of The Irish Press from 1899 to 1899, president of the Irish Press Association, and president of the Irish Newspapers’ Union. He was also the first manager of The Irish Times from 1922 to 1923, and was a director of the British Journal. He and his wife, Dorothea, had four children.

Early life
John O’Rourke was born on 14 December 1870 in County Meath, Ireland, the son of Timothy O’Rourke (d. 1874) and his wife Mary Heney (1840–1927), a sister of the author Alice Milligan. He was one of 11 siblings. He attended St. Patrick’s College, Maynooth, where he was awarded a LL.B in 1894.

Career

Early career
O’Rourke joined the Irish Press as a junior reporter in 1887, but after eight years as a reporter, he joined the advertising department. After being appointed manager of the Dundalk advertisers’ club in 1895, he returned to Dublin as advertising manager in 1897. The following year, he became editor of Young Irelander, a newspaper published by the Young Ireland party.

Publishing company and The Irish Press
In the late 1890s, he was managing director of the Dublin publisher Ireland’s Own Books, and when the company was sold to D. Appleton & Co. in 1899

## System Requirements:

Minimum:
OS: Windows 7
Processor: Intel Core 2 Duo
Memory: 2 GB RAM
Graphics: NVIDIA GeForce 8600 GT or ATI Radeon HD 2600
DirectX: 9.0c
Recommended:
Processor: Intel Core i5
Memory: 3 GB RAM
Graphics: NVIDIA GeForce GTX 460
Why is it that most of the drivers I download come from GPU manufacturers and not from game developers?
Yes,


text:
# THE $J=1\leftarrow 0$ ROTATIONAL TRANSITIONS OF $^{12}$CH$^+$, $^{13}$CH$^+$ and $^{12}$CD$^+$

Please use this identifier to cite or link to this item: http://hdl.handle.net/1811/46226

Files Size Format View
abstract.gif 69.46Kb GIF image
CH+.ppt 2.553Mb Microsoft PowerPoint View/Open
Slide1.GIF 9.503Kb GIF image
Slide2.GIF 23.74Kb GIF image
Slide3.GIF 14.95Kb GIF image
Slide4.GIF 16.08Kb GIF image
Slide5.GIF 13.51Kb GIF image
Slide6.GIF 25.08Kb GIF image
Slide7.GIF 14.32Kb GIF image
Slide8.GIF 18.16Kb GIF image
Slide9.GIF 18.62Kb GIF image
Slide10.GIF 24.49Kb GIF image
Slide11.GIF 21.02Kb GIF image
Slide12.GIF 17.69Kb GIF image
Slide13.GIF 21.38Kb GIF image
Slide14.GIF 21.66Kb GIF image
Slide15.GIF 23.82Kb GIF image
Slide16.GIF 9.057Kb GIF image
Slide17.GIF 2.203Kb GIF image
Slide18.GIF 70.80Kb GIF image
Slide19.GIF 17.73Kb GIF image

 Title: THE $J=1\leftarrow 0$ ROTATIONAL TRANSITIONS OF $^{12}$CH$^+$, $^{13}$CH$^+$ and $^{12}$CD$^+$ Creators: Amano, T. Issue Date: 2010 Publisher: Ohio State University Abstract: The CH$^+$ ion is the first molecular ion identified in interstellar space. Dunham, \textbf{49},~26 (1937)} detected a couple of unidentified lines in near-UV, and later Douglas and Herzberg \textbf{94},~381 (1941)} identified them based on their laboratory observations. The electronic spectra have been investigated extensively. On the other hand, the pure rotational transitions are less extensively studied. Cernicharo {\em et al}, \textit{Astrophys. J.}, \textbf{483},~L65 (1997)} reported the interstellar detection of the $J$=2-1, 3-2, and 4-3 transitions in NGC 7027. Pearson and Drouin, \textbf{647},~L83 (2006)} reported the laboratory observation of the $J$=1-0 line of $^{12}$CH$^+$ at 835078.950 MHz and, based on this frequency, predicted the frequencies for $^{13}$CH$^+$ and CD$^+$. The predicted $^{13}$CH$^+$ frequency led to identification of the interstellar line, \textit{Astrophys. J.}, \textbf{634},~L49 (2005)}. In this talk, we present a new set of measurements of the $J$=1-0 lines for the normal species together with the $^{13}$C and D isotopic species. The overwhelming evidences obtained in our experiments support the new identifications. An extended negative glow discharge in a gas mixture of CH$_4$ ($\sim 0.5$ mTorr) diluted in He ($\sim 60$ mTorr) was used for production of CH$^+$ with the discharge current of about 15 mA. Axial magnetic filed up to 160 Gauss was applied. %The signal disappears with a couple of mTorr of H$_2$ or O$_2$. %The signal intensity increases about an order of magnitude when the cell temperature is lowered from -60 $^{circ}$C to liquid nitrogen temperture. The normal species line exhibited a surprisingly large Zeeman splitting for a $^1\Sigma$ molecule. The $^{13}$CH$^+$ line showed the spin-rotation hyperfine splitting, and at higher field of 150 Gauss an unresolved lineshape was exhibited due to combined hfs and Zeeman splittings. The spin-rotation splitting in the normal species was negligibly small. The CD$^+$ line showed much smaller Zeeman and spin-rotation splittings, as expected. Details of the mechanism to induce such Zeeman effect and the spin-rotation interaction will be presented. The transition frequencies for these $J=1-0$ lines are: 835137.498(20) MHz and 453521.847(20) MHz for $^{12}$CH$^+$ and CD$^+$, respectively. The transition frequencies for $^{13}$CH$^+$ are 830216.680(50) MHz ($F=3/2-1/2$) and 830214.961(50) MHz ($F=1/2-1/2$). %These frequencies are in good agreement with those derived from the optical spectra. The uncertainties reflect possible errors in correcting the Zeeman shifts. Description: Author Institution: Department of Chemistry and Department of Physics and Astronomy, University of Waterloo, Waterloo, ON, Canada N2L 3G1; URI: http://hdl.handle.net/1811/46226 Other Identifiers: 2010-TJ-08


text:
# 3.14: Standing Wave Ratio

[m0081_Standing_Wave_Ratio]

Precise matching of transmission lines to terminations is often not practical or possible. Whenever a significant mismatch exists, a standing wave (Section [m0086_Standing_Waves]) is apparent. The quality of the match is commonly expressed in terms of the standing wave ratio (SWR) of this standing wave.

Standing wave ratio (SWR) is defined as the ratio of the maximum magnitude of the standing wave to minimum magnitude of the standing wave.

In terms of the potential: $\boxed{ \mbox{SWR} \triangleq \frac{\mbox{maximum}~|\widetilde{V}|}{\mbox{minimum}~|\widetilde{V}|} }$

SWR can be calculated using a simple expression, which we shall now derive. In Section [m0086_Standing_Waves], we found that: $\left|\widetilde{V}(z)\right| = |V_0^+| \sqrt{ 1 + \left|\Gamma\right|^2 + 2\left|\Gamma\right| \cos\left( 2\beta z + \phi \right) }$ The maximum value occurs when the cosine factor is equal to $$+1$$, yielding: $\mbox{max}~\left|\widetilde{V}\right| = |V_0^+| \sqrt{ 1 + \left|\Gamma\right|^2 + 2\left|\Gamma\right| }$ Note that the argument of the square root operator is equal to $$\left( 1 + \left|\Gamma\right| \right)^2$$; therefore: $\mbox{max}~\left|\widetilde{V}\right| = |V_0^+| \left( 1 + \left|\Gamma\right| \right)$ Similarly, the minimum value is achieved when the cosine factor is equal to $$-1$$, yielding: $\mbox{min}~\left|\widetilde{V}\right| = |V_0^+| \sqrt{ 1 + \left|\Gamma\right|^2 - 2\left|\Gamma\right| }$ So: $\mbox{min}~\left|\widetilde{V}\right| = |V_0^+| \left( 1 - \left|\Gamma\right| \right)$ Therefore: $\boxed{ \mbox{SWR} = \frac{1 + \left|\Gamma\right|}{1 - \left|\Gamma\right|} } \label{m0081_eSWR}$

This relationship is shown graphically in Figure [m0081_fSWRvGamma]. Note that SWR ranges from 1 for perfectly-matched terminations ($$\Gamma=0$$) to infinity for open- and short-circuit terminations ($$\left|\Gamma\right|=1$$).

It is sometimes of interest to find the magnitude of the reflection coefficient given SWR. Solving Equation [m0081_eSWR] for $$\left|\Gamma\right|$$ we find: $\left|\Gamma\right| = \frac{\mbox{SWR}-1}{\mbox{SWR}+1} \label{m0081_eGammaFromSWR}$

SWR is often referred to as the voltage standing wave ratio (VSWR), although repeating the analysis above for the current reveals that the current SWR is equal to potential SWR, so the term “SWR” suffices.

SWR $$<2$$ or so is usually considered a “good match,” although some applications require SWR $$<1.1$$ or better, and other applications are tolerant to SWR of 3 or greater.

Reflection coefficient for various values of SWR.

What is the reflection coefficient for the above-cited values of SWR? Using Equation [m0081_eGammaFromSWR], we find:

• SWR = 1.1 corresponds to $$\left|\Gamma\right|=0.0476$$.

• SWR = 2.0 corresponds to $$\left|\Gamma\right|=1/3$$.

• SWR = 3.0 corresponds to $$\left|\Gamma\right|=1/2$$.


text:
## Chen & Nguyen’s algorithm and Arora & Ge’s algorithm

In Faster Algorithms for Approximate Common Divisors: Breaking Fully-Homomorphic-Encryption Challenges over the Integers Yuanmi Chen and Phong Q. Nguyen (preprint here) propose a new algorithm for solving the approximate GCD problem. It drops the complexity from $2^{2\rho}$ to $2^{3/2\rho}$ in the general case and from $2^{\rho}$ to $2^{\rho/2}$ in the partial case (one multiple of $p$ is given noise-free) which is a pretty big deal.

The algorithm is based on two key ideas (explained using the partial approximate GCD problem):

1. Noisy solving reduced to noise-free solving

Similar to Arora & Ge’s algorithm for solving LWE Chen and Nguyen reduce the approximate solving problem to a noise-free solving problem. In fact, the strategy is exactly the same (cf. also this post). Given noisy ideal elements $f_i = \sum h_i g_i + r_i$ where $g_i$ are generators of the ideal, $h_i$ are ring elements and $r_i$ are small noise terms, then

$F_i = f_i \cdot \prod (f_i + j)(f_i - j)$

will be elements of the ideal $I$ spanned by $g_i$ if $j$ is big enough (depending on the exact setup we may drop the $-j$ part). In the approximate GCD case $g_0$ is simply a small odd integer (often denoted $p$). Additionally, if we are given some sufficient “description” of some sufficiently big ideal $\langle G_1,\dots,G_s \rangle = J \supset I$ (i.e., all elements of $I$ are in $J$ but not vice versa and $J$ is considerably bigger than $I$) then we can compute

$F_i = f_i \cdot \prod (f_i + j)(f_i - j) \mod J$

which keeps the size of $F_i$ small-ish. This is the role of $x_0$, the noise free multiple of $p$ in the partial approximate GCD problem. Now, one simply solves the noise free system $F_1,\dots,F_m$. In the PAGCD case this means to compute a single GCD, in the multivariate polynomial case (including LWE) this means to compute a Gröbner basis (or linearise, which is the same thing for the cases we are concerned with). Hence, so far Arora&Ge and Chen&Nguyen are really the same thing (it should be mentioned that this ideal due to Nguyen was already mentioned in this paper) applied to different rings.

However, this is not really why the Chen & Nguyen algorithm is efficient (although this already provides a speed-up by a factor of 5).

2. Efficient multiplication

The key idea to drop the exponent from $2^{\rho}$ to $2^{\rho/2}$ is as follows. Instead of computing with integers we compute univariate polynomials mod $x_0$, i.e. one defines

$f_j(x) = \prod_{j=0}^{j-1} (x_1 - (x + i)) \in \mathbb{F}_{x_0}[x]$

and notices that for $\rho' = \lfloor \rho/2 \rfloor$:

$\prod_{i=0}^{2^\rho-1} (x_1 - i) = \prod_{k=0}^{2^{\rho - \rho'} -1} f_{2^{\rho'}}(2^{\rho'}k)$

i.e., we can reduce $2^\rho -1$ multiplications to $2^{\rho - \rho'} - 1$ multiplications and $2^{\rho - \rho'} - 1$  polynomial evaluations. It turns out, this can be done in $\mathcal{O}(2^{\rho'})$. For the details read the paper.

But to get back to my previous point: It turns out the Arora&Ge perspective on noisy system solving is also useful for approximate GCDs. Which provides further evidence that it is useful to generalise LWE and AGCD to ideal theoretic problems in multivariate polynomial rings.

## Yet another Polly Cracker talk

… but this time

• it has less formal definitions.
• a brief discussion on related work.

Speaking of related work: Efficient Fully Homomorphic Encryption from (Standard) LWE by Zvika Brakerski and Vinod Vaikuntanathan is a good read. In summary, it has two main contributions:

1. a somewhat homomorphic scheme based on LWE which turns out to be the same (as far as I can tell) as ours and
2. a new dimension reduction trick which allows to turn it into a fully homomorphic scheme.

What is kind of curious about this work is its explicit non-algebraic perspective. While we talk about LWE from a multivariate polynomial ideal perspective the authors of 2011/344 explicitly state that their scheme is not.  I am not sure we’d have seen the dimension reduction trick with our perspective, though.

## Polly Cracker, Revisited

I’ve been mentioning this work a few times; well,  finally a pre-print is ready (by myself, Pooya Farshim, Jean-Charles Faugère and Ludovic Perret).

In this paper we initiate the formal treatment of cryptographic constructions – commonly known as “Polly Cracker” – based on the hardness of computing remainders modulo an ideal over multivariate polynomial rings. This work is motivated by the observation that the Ideal Remainder (IR) problem is one of the most natural candidates to build homomorphic encryption schemes. To this end, we start by formalising and studying the relation between the ideal remainder problem and the problem of computing a Gröbner basis.

We show both positive and negative results.

On the negative side, we define a symmetric Polly Cracker encryption scheme and prove that this scheme only achieves bounded CPA security under the hardness of the IR problem. Furthermore, using results from computational commutative algebra we show that a large class of algebraic transformations cannot convert this scheme to a fully secure Polly Cracker-type scheme.

On the positive side, we formalise noisy variants of the ideal membership, ideal remainder, and Gröbner basis problems. These problems can be seen as natural generalisations of the LWE problem and the approximate GCD problem over polynomial rings. After formalising and justifying the hardness of the noisy assumptions we show – following the recent progress on homomorphic encryption – that noisy encoding of messages results in a fully IND-CPA secure somewhat homomorphic encryption scheme. Together with a standard symmetric-to-asymmetric transformation for additively homomorphic schemes, we provide a positive answer to the long standing open problem proposed by Barkee et al. (and later also by Gentry) of constructing a secure Polly Cracker-type cryptosystem reducible to the hardness of solving a random system of equations. Indeed, our results go beyond that by also providing a new family of somewhat homomorphic encryption schemes based on new, but natural, hard problems.

Our results also imply that Regev’s LWE-based public-key encryption scheme is (somewhat) multiplicatively homomorphic for appropriate choices of parameters. Finally, we estimate the parameters which define our cryptosystem and give a proof-of-concept implementation.

Sage source code included, have fun.

I will give an online talk on Wednesday 12pm New York time (EDT) as part of the “Symbolic Computations and Post-Quantum Cryptography” seminar series. My talk is titled “Polly Cracker Revisited” and I’ll present classical and noisy problems in multivariate polynomial rings and how they relate to homomorphic encryption. I will post my slides here afterwards.

Edit: Slides with typos and all that.

## Algorithms for LWE and the Approximate GCD Problem over the Integers

Let $n$ be the number of variables in some polynomial ring $\mathbb{R}[x_1,\dots,x_n]$ (with $\mathbb{R}$ a ring) and let $d$ be the degree of a bunch of polynomials $F = [f_1,\dots,f_m]$ in $\mathbb{R}$, i.e., $\deg(f_i) = d$. Of course, we can “solve” $F$ by computing a Gröbner basis on $F$. Furthermore, it is well-known that if $n=1$ computing a GB is equivalent to computing the GCD of $F$ and that if $d=1$ computing a GB is equivalent to Gaussian elimination, i.e., finding a triangular basis for a module. In a nutshell, Gröbner bases generalise GCDs and Gaussian elimination. So far, so classical.

It is no secret that I spent some time looking into a problem which we call Gröbner Bases with Noise (GBN), which again can be seen — with the appropriate choice of parameters — as a generalisation of the LWE problem (cf. these slides for some details. Sorry, the paper is still not done). Similarly, we may consider GBN as a generalisation of an approximate GCD problem over $\mathbb{R}[x]$.

In our work (you know, the one which isn’t done yet), we define GBN over $\mathbb{F}_q$ to keep things simple but the notion can easily be extended to for example $\mathbb{Z}$. Hence, one could say GBN over $\mathbb{Z}$ is a generalisation of GCDs over $\mathbb{Z}[x]$ and in particular over $\mathbb{Z}$ (cf. this paper which constructs a homomorphic encryption scheme based on the approximate GCD problem over the integers) which is just $\mathbb{Z}[x]$ restricted to constant polynomials. So, we have a connection between GBN, LWE and the approximate GCD problem.

Now, as my tag cloud gives away, I like linear algebra and have the tendency to think about problems in terms of linear algebra and triangular bases. Hence, the above connection made me think about the applicability of algorithms for solving LWE to the approximate GCD problem over the integers. It turns out, they are applicable (kinda).

## Cryptanalysis of “Fully Homomorphic Encryption over the Binary Polynomials”

Turns out, I’m not he only one who was inspired to adapt the Fully Homomorphic Encryption over the Integers scheme by van Dijk, Gentry, Halevi and Vaikuntanathan to polynomials.  Gu Chunsheng posted a pre-print on the IACR eprint server this week which essentially instantiates the integer scheme over univariate polynomials over $\mathbb{F}_2$.  Below is my implementation (in Sage) of his somewhat homomorphic scheme:

class BinPolySHE:
def __init__(self, n):
n = n
tau = n # choice here
P = PolynomialRing(GF(2),'x')

x = P.gen()

s = P.random_element(degree=2*n+1)
while not (s.is_irreducible() and s.degree()==2*n+1):
s = P.random_element(degree=2*n+1)

b = []

a0 = P.random_element(2*n+1)
if a0.degree() < 2*n+1:
a0 += x**(2*n+1)
e0 = P.random_element(degree=n-1)
b0 = a0*s + x*e0 # deg: 4*n+2

b.append(b0)

for i in range(1,tau):
ai = P.random_element(degree=n) # choice here
ei = P.random_element(degree=n-1)
bi = ai*s + x*ei # deg 3*n+1
bi = bi % b0
b.append(bi)

self.n = n
self.pk = b
self.sk = s
self.P = P

def encrypt(self, m):
T = []

for i in range(1, len(self.pk)):
if random() <= 0.5: # choice here
T.append(i)

c = self.P(m%2)

x = self.P.gen()

for i in T:
e = self.P.random_element(degree=self.n-1)
c += self.pk[i] + x*e

return c % self.pk[0]

def decrypt(self, c):
x = self.P.gen()
return (c % self.sk) % x

Regular readers of this blog might have noticed that the scheme looks like a bit like a univariate specialisation of this PollyCracker scheme. Indeed, just like this first PollyCracker scheme, Gu’s scheme is badly broken. Below, the source code of my attack:

    def attack(self, c):

A = Matrix(GF(2),len(self.pk),4*self.n+2)

x = self.P.gen()

for i,b in enumerate(self.pk):
for j in b.exponents():
A[i,A.ncols()-j-1] = 1
E = A.echelon_form(reduced=False)

pk2 = []
for i,r in enumerate(A.rows()):
b = 0
for j in range(A.ncols()):
b += E[i,A.ncols()-j-1]*x**j
pk2.append(b)

for b in pk2:
if c[b.degree()]:
c -= b
return c % x

The attack proceeds pretty much as discussed here: we can compute a triangular basis for the span of the public key and use that to perform all eliminations. Since the noise does not grow with each addition and does not affect the constant coefficient (which holds the message), we can essentially ignore it.

## Polly Cracker Revisited – Slides

I just gave a talk in the ISG seminar at Royal Holloway, University of London about this Polly Cracker business I’ve been thinking about lately. I’ve also decided to publish the slides. However, I’d like to stress that everything in there is preliminary, i.e. this is yet another of those presentations presenting work in progress (which I personally think is a good thing to do). Anyway, here’s the abstract:

“Since Gentry’s seminal work on homomorphic encryption, this area has received considerable attention from the cryptographic community. Perhaps one of the most natural homomorphic schemes conceivable is Polly Cracker which is naturally homomorphic. However, almost all Polly Cracker inspired schemes that have been proposed so far have been badly broken. In fact, it was conjectured about 15 years ago in “Why you cannot even hope to use Gröbner Bases in Public Key Cryptography: an open letter to a scientist who failed and a challenge to those who have not yet failed.”that it was impossible to construct a secure Polly Cracker-style scheme.

In this work we initiate a formal treatment of cryptosystems based on the hardness of Gröbner basis computations for random systems of equations, discuss their limitations, why standard techniques from homomorphic encryption research fail in this area, and propose a Polly Cracker variant based on polynomial system solving with noise which is a first step towards a provably secure Polly Cracker public-key scheme.”


text:
# How mature is the “Julia” scientific computing language project?

I'm considering learning a new language to use for numerical/simulation modelling projects, as a (partial) replacement for the C++ and Python that I currently use. I came across Julia, which sounds kind of perfect. If it does everything it claims, I could use it to replace both C++ and Python in all my projects, since it can access high-level scientific computing library code (including PyPlot) as well as running for loops at a similar speed to C. I would also benefit from things like proper coroutines that don't exist in either of the other languages.

However, it's a relatively new project, currently at version 0.x, and I found various warnings (posted at various dates in the past) that it's not quite ready for the day to day use. Consequently, I would like some information about the status of the project right now (February 2014, or whenever an answer is posted), in order to help me assess whether I personally should consider investing the time to learn this language at this stage.

I would appreciate answers that focus on specific relevant facts about the Julia project; I'm less interested in opinions based on experience with other projects.

In particular, a comment by Geoff Oxberry suggests that the Julia API is still in a state of flux, requiring the code to be updated when it changes. I would like to get an idea of the extent to which this is the case: which areas of the API are stable, and which are likely to change?

I guess typically I would mostly be doing linear algebra (e.g. solving eigenproblems), numerical integration of ODEs with many variables, and plotting using PyPlot and/or OpenGL, as well as low-level C-style number crunching (e.g. for Monte Carlo simulations). Is Julia's library system fully developed in these areas? In particular, is the API more or less stable for those types of activities, or would I find that my old code would tend to break after upgrading to a new version of Julia?

Finally, are there any other issues that would be worth considering in deciding whether to use Julia for serious work at the present time?

• This question looks like it might not be a good fit for the Stack Exchange format because it is subjective. I know some people who develop actively in Julia, love it, and think that it's totally ready for prime-time (as long as you're willing to update your codebase in response to changes in the Julia API). There are other people who don't feel the need to use Julia right now (like me). – Geoff Oxberry Feb 27 '14 at 5:05
• Being subjective does not in itself make a question unsuited for the Stack Exchange format - see blog.stackoverflow.com/2010/09/good-subjective-bad-subjective . If you have a site policy against subjective questions then I apologise. However, I think it's only a bit subjective: already your comment gives me a better idea of the situation than I had prior to asking the question. It can be very hard for an outsider to get even a rough idea of how mature a project is. – Nathaniel Feb 27 '14 at 7:31
• Your point about API changes seems quite an important one for me, so I've added a paragraph to the question asking specifically for details about it. If updating Julia will tend to break my old code, that might be a bit of a deal-breaker for me at this stage. – Nathaniel Feb 27 '14 at 7:37
• You're absolutely right about "good subjective versus bad subjective" (one of my favorite Stack Exchange blog posts); I posted the comment because I'm waiting to see the response. With these "what do you think about _____?" questions, answers can be limited to a couple very well-thought-out posts, or they can be sprawling, all-over-the-place, repetitive "me too!" posts. The former is great; the latter is not, so I'm giving you a courtesy heads up to say: let's see how this one plays out. – Geoff Oxberry Feb 27 '14 at 7:52
• Thanks for posting a bounty, @AntonMenshov. I note that Julia has now passed version 1.0 (which it hadn't in 2014 when I posted this), so indeed it would be very good to have an up to date answer. – Nathaniel May 19 '19 at 7:35

Julia, at this point (May 2019, Julia v1.1 with v1.2 about to come out) is quite mature for scientific computing. The v1.0 release signified an end to yearly code breakage. With that, a lot of scientific computing libraries have had the time to simply grow without disruption. A broad overview of Julia packages can be found at pkg.julialang.org.

For core scientific computing, the DifferentialEquations.jl library for differential equations (ODEs, SDEs, DAEs, DDEs, Gillespie simulations, etc.), Flux.jl for neural networks, and the JuMP library for mathematical programming (optimization: linear, quadratic, mixed integer, etc. programming) are three of the cornerstones of the scientific computing ecosystem. The differential equation library in particular is far more developed than what you'd see in other languages, with a large development team implementing features like EPIRK integrators, Runge-Kutta-Nystrom, Stiff/Differential-Algebraic delay differential equation, and adaptive time stiff stochastic differential equation integrators, along with a bunch of other goodies like adjoint sensitivity analysis, chemical reaction DSLs, matrix-free Newton-Krylov, and full (data transfer free) GPU compatibility, with training of neural differential equations, all with fantastic benchmark results (disclaimer: I am the lead developer).

The thing that is a little mind-boggling about the matured Julia ecosystem is its composibility. Essentially, when someone builds a generic library function like those in DifferentialEquations.jl, you can use any AbstractArray/Number type to generate new code on the fly. So for example, there is a library for error propagation (Measurements.jl) and when you stick it in the ODE solver, it automatically compiles a new version of the ODE solver which does error propagation without parameter sampling. Because of this, you may not find some features documented because the code for the features generates itself, and so you need to think more about library composition.

One of the ways where composition is most useful is in linear algebra. The ODE solvers for example allow you to specify jac_prototype, letting you give it the type for the Jacobian that will be used internally. Of course there's things in the LineraAlgebra standard library like Symmetric and Tridiagonal you can use here, but given the utility of composibility in type generic algorithms, people have by now gone and built entire array type libraries. BandedMatrices.jl and BlockBandedMatrices.jl are libraries which define (Block) banded matrix types which have fast lu overloads, making them a nice way to accelerate the solution of stiff MOL discretizations of systems of partial differential equations. PDMats.jl allows for the specification of positive-definite matrices. Elemental.jl allows you to define a distributed sparse Jacobian. CuArrays.jl defines arrays on the GPU. Etc.

Then you have all of your number types. Unitful.jl does unit checking at compile time so it's an overhead-free units library. DoubleFloats.jl is a fast higher precision library, along with Quadmath.jl and ArbFloats.jl. ForwardDiff.jl is a library for forward-mode automatic differentiation which uses Dual number arithmetic. And I can keep going listing these out. And yes, you can throw them into sufficiently generic Julia libraries like DifferentialEquations.jl to compile a version specifically optimized for these number types. Even something like ApproxFun.jl which is functions as algebraic objects (like Chebfun) works with this generic system, allowing the specification of PDEs as ODEs on scalars in a function space.

Given the advantages of composibility and the way that types can be use to generate new and efficient code on generic Julia functions, there has been a lot of work to get implementations of core scientific computing functionality into pure Julia. Optim.jl for nonlinear optimization, NLsolve.jl for solving nonlinear systems, IterativeSolvers.jl for iterative solvers of linear systems and eigensystems, BlackBoxOptim.jl for black-box optimization, etc. Even the neural network library Flux.jl just uses CuArrays.jl's automatic compilation of code to the GPU for its GPU capabilities. This composibility was the core of what created things like neural differential equations in DiffEqFlux.jl. Probabilistic programming languages like Turing.jl are also quite mature now and make use of the same underlying tooling.

Since Julia's libraries are so fundamentally based on code generation tools, it should be no surprised that there's a lot of tooling around code generation. Julia's broadcast system generates fused kernels on the fly which are overloaded by array types to give a lot of the features mentioned above. CUDAnative.jl allows for compiling Julia code to GPU kernels. ModelingToolkit.jl automatically de-sugars ASTs into a symbolic system for transforming mathematical code. Cassette.jl lets you "overdub" someone else's existing function, using rules to change their function before compile time (for example: change all of their array allocations to static array allocations and move operations to the GPU). This is more advanced tooling (I don't expect everyone doing scientific computing to take direct control of the compiler), but this is how a lot of the next generation tooling is being built (or rather, how the features are writing themselves).

As for parallelism, I've mentioned GPUs, and Julia has built-in multithreading and distributed computing. Julia's multithreading will very soon use a parallel-tasks runtime (PARTR) architecture which allows for automated scheduling of nested multithreading. If you want to use MPI, you can just use MPI.jl. And then of course, the easiest way to make use of it all is to just use an AbstractArray type setup to use the parallelism in its operations.

Julia also has the basic underlying ecosystem you would expect of a general purpose language used for scientific applications. It has the Juno IDE with a built-in debugger with breakpoints, it has Plots.jl for making all sorts of plots. A lot of specific tools are nice as well, like Revise.jl automatically updates your functions/library when a file saves. You have your DataFrames.jl, statistics libraries, etc. One of the nicest libraries is actually Distributions.jl which lets you write algorithms generic to the distribution (for example: rand(dist) takes a random number of whatever distribution was passed in), and there's a whole load of univariate and multivariate distributions (and of course dispatch happens at compile time, making this all as fast as hardcoding a function specific to the distribution). There is a bunch of data handling tooling, web servers, etc. you name it. At this point it's mature enough that if there's a basic scientific thing and you'd expect for it to exist, you just Google it with .jl or Julia and it'll show up.

Then there's a few things to keep in mind on the horizon. PackageCompiler is looking to build binaries from Julia libraries, and it already has some successes but needs more development. Makie.jl is a whole library for GPU-accelerated plotting with interactivity, and it still needs some more work but it's really looking to become the main plotting library in Julia. Zygote.jl is a source-to-source automatic differentiation library which doesn't have the performance issues of a tracing-based AD (Flux's Tracker, PyTorch, Jax), and that is looking to work on all pure Julia codes. Etc.

In conclusion, you can find a lot of movement in a lot of places, but in most areas there is already a solid matured library. It's no longer at a place where you ask "will it be adopted?": Julia has been adopted by enough people (millions of downloads) that it has the momentum to stay around for good. It has a really nice community, so if you ever just want to shoot the breeze and talk about parallel computing or numerical differential equations, some of the best chat rooms for that are in the Julialang Slack. Whether it's a language you should learn is a personal question, and whether it's the right language for your project is a technical question, and those are different. But is it a language that has matured and has the backing of a large consistent group of developers? That seems to be an affirmative yes.

• Great answer. One question: Does Julia allow graceful evolution from research code into a production systems? Or is it more like matlab where there's no hope? – user14717 May 19 '19 at 14:22
• A lot of packages, such as DifferentialEquations.jl, started as code for a research project. Julia's packaging system makes it quite simple to convert working code into a package with CI and unit tests for future maintenance. And the fact that most code is pure Julia makes deployment much easier since you don't have to maintain a bunch of build systems / binaries. So I'd definitely say yes. We have some proprietary codes being released soon. The one thing that is still lacking is building binaries (PackageCompiler). – Chris Rackauckas May 19 '19 at 14:27

If not, is it possible to give a rough order-of-magnitude estimate for how long I should wait before considering it again?

My rough, order-of-magnitude estimate of how long it takes computational science languages to mature is around a decade.

Example 1: SciPy started in 2001 or so. In 2009, Scipy 0.7.0 was released, and the ODE integrator had an interface to VODE (which is the equivalent of ode15s, roughly; ode15s is NDF-based, VODE is BDF/Adams-Bashforth, depending). With SciPy 0.10.0, an interface to dopri5, which is roughly the equivalent of MATLAB's ode45, a Runge-Kutta 4th order method typically introduced as the first practical numerical integration method to undergraduates. SciPy 0.10.0 was released in December 2011, and it took about 10 years for them to include a feature of MATLAB introduced to every engineering undergrad I know.

Example 2: Mathworks was founded in 1984. In their first release, they used a LAPACK port to C named JACKPAC (after Jack Little, a MathWorks engineer who wrote it). They did not replace it with LAPACK until 2000.

Julia may take less time, but I'd estimate about 10 years from founding to become mainstream. (It's already been out a year or so; maybe 9-10 years, then?)

Is Julia's library system fully developed in these areas? In particular, is the API more or less stable for those types of activities, or would I find that my old code would tend to break after upgrading to a new version of Julia?

I don't use Julia, so take what I say with a grain of salt, since I've only seen Jeff Bezanson give presentations about Julia. They've bent over backwards to make it easy to link and use libraries from C, Python, and Fortran. If you can't find a Julia library that does what you want, write a Julia shim for a library in a more established language. Consequently, I don't think a lack of libraries will be a concern. I think a concern will be making sure that changes to core language features don't bite you in the ass. If you look at the milestones in the Julia Git repo, you'll see that the "breaking" tag is used quite a bit (12 times in the 0.2 release, 5 times in the 0.3 release). To me, that suggests that the core language is still evolving, which is why I hesitate to use the language right now. Julia looks very cool, so I anticipate that I may use it in the future, maybe a few years from now.

EDIT: Aurelius brings up a good point:

What makes you assume Julia will ever actually become mainstream, and not just die off in obscurity like so many other languages? SciPy/numpy had/has the backing of an ever-growing python community, which Julia doesn't have.

In the original answer, I decided to avoid the question of "Will Julia succeed in becoming mainstream?" as much as possible. Failing is easy; success is difficult. I think the best comparison of Julia is to technical computing languages like MATLAB, R, and Octave. HPC languages (Chapel, Fortress, UPC, etc.) have a narrower audience than technical computing languages, and general purpose languages (C, Python, C++, etc.) have a broader audience than technical computing languages.

Something I think that helps Julia is design for performance without sacrificing expressiveness. Julia is much more competitive with compiled languages like C than MATLAB, R, or even Python. This design goal is also a feature that can draw people from existing languages, like:

• People who care a lot about performance and come from languages like C and Fortran, but are willing to sacrifice a tiny bit of performance (maybe a factor of 2ish) to go from compiled language to fewer lines of interpreted language (along with a REPL for more rapid development and testing).
• People who care about high productivity and come from languages like Python, R, and MATLAB, but want more performance. When it comes to execution, pure Python, pure MATLAB, and pure R are slow. Developers in those languages have gone out of their way to wrap libraries in compiled languages, but you can't wrap everything, and at some point, the core language is going to slow you down. Core Julia is faster, which lets you do more science faster.
• People who care about free software. Julia is interpreted and free (so is Python, Octave, etc.); MATLAB is not.

Julia is also attempting to facilitate parallelism; I don't feel terribly qualified to expand upon that point, and I don't think it's the main draw of the language, but I think it's a selling point that they are working on, and I hope others can shed light on it.

However, even with technical merit on their side, the language creators have to do the legwork to promote the language and evangelize. Jeff Bezanson, Alan Edelman, Stephen Karpinski, and Viral Shah are working very hard to make the language succeed. Alan Edelman has deep ties to the computational science community, and he's worked on language-level projects before (notably, the Star-P extension to MATLAB). Jeff Bezanson has been doing the conference circuit to promote Julia to computational scientists and engineers for a while. At MIT, they've been doing a good job of recruiting students and staff (notably, Steven G. Johnson) to contribute by adding libraries to Julia. They've got an article in Wired, and managed to get a Wikipedia article for themselves, all after only a year. Their Git repo has thousands of stars, hundreds of forks, and hundreds of watches, so by open-source standards, their project has been a success. I think they've done all the right things so far, so it's a matter of sustaining that effort and building community. They could still fail, but getting this far suggests to me that they have a reasonable chance at success.

• What makes you assume Julia will ever actually become mainstream, and not just die off in obscurity like so many other languages? SciPy/numpy had/has the backing of an ever-growing python community, which Julia doesn't have. Don't get me wrong, I'd love to have a better tool available than C++/Python/Fortran/Matlab (and I know nothing about Julia), but there have been many attempts at new HPC languages that have failed. – Aurelius Feb 27 '14 at 18:53
• Regarding breaking changes, there have actually been very few breaking language changes (i.e. syntax, semantics) since before 0.1, over a year ago – in fact, I can't think of any – the core language is quite stable. Issues tagged as "breaking" are changes to standard library APIs. These are pretty easy to deal with by leaving deprecation methods around that allowing your old code to still work but print a warning. Packages are in much more flux, so I suspect at this point the real pain-point is that upgrading your packages may break your code even if the language itself doesn't break things. – StefanKarpinski Feb 28 '14 at 6:14
• Thanks for the edit Geoff, good input. I do hope something better succeeds. It's a little perverse to think that on a weekly basis I'm using Matlab for rapid prototyping of algos, python for automation/scripting, and C++ and/or Fortran for "serious" work, but that's the world we live in. I'm sadly pessimistic though. The 5-10 year trend in HPC is heterogeneous programming and massive parallelism, and that's inherently difficult to craft a simple language for. Their uphill battle is a very steep gradient for a lot of reasons. – Aurelius Feb 28 '14 at 6:40
• Great analysis. I did want to chime in saying that everything you do for HPC is always slightly broken. Its an innovation space, where making/breaking is par for the course. Julia has a lot of good things going for it, but a I think a lot of the tricks come from the LLVM integration, again a highly moving target. I would learn a bit of it, but give it a few years until you expect to use it day to day. – meawoppl Mar 2 '14 at 19:19

I believe Julia is worth learning. I have used it to produce a few research finite element codes, and produce them very quickly. I have been over all very pleased with my experience.

Julia has enabled a workflow for me that I have found difficult to achieve with other languages. You may use it as a prototyping language like MATLAB, but unlike MATLAB when you have a working code and are going through profiling iterations to speed it up, replacing hotspots with C code is painless. They have made interfacing with C (and Python) a priority in design.

Thus the language has enabled me to very rapidly move from my mathematical formulations to functional code and then from functional code to highly performant code. I think this feature of Julia is undersold, but it adds tremendous value.

In many instances I have obtained C performance (compared to my own C code) in a matter of hours after producing a functional finite element code. So far if I use only Julia features I usually get to within ~3X slower than C. After this I replace hotspots with C functions (Julia comes with a stack sampling profiler to help identify these). Often this requires only replacing the offending hotspot lines of code with a "ccall," with Julia handling any marshalling.

I think the main things Julia is missing right now though that makes me hesitate to consider it for bigger projects is the lack of a fully supported debugger, and poor support for plotting (right now your best bet in plotting is actually just an interface into matplotlib that I've had break more often than not). Immediate feedback on code is really important. I also don't know how to survive without interactive debugging, and in this respect I'm very spoiled by MATLAB and GDB.

• Thanks, this is a very useful answer. I have some follow up questions. Firstly, do you use a released version or keep up with the source? If the latter, do you run into many problems with your code breaking due to updates? Secondly, how does the interface to matplotlib "break" exactly? I was actually quite excited to hear that plotting was through matplotlib, because it can render LaTeX in axis labels (actual LaTeX, using a TeX installation), and for me that's a killer feature. But if the interface is flaky then that's not so great... – Nathaniel Feb 28 '14 at 5:03
• I keep up to date with the source because I also am trying to contribute to the project. So far I haven't had any breaks, but I just had a big span of writing and theory and am now coming back to my code and we'll see how that goes. Numpy arrays are 0-indexed and row-major by default. and Julia is 1-indexed and column-major by default, usually this doesn't make problems but unstructured data plotting requires index arrays to be passed around so I've had to do weird things like pass p'-1 to unstructured triangular mesh routines, where p is an index map. – Reid.Atcheson Feb 28 '14 at 5:26

From my experience Julia isn't ready for (scientific) everyday use yet (I'm talking about the stabilized version 0.4 of march 2016). The language itself is nice, feature rich and consistent; a refreshing step forward from both matlab and python. There are certainly uses cases where Julia is a good choice even at this early stage. But if you need reliable and mature scientific libraries I cannot recommend making the move now. The main problems I encountered are:

• The packages outside of Julia's core aren't reliable. They break with updates, change, get replaced, sometimes are incomplete or simply broken.
• Julia's parallelism features (imo the most promising potential matlab killer features) are are immature. You will encounter segmentation faults, memory leaks, crashes and disappointing performance. Sometimes they don't play well with other parts of julia, for example some of the solvers for linear systems or packages outside of the core. While these features sound promising, they often enough failed for me. Almost never was it enough to simply write @parallel in front of the for loop, where in theory it should.
• Many little things, small bugs and issues one could live with: not so nice and sometimes erroneous call stack traces, a little buggy interpreter history, slow loading of packages, bad performance of one or another package/function, etc. What annoyed me the most is the PyPlot package, a wrapper for matplotlib, currently there's no alternative to it. It's really great that it's there and it mostly works. But if you need to plot data, be prepared for very slow performance and problems.

This will all get better. I am confident that some day julia will be superior to matlab and python in almost every aspect. Chances are great that innovative packages will be developed for it. It seems like there already is a big community. Even now there is a wealth of packages with use cases ranging from opencl to webservers. Using python or c libraries is very easy, so you probably won't hit a wall in terms of library availability. A great strength of Julia will be the effortlessness with which one can glue together high performance functionality from various sources in a modern and consistent high level language (see answers above). But as a whole I found it to be neither mature nor stable enough to be used productively.