LinearInteractionLinear model of interaction between two stocks 
This information is part of the Business Simulation Library (BSL). Please support this work and ► donate.
The LinearInteraction component allows to model the interaction between two stocks A (portA
) and B (portB
) as linear equations:
Note: Capital letters were chosen to represent the stocks (state variables) connected at portA
and portB
in the formula above. Also dot notation is used for a stock's rate of flow—its first derivative with respect to time.
Coefficient  Unit  Description 

a_0 
base units for flow to A ( 
Rate of growth for stock A 

base units for flow to B ( 
Rate of growth for stock B 

1/s 
Fractional rate of growth for stock A 

1/s 
Fractional rate of growth for stock B 

base units for flow to A ( 
Rate of growth for stock A per stock B 

base units for flow to B ( 
Rate of growth for stock B per stock A 
The coefficients can be given as parameters or as variables via the expandable connector dataIn
.
A linear harmonic oscillator can be modeled as a special case of linear interactions where the rates for the mutual influences (e.g., fractionalGrowthRate_B_per_A and fractionalGrowthRate_A_per_B) are negative. In that case, positive stock A will decrease stock B and vice versa.
The Linear Interaction can be used to model Strogatz' famous model for the dynamics of a love affair (conspicuously between "Romeo" and "Juliet") as shown in →LoveHateDynamics [16].
OutputType_A
and OutputType_B
will be used to conveniently set the types, e.g., units, of the parameters a_0,a_B
and b_0, b_A
.a_B
might have rather convoluted units, e.g., base units of A/(base units of B.s)
. For convenient modeling, a_B
will be divided by refB
, which allows to use displayUnit
should unit conversion be required. Since TypeB
by default is set to Unspecified
in most cases nothing needs to be done.b_A
.hasConstantGrowthRates 
Value: false Type: Boolean Description: = true, if the linear growth rates are given by constant parameters 

hasConstantFractionalGrowthRates 
Value: false Type: Boolean Description: = true, if the fractional growth rates are given by constant parameters 
hasConstantCouplingCoefficients 
Value: false Type: Boolean Description: = true, if the induced growth rates are given by constant parameters 
a_0 
Value: unspecified Type: OutputType_A Description: Constant rate of growth for stock A [OutputType_A] 
b_0 
Value: unspecified Type: OutputType_B Description: Constant rate of growth for stock B [OutputType_B] 
a_A 
Value: unspecified Type: Rate (1/s) Description: Constant fractional rate of growth for stock A (selfcoupling) 
b_B 
Value: unspecified Type: Rate (1/s) Description: Constant fractional rate of growth for stock B (selfcoupling) 
a_B 
Value: unspecified Type: OutputType_A Description: Constant rate of growth for stock A per reference units of B (coupling B to A) 
refB 
Value: 1 Type: TypeB Description: Reference value for B, i.e., divisor for a_B 
b_A 
Value: unspecified Type: OutputType_B Description: Constant rate of growth for stock B per reference units of A (coupling A to B) 
refA 
Value: 1 Type: TypeA Description: Reference value for A, i.e., divisor for b_A 
portA 
Type: FlowPort Description: Flow from/to Stock A 


portB 
Type: FlowPort Description: Flow to/from Stock B 

y_B 
Type: RealOutput_B Description: Rate for flow to and from B (positive value indicates inflow) 

y1_B 
Type: RealOutput_B Description: Rate for flow to and from B (positive value indicates inflow) 

y1_A 
Type: RealOutput_A Description: Rate for flow to and from A (positive value indicates inflow) 

y_A 
Type: RealOutput_A Description: Rate for flow to and from A (positive value indicates inflow) 

dataIn 
Type: Input_Connector Description: Continuous inputs for the component 

u_growthRate_A 
Type: RealOutput Description: Output signal 

u_fractionalGrowthRate_A 
Type: RealOutput Description: Output signal 

u_growthRate_A_per_B 
Type: RealOutput Description: Output signal 

u_growthRate_B_per_A 
Type: RealOutput Description: Output signal 

u_fractionalGrowthRate_B 
Type: RealOutput Description: Output signal 

u_growthRate_B 
Type: RealOutput Description: Output signal 
parGrowthRateA 
Type: ConstantConverter Description: Constant growth rate for A (optional) 


parFractionalRateA 
Type: ConstantConverter Description: Constant fractional growth rate for A (optional) 

parCrossFractionalRateA 
Type: ConstantConverter Description: Constany growth rate for A per B (optional) 

parGrowthRateB 
Type: ConstantConverter Description: Constant growth rate for B (optional) 

parFractionalRateB 
Type: ConstantConverter Description: Constant fractional growth rate for B (optional) 

parCrossFractionalRateB 
Type: ConstantConverter Description: Constant growth rate for B per A (optional) 

unitMultiplierA 
Type: Gain Description: The factor should have units 1/[base units of B] 

unitMultiplierB 
Type: Gain Description: The factor should have units of 1/[base units of A] 

growingA1 
Type: ExogenousChange Description: Linear growth 

growingA2 
Type: ExponentialChange Description: Exponential growth for A 

growingA3 
Type: ExogenousChange Description: Crossfractional growth rate for A per B 

stockB 
Type: FlowPortSensor Description: Amount in stock B 

stockA 
Type: FlowPortSensor Description: Amount in stock A 

inducedGrowthA 
Type: Product_2 Description: Rate of growth induced by stock B 

totalRateA 
Type: Add_3 Description: Total of three inputs 

growingB1 
Type: ExogenousChange Description: Linear growth 

growingB2 
Type: ExponentialChange Description: Exponential growth for B 

growingB3 
Type: ExogenousChange Description: Crossfractional growth rate for B per A 

inducedGrowthB 
Type: Product_2 Description: Rate of growth induced by stock A 

totalRateB 
Type: Add_3 Description: Total of three inputs 
BusinessSimulation.Examples Romeo and Juliet model as introduced by Strogatz 
BusinessSimulation.Flows.Interaction Combined linear and nonlinear interaction 
Input_Connector
defined as encapsulated expandable connector
in v2.1.0.unspecified
in v2.1.0.