[Jprogramming] Matrix equation

Henry Rich HenryHRich at nc.rr.com
Wed Aug 20 23:30:23 UTC 2014


This might be a good use of dissect, to see the shapes and values all at 
once.

http://www.jsoftware.com/jwiki/Vocabulary/Dissect

Henry Rich

On 8/20/2014 7:27 PM, Mike Day wrote:
> Raul's right of course.
>
> Although Wx is indeed a scalar,  Nc and so NcI are 1x1 matrices.
> NcI acts like a scalar,  but if we replace NcI by scalar nci (say),  then
>     CT mp NcI mp C
> may be replaced by CT mp nci * C ,  or CT mp C * nci , etc.
>
> Mike
>
> On 20/08/2014 15:42, Mike Day wrote:
>> 0. Your J expression for Wx looks wrong to me.
>> If you want to get
>>
>>    Wx = (1-(q0^2)-(q1^2)-(q2^2)-(q3^2))%2 in conventional arithmetic
>> notation
>> then you need
>>    Wx=:(1-(q0^2)+(q1^2)+(q2^2)+(q3^2))%2
>> or
>>    Wx=:(1-+/*:q)%2      NB. Your J-expression is effectively (1- -/
>> *:q)%2
>> or
>>    [Wx=: -: -. +/*:,C   NB. according to your definition of C
>>
>> 0
>> Maybe q = (q0, q1, q2, q3) is not always so simple.
>> Whatever its numerical value, Wx is scalar,  and might perhaps be
>> regarded as 0.5 * (1 - C mp CT) .
>>
>>
>> 1.  Nc = C.Nb.CT is scalar, and therefore NcI is also scalar.
>>
>>
>> 2.  You don't state the vector l,  so I can only use your stated value
>> for W,  and I've used your stated value for B;
>> both of these were given to 3 places of decimals.
>>
>>
>> 3. A suitable J expression allowing for NbI as an overall factor,
>> since it's a left multiplier in both parts of
>>
>>    (NbI-NbI*CT*NcI*C*NbI)*W + (NbI*CT*NcI*Wx) (conventional notation)
>>
>> appears to be
>>
>>    dX=:NbI mp((I-CT mp NcI mp C mp NbI)mp W)+CT mp NcI mp Wx NB. J
>> notation
>>
>> where
>>    I =: =i.#NbI    NB. identity matrix
>>
>> Using my value of 0 for Wx:
>>
>> 25j20": dX=:NbI mp((I -CT mp NcI mp C mp NbI)mp W)+CT mp NcI mp Wx
>>
>> _0.33362737497592021000
>>
>> _0.21892578452135747000
>>
>> _0.10546486185920967000
>>
>> _0.24545356011509956000
>>
>> _0.10446141957003618000
>>
>>
>> Using your value of 0.5 for Wx:
>>
>> 25j20": dX=:NbI mp((I -CT mp NcI mp C mp NbI)mp W)+CT mp NcI mp %2
>>
>> _0.33362725373747026000
>>
>> _0.21892575956391414000
>>
>> _0.10546489384744806000
>>
>> _0.24545356063333446000
>>
>> _0.10446153412014780000
>>
>>
>> Evidently CT mp NcI is numerically small compared to the expression
>> involving W.
>>
>>
>> Please note that scalar part-expressions could be moved around, and
>> they may be applied with a simple * verb.
>> I haven't done that here.
>>
>>
>> Mike
>>
>> On 20/08/2014 08:43, "Papp Erik Tamás" wrote:
>>> Dear Forum,
>>>
>>> Can somebody help me to solve the folloving matrix equation?
>>>
>>>         pps=:9!:11   NB. set print precision
>>>     pps 20
>>>     mp=: +/ . *         NB. Matrix product
>>> NB.=======================================================================================
>>>
>>>     NB. The following matrix equation have to be solve
>>>     NB. dX=(NbI-NbI*CT*NcI*C*NbI)*W+NbI*CT*NcI*Wx
>>> NB.=======================================================================================
>>>
>>>     NB. BT = B transpose
>>>         BT=:|:B
>>>     NB. Nb = BT*B
>>>         Nb=:BT mp B
>>>     NB. NbI = Nb inverse
>>>         NbI=:%.Nb
>>>     NB. W = BT * l
>>>         W=: BT mp l
>>>     NB. C = [q0 q1 q2 q3 0]
>>>         C=:1 5$q0,q1,q2,q3,0
>>>     NB. CT = C transpose
>>>         CT=:|:C
>>>     NB. Wx = (1-(q0^2)-(q1^2)-(q2^2)-(q3^2))%2
>>>         Wx=:(1-(q0^2)-(q1^2)-(q2^2)-(q3^2))%2
>>>     NB. Nc = C * Nb * CT
>>>         Nc=:C mp Nb mp CT
>>>     NB. NcI = Nc inverse
>>>         NcI=:%.Nc
>>> NB.=======================================================================================
>>>
>>>         ]Nc=:C mp Nb mp CT
>>> 5736.3999999999996
>>>             ]Nc=:(C mp Nb) mp CT
>>> 5736.3999999999996
>>>             ]Nc=:C mp (Nb mp CT)
>>> 5736.3999999999996
>>> NB.=======================================================================================
>>>
>>>     12j3":B
>>>         4.700       4.700      20.700       4.700      _3.300
>>>        _4.700     _20.700     _11.300     _27.300      _8.000
>>>        16.000       6.600      22.600       0.000       8.000
>>>         2.200      12.200       8.200      _7.800       4.200
>>>        _2.200     _18.200       6.200      _9.800       2.000
>>>         6.000       1.600      _2.400      10.000       8.000
>>>         9.200      _0.800      15.200      19.200       1.200
>>>        _9.200      _5.200      _6.800      _2.800      _8.000
>>>         6.000     _12.400       3.600     _10.000      _2.000
>>>       _10.300      _0.300     _24.300     _20.300       1.700
>>>        10.300      14.300      13.700      17.700      12.000
>>>       _14.000       6.600     _17.400      10.000      _2.000
>>>        _5.800     _15.800     _19.800       4.200      _3.800
>>>         5.800      29.800      _1.800      22.200       2.000
>>>       _14.000      _2.400      _6.400     _10.000     _12.000
>>>         $B
>>> 15 5
>>>         12j3":BT
>>>         4.700      _4.700      16.000       2.200 _2.200 6.000
>>> 9.200      _9.200       6.000 _10.300      10.300 _14.000
>>> _5.800       5.800 _14.000
>>>         4.700     _20.700       6.600      12.200 _18.200 1.600
>>> _0.800      _5.200     _12.400 _0.300      14.300 6.600
>>> _15.800      29.800 _2.400
>>>        20.700     _11.300      22.600       8.200 6.200 _2.400
>>> 15.200      _6.800       3.600 _24.300      13.700 _17.400
>>> _19.800      _1.800 _6.400
>>>         4.700     _27.300       0.000      _7.800 _9.800 10.000
>>> 19.200      _2.800     _10.000 _20.300      17.700 10.000
>>> 4.200      22.200 _10.000
>>>        _3.300      _8.000       8.000       4.200 2.000 8.000
>>> 1.200      _8.000      _2.000 1.700      12.000 _2.000
>>> _3.800       2.000 _12.000
>>>         $BT
>>> 5 15
>>>         12j3":Nb
>>>      1222.600     623.600    1555.000     853.000     611.300
>>>       623.600    2549.800     805.200    1754.000     602.300
>>>      1555.000     805.200    2985.800    1034.600     602.300
>>>       853.000    1754.000    1034.600    2936.600     602.300
>>>       611.300     602.300     602.300     602.300     607.300
>>>         $Nb
>>> 5 5
>>>         12j6":NbI
>>>      0.004533    0.000333   _0.001772   _0.000311   _0.002826
>>>      0.000333    0.000749   _0.000128   _0.000382   _0.000573
>>>     _0.001772   _0.000128    0.001127    0.000039    0.000754
>>>     _0.000311   _0.000382    0.000039    0.000642    0.000016
>>>     _0.002826   _0.000573    0.000754    0.000016    0.004295
>>>         $NbI
>>> 5 5
>>>         12j3":W
>>>      _981.642
>>>     _1344.633
>>>     _1326.828
>>>     _1561.409
>>>      _610.603
>>>         $W
>>> 5 1
>>>         12j3":C
>>>         0.500       0.500       0.500       0.500       0.000
>>>         $C
>>> 1 5
>>>         12j3":CT
>>>         0.500
>>>         0.500
>>>         0.500
>>>         0.500
>>>         0.000
>>>         $CT
>>> 5 1
>>>         12j3":Wx
>>>         0.500
>>>         $Wx
>>> 1
>>>         12j3":Nc
>>>      5736.400
>>>         $Nc
>>> 1 1
>>>         NcI
>>> 0.00017432536085349698
>>>         $NcI
>>> 1 1
>>> NB.=======================================================================================
>>>
>>>     NB. dX=(NbI-NbI*CT*NcI*C*NbI)*W+NbI*CT*NcI*Wx
>>>     NB. dX=(NbI-NbI mp CT mp NcI mp C mp NbI) mp W+NbI mp CT mp NcI
>>> mp Wx
>>> NB.=======================================================================================
>>>
>>>     NB. solution step by step
>>>     dX=:(NbI-NbI mp CT mp NcI mp C mp NbI) mp W+NbI mp CT mp NcI mp Wx
>>
>>>     NB. dX=f+i
>>>     ]a=:NbI mp CT
>>>    0.0013909444659834052
>>>   0.00028633175856724745
>>> _0.00036699466085721166
>>>   _5.9456044547029092e_6
>>>   _0.0013142105194193007
>>>         ]b=:a mp NcI
>>>   2.4247689595973174e_7
>>>    4.991488713605179e_8
>>> _6.3976476685240161e_8
>>> _1.0364696420582438e_9
>>>   _2.291002230352313e_7
>>>         ]c=:b mp C
>>>    1.2123844797986587e_7   1.2123844797986587e_7
>>> 1.2123844797986587e_7   1.2123844797986587e_7 0
>>>    2.4957443568025895e_8   2.4957443568025895e_8
>>> 2.4957443568025895e_8   2.4957443568025895e_8 0
>>>   _3.1988238342620081e_8  _3.1988238342620081e_8
>>> _3.1988238342620081e_8  _3.1988238342620081e_8 0
>>> _5.1823482102912192e_10 _5.1823482102912192e_10
>>> _5.1823482102912192e_10 _5.1823482102912192e_10 0
>>>   _1.1455011151761565e_7  _1.1455011151761565e_7
>>> _1.1455011151761565e_7  _1.1455011151761565e_7 0
>>>         ]d=:c mp NbI
>>>   3.3727189656402491e_10   6.942883603207513e_11
>>> _8.8987726198450762e_11  _1.441671712780783e_12 _3.1866568738641721e_10
>>>   6.9428836032077935e_11  1.4292217412350897e_11
>>> _1.8318497076221252e_11 _2.9677417531211663e_13 _6.5598669749826067e_11
>>> _8.8987726198451706e_11 _1.8318497076220693e_11
>>> 2.3479025363938921e_11  3.8037882477597397e_13 8.4078558655125846e_11
>>> _1.4416717127807238e_12 _2.9677417531209235e_13
>>> 3.8037882477595918e_13  6.1624385209859802e_15 1.3621393066516946e_12
>>> _3.1866568738642073e_10 _6.5598669749824141e_11
>>> 8.4078558655125924e_11  1.3621393066517597e_12 3.0108592311420753e_10
>>>         ]e=:NbI - d
>>>    0.0045328344164105271  0.00033293998348083668
>>> _0.0017724766597981138 _0.00031140912439777367 _0.0028261600905336174
>>>   0.00033293998348086812  0.00074882329681384913
>>> _0.00012756882532661765 _0.00038153100293938686 _0.00057288268896462887
>>>   _0.0017724766597981279 _0.00012756882532660762
>>> 0.0011266169145724698   3.9439332284661476e_5 0.00075421374633090137
>>> _0.00031140912439777405 _0.00038153100293938501
>>> 3.9439332284660466e_5  0.00064160958749499744 1.6408293152415618e_5
>>>   _0.0028261600905336603 _0.00057288268896460545
>>> 0.00075421374633090712   1.6408293152416783e_5 0.0042952959863754138
>>>         ]f=:e mp W
>>> _0.33363012653942103
>>> _0.21892822215417146
>>> _0.10546286817415873
>>> _0.24545184018518121
>>>   _0.1044605740131157
>>>         ]g=:NbI mp CT
>>>    0.0013909444659834052
>>>   0.00028633175856724745
>>> _0.00036699466085721166
>>>   _5.9456044547029092e_6
>>>   _0.0013142105194193007
>>>         ]h=:g mp NcI
>>>   2.4247689595973174e_7
>>>    4.991488713605179e_8
>>> _6.3976476685240161e_8
>>> _1.0364696420582438e_9
>>>   _2.291002230352313e_7
>>>         ]i=:g mp Wx
>>> 0.00069547223299170258 0.00014316587928362372 _0.00018349733042860583
>>> _2.9728022273514546e_6 _0.00065710525970965033
>>>             ]dX=:f + i NB. step by step solution
>>> _0.33293465430642932
>>> _0.21878505627488784
>>> _0.10564636550458734
>>> _0.24545481298740857
>>> _0.10511767927282535
>>> NB.=======================================================================================
>>>
>>>     NB. VERSION 1
>>>     NB. dX=(NbI-NbI*CT*NcI*C*NbI)*W+NbI*CT*NcI*Wx
>>>     NB. dX=((NbI-(((NbI*CT)*NcI)*C*NbI))*W)+((NbI*CT)*NcI*Wx)
>>>         ]dX=:((NbI-(((NbI mp CT) mp NcI) mp C mp NbI)) mp W)+((NbI mp
>>> CT) mp NcI mp Wx)
>>> _0.33363000530097303
>>>   _0.2189281971967279
>>> _0.10546290016239707
>>> _0.24545184070341602
>>> _0.10446068856322722
>>> NB.=======================================================================================
>>>
>>>     NB. VERSION 2
>>>     NB. dX=(((NbI-(((NbI*CT)*NcI)*C)*NbI)*W)+(NbI*CT)*NcI)*Wx
>>>         ]dX=:(((NbI-(((NbI mp CT) mp NcI) mp C) mp NbI) mp W)+(NbI mp
>>> CT) mp NcI) mp Wx
>>> _0.16681494203126254 _0.10946408611964216 _0.052731466075317708
>>> _0.12272592061082542 _0.052230401556669366
>>> NB.=======================================================================================
>>>
>>>     NB. VERSION 3
>>>     NB. dX=((NbI-(((NbI*CT)*NcI)*C)*NbI)*W)+(NbI*CT)*NcI*Wx
>>>         ]dX=:((NbI-(((NbI mp CT) mp NcI) mp C) mp NbI) mp W)+(NbI mp
>>> CT) mp NcI mp Wx
>>> _0.33363000530097303
>>>   _0.2189281971967279
>>> _0.10546290016239707
>>> _0.24545184070341602
>>> _0.10446068856322722
>>> NB.=======================================================================================
>>>
>>>     NB. VERSION 4
>>>     NB. dX=(NbI-NbI*CT*NcI*C*NbI)*W+NbI*CT*NcI*Wx
>>>     NB. D=(NbI*CT)*NcI
>>>     NB. dX=(NbI-D*C*NbI)*W+D*Wx
>>>     NB. dX=((NbI-((D*C)*NbI))*W)+D*Wx
>>>         ]dX=:(NbI-((D mp C) mp NbI)) mp W + D mp Wx[D=:(NbI mp CT) mp
>>> NcI
>>> _0.33363012560096128
>>> _0.21892822202521539
>>> _0.10546286851468895
>>> _0.24545184023593167
>>> _0.10446057488621374
>>> NB.=======================================================================================
>>>
>>>     NB. VERSION 5
>>>     NB. dX=(NbI-NbI*CT*NcI*C*NbI)*W+NbI*CT*NcI*Wx
>>>     NB. dX=:(NbI-NbI mp CT mp NcI mp C mp NbI) mp W+NbI mp CT mp NcI
>>> mp Wx
>>>         ]dX=:(NbI-NbI mp CT mp NcI mp C mp NbI) mp W+NbI mp CT mp NcI
>>> mp Wx
>>> _0.33363012560096128
>>> _0.21892822202521539
>>> _0.10546286851468895
>>> _0.24545184023593167
>>> _0.10446057488621374
>>> NB.=======================================================================================
>>>
>>>        NB. ORDER OF EVALUATION J Primer tell
>>>     NB. J has a right-to-left order of evaluation.
>>>     NB. J always parenthesies from right-to-left.
>>>     NB. Remember: no verb precedence and right-to-left evaluation
>>> NB.=======================================================================================
>>>
>>>     NB. How can solve the above matrix equation?
>>>     NB.
>>>     NB. Can somebody tell me the right solution?
>>>     NB.
>>>     NB. Thanks, Erik
>>> ----------------------------------------------------------------------
>>
>
>
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 2014.0.4716 / Virus Database: 4007/8071 - Release Date: 08/20/14
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>


More information about the Programming mailing list