linalg.rlg 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220
  1. Fri Feb 12 00:06:04 MET 1999
  2. REDUCE 3.7, 15-Jan-99 ...
  3. 1: 1:
  4. 2: 2: 2: 2: 2: 2: 2: 2: 2:
  5. 3: 3: if lisp !*rounded then rounded_was_on := t
  6. else rounded_was_on := nil;
  7. mat1 := mat((1,2,3,4,5),(2,3,4,5,6),(3,4,5,6,7),(4,5,6,7,8),(5,6,7,8,9));
  8. [1 2 3 4 5]
  9. [ ]
  10. [2 3 4 5 6]
  11. [ ]
  12. mat1 := [3 4 5 6 7]
  13. [ ]
  14. [4 5 6 7 8]
  15. [ ]
  16. [5 6 7 8 9]
  17. mat2 := mat((1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4));
  18. [1 1 1 1]
  19. [ ]
  20. [2 2 2 2]
  21. mat2 := [ ]
  22. [3 3 3 3]
  23. [ ]
  24. [4 4 4 4]
  25. mat3 := mat((x),(x),(x),(x));
  26. [x]
  27. [ ]
  28. [x]
  29. mat3 := [ ]
  30. [x]
  31. [ ]
  32. [x]
  33. mat4 := mat((3,3),(4,4),(5,5),(6,6));
  34. [3 3]
  35. [ ]
  36. [4 4]
  37. mat4 := [ ]
  38. [5 5]
  39. [ ]
  40. [6 6]
  41. mat5 := mat((1,2,1,1),(1,2,3,1),(4,5,1,2),(3,4,5,6));
  42. [1 2 1 1]
  43. [ ]
  44. [1 2 3 1]
  45. mat5 := [ ]
  46. [4 5 1 2]
  47. [ ]
  48. [3 4 5 6]
  49. mat6 := mat((i+1,i+2,i+3),(4,5,2),(1,i,0));
  50. [i + 1 i + 2 i + 3]
  51. [ ]
  52. mat6 := [ 4 5 2 ]
  53. [ ]
  54. [ 1 i 0 ]
  55. mat7 := mat((1,1,0),(1,3,1),(0,1,1));
  56. [1 1 0]
  57. [ ]
  58. mat7 := [1 3 1]
  59. [ ]
  60. [0 1 1]
  61. mat8 := mat((1,3),(-4,3));
  62. [1 3]
  63. mat8 := [ ]
  64. [-4 3]
  65. mat9 := mat((1,2,3,4),(9,8,7,6));
  66. [1 2 3 4]
  67. mat9 := [ ]
  68. [9 8 7 6]
  69. poly := x^7+x^5+4*x^4+5*x^3+12;
  70. 7 5 4 3
  71. poly := x + x + 4*x + 5*x + 12
  72. poly1 := x^2+x*y^3+x*y*z^3+y*x+2+y*3;
  73. 2 3 3
  74. poly1 := x + x*y + x*y*z + x*y + 3*y + 2
  75. on errcont;
  76. % Basis matrix manipulations.
  77. add_columns(mat1,1,2,5*y);
  78. [1 5*y + 2 3 4 5]
  79. [ ]
  80. [2 10*y + 3 4 5 6]
  81. [ ]
  82. [3 15*y + 4 5 6 7]
  83. [ ]
  84. [4 5*(4*y + 1) 6 7 8]
  85. [ ]
  86. [5 25*y + 6 7 8 9]
  87. add_rows(mat1,1,2,x);
  88. [ 1 2 3 4 5 ]
  89. [ ]
  90. [x + 2 2*x + 3 3*x + 4 4*x + 5 5*x + 6]
  91. [ ]
  92. [ 3 4 5 6 7 ]
  93. [ ]
  94. [ 4 5 6 7 8 ]
  95. [ ]
  96. [ 5 6 7 8 9 ]
  97. add_to_columns(mat1,3,1000);
  98. [1 2 1003 4 5]
  99. [ ]
  100. [2 3 1004 5 6]
  101. [ ]
  102. [3 4 1005 6 7]
  103. [ ]
  104. [4 5 1006 7 8]
  105. [ ]
  106. [5 6 1007 8 9]
  107. add_to_columns(mat1,{1,2,3},y);
  108. [y + 1 y + 2 y + 3 4 5]
  109. [ ]
  110. [y + 2 y + 3 y + 4 5 6]
  111. [ ]
  112. [y + 3 y + 4 y + 5 6 7]
  113. [ ]
  114. [y + 4 y + 5 y + 6 7 8]
  115. [ ]
  116. [y + 5 y + 6 y + 7 8 9]
  117. add_to_rows(mat1,2,1000);
  118. [ 1 2 3 4 5 ]
  119. [ ]
  120. [1002 1003 1004 1005 1006]
  121. [ ]
  122. [ 3 4 5 6 7 ]
  123. [ ]
  124. [ 4 5 6 7 8 ]
  125. [ ]
  126. [ 5 6 7 8 9 ]
  127. add_to_rows(mat1,{1,2,3},x);
  128. [x + 1 x + 2 x + 3 x + 4 x + 5]
  129. [ ]
  130. [x + 2 x + 3 x + 4 x + 5 x + 6]
  131. [ ]
  132. [x + 3 x + 4 x + 5 x + 6 x + 7]
  133. [ ]
  134. [ 4 5 6 7 8 ]
  135. [ ]
  136. [ 5 6 7 8 9 ]
  137. augment_columns(mat1,2);
  138. [2]
  139. [ ]
  140. [3]
  141. [ ]
  142. [4]
  143. [ ]
  144. [5]
  145. [ ]
  146. [6]
  147. augment_columns(mat1,{1,2,5});
  148. [1 2 5]
  149. [ ]
  150. [2 3 6]
  151. [ ]
  152. [3 4 7]
  153. [ ]
  154. [4 5 8]
  155. [ ]
  156. [5 6 9]
  157. stack_rows(mat1,3);
  158. [3 4 5 6 7]
  159. stack_rows(mat1,{1,3,5});
  160. [1 2 3 4 5]
  161. [ ]
  162. [3 4 5 6 7]
  163. [ ]
  164. [5 6 7 8 9]
  165. char_poly(mat1,x);
  166. 3 2
  167. x *(x - 25*x - 50)
  168. column_dim(mat2);
  169. 4
  170. row_dim(mat1);
  171. 5
  172. copy_into(mat7,mat1,2,3);
  173. [1 2 3 4 5]
  174. [ ]
  175. [2 3 1 1 0]
  176. [ ]
  177. [3 4 1 3 1]
  178. [ ]
  179. [4 5 0 1 1]
  180. [ ]
  181. [5 6 7 8 9]
  182. copy_into(mat7,mat1,5,5);
  183. ***** Error in copy_into: the matrix
  184. [1 1 0]
  185. [ ]
  186. [1 3 1]
  187. [ ]
  188. [0 1 1]
  189. does not fit into
  190. [1 2 3 4 5]
  191. [ ]
  192. [2 3 4 5 6]
  193. [ ]
  194. [3 4 5 6 7]
  195. [ ]
  196. [4 5 6 7 8]
  197. [ ]
  198. [5 6 7 8 9]
  199. at position 5,5.
  200. diagonal(3);
  201. [3]
  202. % diagonal can take both a list of arguments or just the arguments.
  203. diagonal({mat2,mat6});
  204. [1 1 1 1 0 0 0 ]
  205. [ ]
  206. [2 2 2 2 0 0 0 ]
  207. [ ]
  208. [3 3 3 3 0 0 0 ]
  209. [ ]
  210. [4 4 4 4 0 0 0 ]
  211. [ ]
  212. [0 0 0 0 i + 1 i + 2 i + 3]
  213. [ ]
  214. [0 0 0 0 4 5 2 ]
  215. [ ]
  216. [0 0 0 0 1 i 0 ]
  217. diagonal(mat1,mat2,mat5);
  218. [1 2 3 4 5 0 0 0 0 0 0 0 0]
  219. [ ]
  220. [2 3 4 5 6 0 0 0 0 0 0 0 0]
  221. [ ]
  222. [3 4 5 6 7 0 0 0 0 0 0 0 0]
  223. [ ]
  224. [4 5 6 7 8 0 0 0 0 0 0 0 0]
  225. [ ]
  226. [5 6 7 8 9 0 0 0 0 0 0 0 0]
  227. [ ]
  228. [0 0 0 0 0 1 1 1 1 0 0 0 0]
  229. [ ]
  230. [0 0 0 0 0 2 2 2 2 0 0 0 0]
  231. [ ]
  232. [0 0 0 0 0 3 3 3 3 0 0 0 0]
  233. [ ]
  234. [0 0 0 0 0 4 4 4 4 0 0 0 0]
  235. [ ]
  236. [0 0 0 0 0 0 0 0 0 1 2 1 1]
  237. [ ]
  238. [0 0 0 0 0 0 0 0 0 1 2 3 1]
  239. [ ]
  240. [0 0 0 0 0 0 0 0 0 4 5 1 2]
  241. [ ]
  242. [0 0 0 0 0 0 0 0 0 3 4 5 6]
  243. extend(mat1,3,2,x);
  244. [1 2 3 4 5 x x]
  245. [ ]
  246. [2 3 4 5 6 x x]
  247. [ ]
  248. [3 4 5 6 7 x x]
  249. [ ]
  250. [4 5 6 7 8 x x]
  251. [ ]
  252. [5 6 7 8 9 x x]
  253. [ ]
  254. [x x x x x x x]
  255. [ ]
  256. [x x x x x x x]
  257. [ ]
  258. [x x x x x x x]
  259. find_companion(mat5,x);
  260. 2
  261. x - 2*x - 2
  262. get_columns(mat1,1);
  263. {
  264. [1]
  265. [ ]
  266. [2]
  267. [ ]
  268. [3]
  269. [ ]
  270. [4]
  271. [ ]
  272. [5]
  273. }
  274. get_columns(mat1,{1,2});
  275. {
  276. [1]
  277. [ ]
  278. [2]
  279. [ ]
  280. [3]
  281. [ ]
  282. [4]
  283. [ ]
  284. [5]
  285. ,
  286. [2]
  287. [ ]
  288. [3]
  289. [ ]
  290. [4]
  291. [ ]
  292. [5]
  293. [ ]
  294. [6]
  295. }
  296. get_rows(mat1,3);
  297. {
  298. [3 4 5 6 7]
  299. }
  300. get_rows(mat1,{1,3});
  301. {
  302. [1 2 3 4 5]
  303. ,
  304. [3 4 5 6 7]
  305. }
  306. hermitian_tp(mat6);
  307. [ - i + 1 4 1 ]
  308. [ ]
  309. [ - i + 2 5 - i]
  310. [ ]
  311. [ - i + 3 2 0 ]
  312. % matrix_augment and matrix_stack can take both a list of arguments
  313. % or just the arguments.
  314. matrix_augment({mat1,mat2});
  315. ***** Error in matrix_augment:
  316. ***** all input matrices must have the same row dimension.
  317. matrix_augment(mat4,mat2,mat4);
  318. [3 3 1 1 1 1 3 3]
  319. [ ]
  320. [4 4 2 2 2 2 4 4]
  321. [ ]
  322. [5 5 3 3 3 3 5 5]
  323. [ ]
  324. [6 6 4 4 4 4 6 6]
  325. matrix_stack(mat1,mat2);
  326. ***** Error in matrix_stack:
  327. ***** all input matrices must have the same column dimension.
  328. matrix_stack({mat6,mat((z,z,z)),mat7});
  329. [i + 1 i + 2 i + 3]
  330. [ ]
  331. [ 4 5 2 ]
  332. [ ]
  333. [ 1 i 0 ]
  334. [ ]
  335. [ z z z ]
  336. [ ]
  337. [ 1 1 0 ]
  338. [ ]
  339. [ 1 3 1 ]
  340. [ ]
  341. [ 0 1 1 ]
  342. minor(mat1,2,3);
  343. [1 2 4 5]
  344. [ ]
  345. [3 4 6 7]
  346. [ ]
  347. [4 5 7 8]
  348. [ ]
  349. [5 6 8 9]
  350. mult_columns(mat1,3,y);
  351. [1 2 3*y 4 5]
  352. [ ]
  353. [2 3 4*y 5 6]
  354. [ ]
  355. [3 4 5*y 6 7]
  356. [ ]
  357. [4 5 6*y 7 8]
  358. [ ]
  359. [5 6 7*y 8 9]
  360. mult_columns(mat1,{2,3,4},100);
  361. [1 200 300 400 5]
  362. [ ]
  363. [2 300 400 500 6]
  364. [ ]
  365. [3 400 500 600 7]
  366. [ ]
  367. [4 500 600 700 8]
  368. [ ]
  369. [5 600 700 800 9]
  370. mult_rows(mat1,2,x);
  371. [ 1 2 3 4 5 ]
  372. [ ]
  373. [2*x 3*x 4*x 5*x 6*x]
  374. [ ]
  375. [ 3 4 5 6 7 ]
  376. [ ]
  377. [ 4 5 6 7 8 ]
  378. [ ]
  379. [ 5 6 7 8 9 ]
  380. mult_rows(mat1,{1,3,5},10);
  381. [10 20 30 40 50]
  382. [ ]
  383. [2 3 4 5 6 ]
  384. [ ]
  385. [30 40 50 60 70]
  386. [ ]
  387. [4 5 6 7 8 ]
  388. [ ]
  389. [50 60 70 80 90]
  390. pivot(mat1,3,3);
  391. [ - 4 - 2 2 4 ]
  392. [------ ------ 0 --- --- ]
  393. [ 5 5 5 5 ]
  394. [ ]
  395. [ - 2 - 1 1 2 ]
  396. [------ ------ 0 --- --- ]
  397. [ 5 5 5 5 ]
  398. [ ]
  399. [ 3 4 5 6 7 ]
  400. [ ]
  401. [ 2 1 - 1 - 2 ]
  402. [ --- --- 0 ------ ------]
  403. [ 5 5 5 5 ]
  404. [ ]
  405. [ 4 2 - 2 - 4 ]
  406. [ --- --- 0 ------ ------]
  407. [ 5 5 5 5 ]
  408. rows_pivot(mat1,3,3,{1,5});
  409. [ - 4 - 2 2 4 ]
  410. [------ ------ 0 --- --- ]
  411. [ 5 5 5 5 ]
  412. [ ]
  413. [ 2 3 4 5 6 ]
  414. [ ]
  415. [ 3 4 5 6 7 ]
  416. [ ]
  417. [ 4 5 6 7 8 ]
  418. [ ]
  419. [ 4 2 - 2 - 4 ]
  420. [ --- --- 0 ------ ------]
  421. [ 5 5 5 5 ]
  422. remove_columns(mat1,3);
  423. [1 2 4 5]
  424. [ ]
  425. [2 3 5 6]
  426. [ ]
  427. [3 4 6 7]
  428. [ ]
  429. [4 5 7 8]
  430. [ ]
  431. [5 6 8 9]
  432. remove_columns(mat1,{2,3,4});
  433. [1 5]
  434. [ ]
  435. [2 6]
  436. [ ]
  437. [3 7]
  438. [ ]
  439. [4 8]
  440. [ ]
  441. [5 9]
  442. remove_rows(mat1,2);
  443. [1 2 3 4 5]
  444. [ ]
  445. [3 4 5 6 7]
  446. [ ]
  447. [4 5 6 7 8]
  448. [ ]
  449. [5 6 7 8 9]
  450. remove_rows(mat1,{1,3});
  451. [2 3 4 5 6]
  452. [ ]
  453. [4 5 6 7 8]
  454. [ ]
  455. [5 6 7 8 9]
  456. remove_rows(mat1,{1,2,3,4,5});
  457. ***** Warning in remove_rows:
  458. all the rows have been removed. Returning nil.
  459. swap_columns(mat1,2,4);
  460. [1 4 3 2 5]
  461. [ ]
  462. [2 5 4 3 6]
  463. [ ]
  464. [3 6 5 4 7]
  465. [ ]
  466. [4 7 6 5 8]
  467. [ ]
  468. [5 8 7 6 9]
  469. swap_rows(mat1,1,2);
  470. [2 3 4 5 6]
  471. [ ]
  472. [1 2 3 4 5]
  473. [ ]
  474. [3 4 5 6 7]
  475. [ ]
  476. [4 5 6 7 8]
  477. [ ]
  478. [5 6 7 8 9]
  479. swap_entries(mat1,{1,1},{5,5});
  480. [9 2 3 4 5]
  481. [ ]
  482. [2 3 4 5 6]
  483. [ ]
  484. [3 4 5 6 7]
  485. [ ]
  486. [4 5 6 7 8]
  487. [ ]
  488. [5 6 7 8 1]
  489. % Constructors - functions that create matrices.
  490. band_matrix(x,5);
  491. [x 0 0 0 0]
  492. [ ]
  493. [0 x 0 0 0]
  494. [ ]
  495. [0 0 x 0 0]
  496. [ ]
  497. [0 0 0 x 0]
  498. [ ]
  499. [0 0 0 0 x]
  500. band_matrix({x,y,z},6);
  501. [y z 0 0 0 0]
  502. [ ]
  503. [x y z 0 0 0]
  504. [ ]
  505. [0 x y z 0 0]
  506. [ ]
  507. [0 0 x y z 0]
  508. [ ]
  509. [0 0 0 x y z]
  510. [ ]
  511. [0 0 0 0 x y]
  512. block_matrix(1,2,{mat1,mat2});
  513. ***** Error in block_matrix: row dimensions of
  514. ***** matrices into block_matrix are not compatible
  515. block_matrix(2,3,{mat2,mat3,mat2,mat3,mat2,mat2});
  516. [1 1 1 1 x 1 1 1 1]
  517. [ ]
  518. [2 2 2 2 x 2 2 2 2]
  519. [ ]
  520. [3 3 3 3 x 3 3 3 3]
  521. [ ]
  522. [4 4 4 4 x 4 4 4 4]
  523. [ ]
  524. [x 1 1 1 1 1 1 1 1]
  525. [ ]
  526. [x 2 2 2 2 2 2 2 2]
  527. [ ]
  528. [x 3 3 3 3 3 3 3 3]
  529. [ ]
  530. [x 4 4 4 4 4 4 4 4]
  531. char_matrix(mat1,x);
  532. [x - 1 -2 -3 -4 -5 ]
  533. [ ]
  534. [ -2 x - 3 -4 -5 -6 ]
  535. [ ]
  536. [ -3 -4 x - 5 -6 -7 ]
  537. [ ]
  538. [ -4 -5 -6 x - 7 -8 ]
  539. [ ]
  540. [ -5 -6 -7 -8 x - 9]
  541. cfmat := coeff_matrix({x+y+4*z=10,y+x-z=20,x+y+4});
  542. cfmat := {
  543. [4 1 1]
  544. [ ]
  545. [-1 1 1]
  546. [ ]
  547. [0 1 1]
  548. ,
  549. [z]
  550. [ ]
  551. [y]
  552. [ ]
  553. [x]
  554. ,
  555. [10]
  556. [ ]
  557. [20]
  558. [ ]
  559. [-4]
  560. }
  561. first cfmat * second cfmat;
  562. [x + y + 4*z]
  563. [ ]
  564. [ x + y - z ]
  565. [ ]
  566. [ x + y ]
  567. third cfmat;
  568. [10]
  569. [ ]
  570. [20]
  571. [ ]
  572. [-4]
  573. companion(poly,x);
  574. [0 0 0 0 0 0 -12]
  575. [ ]
  576. [1 0 0 0 0 0 0 ]
  577. [ ]
  578. [0 1 0 0 0 0 0 ]
  579. [ ]
  580. [0 0 1 0 0 0 -5 ]
  581. [ ]
  582. [0 0 0 1 0 0 -4 ]
  583. [ ]
  584. [0 0 0 0 1 0 -1 ]
  585. [ ]
  586. [0 0 0 0 0 1 0 ]
  587. hessian(poly1,{w,x,y,z});
  588. [0 0 0 0 ]
  589. [ ]
  590. [ 2 3 2 ]
  591. [0 2 3*y + z + 1 3*y*z ]
  592. [ ]
  593. [ 2 3 2 ]
  594. [0 3*y + z + 1 6*x*y 3*x*z ]
  595. [ ]
  596. [ 2 2 ]
  597. [0 3*y*z 3*x*z 6*x*y*z]
  598. hilbert(4,1);
  599. [ 1 1 1 ]
  600. [ 1 --- --- ---]
  601. [ 2 3 4 ]
  602. [ ]
  603. [ 1 1 1 1 ]
  604. [--- --- --- ---]
  605. [ 2 3 4 5 ]
  606. [ ]
  607. [ 1 1 1 1 ]
  608. [--- --- --- ---]
  609. [ 3 4 5 6 ]
  610. [ ]
  611. [ 1 1 1 1 ]
  612. [--- --- --- ---]
  613. [ 4 5 6 7 ]
  614. hilbert(3,y+x);
  615. [ - 1 - 1 - 1 ]
  616. [----------- ----------- -----------]
  617. [ x + y - 2 x + y - 3 x + y - 4 ]
  618. [ ]
  619. [ - 1 - 1 - 1 ]
  620. [----------- ----------- -----------]
  621. [ x + y - 3 x + y - 4 x + y - 5 ]
  622. [ ]
  623. [ - 1 - 1 - 1 ]
  624. [----------- ----------- -----------]
  625. [ x + y - 4 x + y - 5 x + y - 6 ]
  626. jacobian({x^4,x*y^2,x*y*z^3},{w,x,y,z});
  627. [ 3 ]
  628. [0 4*x 0 0 ]
  629. [ ]
  630. [ 2 ]
  631. [0 y 2*x*y 0 ]
  632. [ ]
  633. [ 3 3 2]
  634. [0 y*z x*z 3*x*y*z ]
  635. jordan_block(x,5);
  636. [x 1 0 0 0]
  637. [ ]
  638. [0 x 1 0 0]
  639. [ ]
  640. [0 0 x 1 0]
  641. [ ]
  642. [0 0 0 x 1]
  643. [ ]
  644. [0 0 0 0 x]
  645. make_identity(11);
  646. [1 0 0 0 0 0 0 0 0 0 0]
  647. [ ]
  648. [0 1 0 0 0 0 0 0 0 0 0]
  649. [ ]
  650. [0 0 1 0 0 0 0 0 0 0 0]
  651. [ ]
  652. [0 0 0 1 0 0 0 0 0 0 0]
  653. [ ]
  654. [0 0 0 0 1 0 0 0 0 0 0]
  655. [ ]
  656. [0 0 0 0 0 1 0 0 0 0 0]
  657. [ ]
  658. [0 0 0 0 0 0 1 0 0 0 0]
  659. [ ]
  660. [0 0 0 0 0 0 0 1 0 0 0]
  661. [ ]
  662. [0 0 0 0 0 0 0 0 1 0 0]
  663. [ ]
  664. [0 0 0 0 0 0 0 0 0 1 0]
  665. [ ]
  666. [0 0 0 0 0 0 0 0 0 0 1]
  667. on rounded;
  668. % makes things a bit easier to read.
  669. random_matrix(3,3,100);
  670. [ - 8.11911717343 - 75.7167729277 30.62058083 ]
  671. [ ]
  672. [ - 50.0325962624 47.1655452861 35.8674263384 ]
  673. [ ]
  674. [ - 49.3715543826 - 97.5563670864 - 18.8861862756]
  675. on not_negative;
  676. random_matrix(3,3,100);
  677. [43.8999853223 33.7140980286 33.75065406 ]
  678. [ ]
  679. [49.7333355117 98.9642944905 58.5331568816]
  680. [ ]
  681. [39.9146060895 67.7954727837 24.8684367642]
  682. on only_integer;
  683. random_matrix(3,3,100);
  684. [16 77 49]
  685. [ ]
  686. [28 84 51]
  687. [ ]
  688. [84 56 57]
  689. on symmetric;
  690. random_matrix(3,3,100);
  691. [89 74 91]
  692. [ ]
  693. [74 95 41]
  694. [ ]
  695. [91 41 87]
  696. off symmetric;
  697. on upper_matrix;
  698. random_matrix(3,3,100);
  699. [41 3 8 ]
  700. [ ]
  701. [0 31 80]
  702. [ ]
  703. [0 0 12]
  704. off upper_matrix;
  705. on lower_matrix;
  706. random_matrix(3,3,100);
  707. [69 0 0 ]
  708. [ ]
  709. [34 87 0 ]
  710. [ ]
  711. [78 72 13]
  712. off lower_matrix;
  713. on imaginary;
  714. off not_negative;
  715. random_matrix(3,3,100);
  716. [ - 95*i - 72 - 57*i + 59 52*i + 46]
  717. [ ]
  718. [ - 40*i - 54 70*i 39*i + 28]
  719. [ ]
  720. [ - 40*i + 45 28*i - 81 9*i + 74 ]
  721. off rounded;
  722. % toeplitz and vandermonde can take both a list of arguments or just
  723. % the arguments.
  724. toeplitz({1,2,3,4,5});
  725. [1 2 3 4 5]
  726. [ ]
  727. [2 1 2 3 4]
  728. [ ]
  729. [3 2 1 2 3]
  730. [ ]
  731. [4 3 2 1 2]
  732. [ ]
  733. [5 4 3 2 1]
  734. toeplitz(x,y,z);
  735. [x y z]
  736. [ ]
  737. [y x y]
  738. [ ]
  739. [z y x]
  740. vandermonde({1,2,3,4,5});
  741. [1 1 1 1 1 ]
  742. [ ]
  743. [1 2 4 8 16 ]
  744. [ ]
  745. [1 3 9 27 81 ]
  746. [ ]
  747. [1 4 16 64 256]
  748. [ ]
  749. [1 5 25 125 625]
  750. vandermonde(x,y,z);
  751. [ 2]
  752. [1 x x ]
  753. [ ]
  754. [ 2]
  755. [1 y y ]
  756. [ ]
  757. [ 2]
  758. [1 z z ]
  759. % kronecker_product
  760. a1 := mat((1,2),(3,4),(5,6));
  761. [1 2]
  762. [ ]
  763. a1 := [3 4]
  764. [ ]
  765. [5 6]
  766. a2 := mat((1,x,1),(2,2,2),(3,3,3));
  767. [1 x 1]
  768. [ ]
  769. a2 := [2 2 2]
  770. [ ]
  771. [3 3 3]
  772. kronecker_product(a1,a2);
  773. [1 x 1 2 2*x 2 ]
  774. [ ]
  775. [2 2 2 4 4 4 ]
  776. [ ]
  777. [3 3 3 6 6 6 ]
  778. [ ]
  779. [3 3*x 3 4 4*x 4 ]
  780. [ ]
  781. [6 6 6 8 8 8 ]
  782. [ ]
  783. [9 9 9 12 12 12]
  784. [ ]
  785. [5 5*x 5 6 6*x 6 ]
  786. [ ]
  787. [10 10 10 12 12 12]
  788. [ ]
  789. [15 15 15 18 18 18]
  790. clear a1,a2;
  791. % High level algorithms.
  792. on rounded;
  793. % makes output easier to read.
  794. ch := cholesky(mat7);
  795. ch := {
  796. [1 0 0 ]
  797. [ ]
  798. [1 1.41421356237 0 ]
  799. [ ]
  800. [0 0.707106781187 0.707106781187]
  801. ,
  802. [1 1 0 ]
  803. [ ]
  804. [0 1.41421356237 0.707106781187]
  805. [ ]
  806. [0 0 0.707106781187]
  807. }
  808. tp first ch - second ch;
  809. [0 0 0]
  810. [ ]
  811. [0 0 0]
  812. [ ]
  813. [0 0 0]
  814. tmp := first ch * second ch;
  815. [1 1 0]
  816. [ ]
  817. tmp := [1 3.0 1]
  818. [ ]
  819. [0 1 1]
  820. tmp - mat7;
  821. [0 0 0]
  822. [ ]
  823. [0 0 0]
  824. [ ]
  825. [0 0 0]
  826. off rounded;
  827. gram_schmidt({1,0,0},{1,1,0},{1,1,1});
  828. {{1,0,0},{0,1,0},{0,0,1}}
  829. gram_schmidt({1,2},{3,4});
  830. 1 2 2*sqrt(5) - sqrt(5)
  831. {{---------,---------},{-----------,------------}}
  832. sqrt(5) sqrt(5) 5 5
  833. on rounded;
  834. % again, makes large quotients a bit more readable.
  835. % The algorithm used for lu_decom sometimes swaps the rows of the input
  836. % matrix so that (given matrix A, lu_decom(A) = {L,U,vec}), we find L*U
  837. % does not equal A but a row equivalent of it. The call convert(A,vec)
  838. % will return this row equivalent (ie: L*U = convert(A,vec)).
  839. lu := lu_decom(mat5);
  840. lu := {
  841. [4 0 0 0 ]
  842. [ ]
  843. [1 0.75 0 0 ]
  844. [ ]
  845. [1 0.75 2.0 0 ]
  846. [ ]
  847. [3 0.25 4.0 4.33333333333]
  848. ,
  849. [1 1.25 0.25 0.5 ]
  850. [ ]
  851. [0 1 1 0.666666666667]
  852. [ ]
  853. [0 0 1 0 ]
  854. [ ]
  855. [0 0 0 1 ]
  856. ,
  857. [3,3,3,4]}
  858. mat5;
  859. [1 2 1 1]
  860. [ ]
  861. [1 2 3 1]
  862. [ ]
  863. [4 5 1 2]
  864. [ ]
  865. [3 4 5 6]
  866. tmp := first lu * second lu;
  867. [4 5.0 1 2.0]
  868. [ ]
  869. [1 2.0 1 1 ]
  870. tmp := [ ]
  871. [1 2.0 3.0 1 ]
  872. [ ]
  873. [3 4.0 5.0 6.0]
  874. tmp1 := convert(mat5,third lu);
  875. [4 5 1 2]
  876. [ ]
  877. [1 2 1 1]
  878. tmp1 := [ ]
  879. [1 2 3 1]
  880. [ ]
  881. [3 4 5 6]
  882. tmp - tmp1;
  883. [0 0 0 0]
  884. [ ]
  885. [0 0 0 0]
  886. [ ]
  887. [0 0 0 0]
  888. [ ]
  889. [0 0 0 0]
  890. % and the complex case...
  891. lu1 := lu_decom(mat6);
  892. lu1 := {
  893. [ 1 0 0 ]
  894. [ ]
  895. [ 4 - 4*i + 5 0 ]
  896. [ ]
  897. [i + 1 3 0.414634146341*i + 2.26829268293]
  898. ,
  899. [1 i 0 ]
  900. [ ]
  901. [0 1 0.19512195122*i + 0.243902439024]
  902. [ ]
  903. [0 0 1 ]
  904. ,
  905. [3,2,3]}
  906. mat6;
  907. [i + 1 i + 2 i + 3]
  908. [ ]
  909. [ 4 5 2 ]
  910. [ ]
  911. [ 1 i 0 ]
  912. tmp := first lu1 * second lu1;
  913. [ 1 i 0 ]
  914. [ ]
  915. tmp := [ 4 5 2.0 ]
  916. [ ]
  917. [i + 1 i + 2 i + 3.0]
  918. tmp1 := convert(mat6,third lu1);
  919. [ 1 i 0 ]
  920. [ ]
  921. tmp1 := [ 4 5 2 ]
  922. [ ]
  923. [i + 1 i + 2 i + 3]
  924. tmp - tmp1;
  925. [0 0 0]
  926. [ ]
  927. [0 0 0]
  928. [ ]
  929. [0 0 0]
  930. mat9inv := pseudo_inverse(mat9);
  931. [ - 0.199999999996 0.100000000013 ]
  932. [ ]
  933. [ - 0.0499999999988 0.0500000000037 ]
  934. mat9inv := [ ]
  935. [ 0.0999999999982 - 5.57816640101e-12]
  936. [ ]
  937. [ 0.249999999995 - 0.0500000000148 ]
  938. mat9 * mat9inv;
  939. [ 0.999999999982 - 0.0000000000557817125824]
  940. [ ]
  941. [5.5409010713e-12 1.00000000002 ]
  942. simplex(min,2*x1+14*x2+36*x3,{-2*x1+x2+4*x3>=5,-x1-2*x2-3*x3<=2});
  943. {45.0,{x1=0,x2=0,x3=1.25}}
  944. simplex(max,10000 x1 + 1000 x2 + 100 x3 + 10 x4 + x5,{ x1 <= 1, 20 x1 +
  945. x2 <= 100, 200 x1 + 20 x2 + x3 <= 10000, 2000 x1 + 200 x2 + 20 x3 + x4
  946. <= 1000000, 20000 x1 + 2000 x2 + 200 x3 + 20 x4 + x5 <= 100000000});
  947. {100000000,{x1=0,x2=0,x3=0,x4=0,x5=1.0e+08}}
  948. simplex(max, 5 x1 + 4 x2 + 3 x3,
  949. { 2 x1 + 3 x2 + x3 <= 5,
  950. 4 x1 + x2 + 2 x3 <= 11,
  951. 3 x1 + 4 x2 + 2 x3 <= 8 });
  952. {13.0,{x1=2.0,x2=0,x3=1.0}}
  953. simplex(min,3 x1 + 5 x2,{ x1 + 2 x2 >= 2, 22 x1 + x2 >= 3});
  954. {5.04651162791,{x1=0.0930233,x2=0.953488}}
  955. simplex(max,10x+5y+5.5z,{5x+3z<=200,0.2x+0.1y+0.5z<=12,0.1x+0.2y+0.3z<=9,
  956. 30x+10y+50z<=1500});
  957. {525.0,{x=40.0,y=25.0,z=0}}
  958. %example of extra variables (>=0) being added.
  959. simplex(min,x-y,{x>=-3});
  960. *** Warning: variable y not defined in input. Has been defined as >=0.
  961. ***** Error in simplex: The problem is unbounded.
  962. % unfeasible as simplex algorithm implies all x>=0.
  963. simplex(min,x,{x<=-100});
  964. ***** Error in simplex: Problem has no feasible solution.
  965. % three error examples.
  966. simplex(maxx,x,{x>=5});
  967. ***** Error in simplex(first argument): must be either max or min.
  968. simplex(max,x,x>=5);
  969. ***** Error in simplex(third argument}: must be a list.
  970. simplex(max,x,{x<=y});
  971. ***** Error in simplex(third argument):
  972. ***** right hand side of each inequality must be a number
  973. simplex(max, 346 X11 + 346 X12 + 248 X21 + 248 X22 + 399 X31 + 399 X32 +
  974. 200 Y11 + 200 Y12 + 75 Y21 + 75 Y22 + 2.35 Z1 + 3.5 Z2,
  975. {
  976. 4 X11 + 4 X12 + 2 X21 + 2 X22 + X31 + X32 + 250 Y11 + 250 Y12 + 125 Y21 +
  977. 125 Y22 <= 25000,
  978. X11 + X12 + X21 + X22 + X31 + X32 + 2 Y11 + 2 Y12 + Y21 + Y22 <= 300,
  979. 20 X11 + 15 X12 + 30 Y11 + 20 Y21 + Z1 <= 1500,
  980. 40 X12 + 35 X22 + 50 X32 + 15 Y12 + 10 Y22 + Z2 = 5000,
  981. X31 = 0,
  982. Y11 + Y12 <= 50,
  983. Y21 + Y22 <= 100
  984. });
  985. {99250.0,
  986. {y21=0,
  987. y22=0,
  988. x31=0,
  989. x11=75.0,
  990. z1=0,
  991. x21=225.0,
  992. z2=5000.0,
  993. x32=0,
  994. x22=0,
  995. x12=0,
  996. y12=0,
  997. y11=0}}
  998. % from Marc van Dongen. Finding the first feasible solution for the
  999. % solution of systems of linear diophantine inequalities.
  1000. simplex(max,0,{
  1001. 3*X259+4*X261+3*X262+2*X263+X269+2*X270+3*X271+4*X272+5*X273+X229=2,
  1002. 7*X259+11*X261+8*X262+5*X263+3*X269+6*X270+9*X271+12*X272+15*X273+X229=4,
  1003. 2*X259+5*X261+4*X262+3*X263+3*X268+4*X269+5*X270+6*X271+7*X272+8*X273=1,
  1004. X262+2*X263+5*X268+4*X269+3*X270+2*X271+X272+2*X229=1,
  1005. X259+X262+2*X263+4*X268+3*X269+2*X270+X271-X273+3*X229=2,
  1006. X259+2*X261+2*X262+2*X263+3*X268+3*X269+3*X270+3*X271+3*X272+3*X273+X229=1,
  1007. X259+X261+X262+X263+X268+X269+X270+X271+X272+X273+X229=1});
  1008. {0,
  1009. {x229=0.5,
  1010. x259=0.5,
  1011. x261=0,
  1012. x262=0,
  1013. x263=0,
  1014. x268=0,
  1015. x269=0,
  1016. x270=0,
  1017. x271=0,
  1018. x272=0,
  1019. x273=0}}
  1020. svd_ans := svd(mat8);
  1021. svd_ans := {
  1022. [ 0.289784137735 0.957092029805]
  1023. [ ]
  1024. [ - 0.957092029805 0.289784137735]
  1025. ,
  1026. [5.1491628629 0 ]
  1027. [ ]
  1028. [ 0 2.9130948854]
  1029. ,
  1030. [ - 0.687215403194 0.726453707825 ]
  1031. [ ]
  1032. [ - 0.726453707825 - 0.687215403194]
  1033. }
  1034. tmp := tp first svd_ans * second svd_ans * third svd_ans;
  1035. [ 0.99999998509 2.9999999859 ]
  1036. tmp := [ ]
  1037. [ - 4.00000004924 2.99999995342]
  1038. tmp - mat8;
  1039. [ - 0.0000000149096013313 - 0.0000000141042812984]
  1040. [ ]
  1041. [ - 0.0000000492430638488 - 0.0000000465832745711]
  1042. mat9inv := pseudo_inverse(mat9);
  1043. [ - 0.199999999996 0.100000000013 ]
  1044. [ ]
  1045. [ - 0.0499999999988 0.0500000000037 ]
  1046. mat9inv := [ ]
  1047. [ 0.0999999999982 - 5.57816640101e-12]
  1048. [ ]
  1049. [ 0.249999999995 - 0.0500000000148 ]
  1050. mat9 * mat9inv;
  1051. [ 0.999999999982 - 0.0000000000557817125824]
  1052. [ ]
  1053. [5.5409010713e-12 1.00000000002 ]
  1054. % triang_adjoint(in_mat) calculates the
  1055. % triangularizing adjoint of in_mat
  1056. triang_adjoint(mat1);
  1057. [1 0 0 0 0]
  1058. [ ]
  1059. [-2 1 0 0 0]
  1060. [ ]
  1061. [-1 2 -1 0 0]
  1062. [ ]
  1063. [0 0 0 0 0]
  1064. [ ]
  1065. [0 0 0 0 0]
  1066. triang_adjoint(mat2);
  1067. [1 0 0 0]
  1068. [ ]
  1069. [-2 1 0 0]
  1070. [ ]
  1071. [0 0 0 0]
  1072. [ ]
  1073. [0 0 0 0]
  1074. triang_adjoint(mat5);
  1075. [1 0 0 0]
  1076. [ ]
  1077. [-1 1 0 0]
  1078. [ ]
  1079. [-3 3 0 0]
  1080. [ ]
  1081. [10 -12 -4 6]
  1082. triang_adjoint(mat6);
  1083. [ 1 0 0 ]
  1084. [ ]
  1085. [ -4 i + 1 0 ]
  1086. [ ]
  1087. [4*i - 5 3 i - 3]
  1088. triang_adjoint(mat7);
  1089. [1 0 0]
  1090. [ ]
  1091. [-1 1 0]
  1092. [ ]
  1093. [1 - 1 2]
  1094. triang_adjoint(mat8);
  1095. [1 0]
  1096. [ ]
  1097. [4 1]
  1098. triang_adjoint(mat9);
  1099. ***** Error in triang_adjoint: input matrix should be square.
  1100. % testing triang_adjoint with random matrices
  1101. % the range of the integers is in one case from
  1102. % -1000 to 1000. in the other case it is from
  1103. % -1 to 1 so that the deteminant of the i-th
  1104. % submatrix equals very often to zero.
  1105. % random matrix contains arbitrary real values
  1106. off only_integer;
  1107. tmp:=random_matrix(5,5,1000);
  1108. tmp := mat(( - 558.996086656*i + 1.71931812953,76.9987188735*i + 1.19004104683,
  1109. - 739.283479439*i - 1.32534106204,742.101952123*i + 1.35926854848,
  1110. 680.515777254*i + 1.56403177895),
  1111. ( - 689.196170962*i + 1.49289170118,
  1112. - 232.584493916*i - 1.38227180395,280.109305836*i + 1.38865247861,
  1113. 298.151479065*i - 1.19035182389, - 602.312143386*i - 1.82183796879),
  1114. ( - 739.195910955*i - 1.45944960213,859.293884826*i + 1.70488070379,
  1115. 359.856032683*i - 1.2966991869, - 105.409833087*i - 1.9360631701,
  1116. 234.350529301*i - 1.15598520849),
  1117. (155.629059348*i + 1.09264385739, - 16.1559469072*i - 1.9425176505,
  1118. 725.11578405*i - 1.05760723025,783.020942195*i - 1.28625265346,
  1119. - 544.129360355*i + 1.74790906085),
  1120. (373.562370318*i - 1.95218354686, - 722.109349973*i + 1.56309793677,
  1121. - 746.664959169*i - 1.9915755693,186.154794517*i - 1.09842189916,
  1122. 435.90998986*i - 1.46175649496))
  1123. triang_adjoint tmp;
  1124. mat((1,0,0,0,0),
  1125. (689.196170962*i - 1.49289170118, - 558.996086656*i + 1.71931812953,0,0,0),
  1126. ( - 1253.37955588*i + 7.64148089854e+5, - 1516.42713845*i - 4.23429448803e+5
  1127. ,1078.01877642*i - 1.830851973e+5,0,0),
  1128. 102791325687.0*i + 7.3752778526e+8
  1129. (------------------------------------,
  1130. i - 169.834887206
  1131. - 3.66748178757e+10*i - 6.62162769101e+6
  1132. -------------------------------------------,
  1133. i - 169.834887206
  1134. 9.85957444629e+7*i - 1.01033337718e+6,
  1135. - 7.49414742893e+8*i - 2.25311577415e+6,0),
  1136. - 547052849318.0*i + 4.06181988045e+13
  1137. (-----------------------------------------,
  1138. i - 112.974983172
  1139. - 141265342333.0*i + 4.13350560163e+12
  1140. -----------------------------------------,
  1141. i - 112.974983172
  1142. 845804392649.0*i - 9.62488227345e+13
  1143. --------------------------------------,
  1144. i - 112.974983172
  1145. 876106032577.0*i - 2.66464796763e+13
  1146. --------------------------------------,
  1147. i - 112.974983172
  1148. 1.47617976407e+12*i - 1.66771384004e+14
  1149. -----------------------------------------))
  1150. i - 169.834887206
  1151. tmp:=random_matrix(1,1,1000);
  1152. tmp := [ - 463.860434427*i + 1.35500571348]
  1153. triang_adjoint tmp;
  1154. [1]
  1155. % random matrix contains complex real values
  1156. on imaginary;
  1157. tmp:=random_matrix(5,5,1000);
  1158. tmp := mat((107.345792105*i - 1.98704739339,188.868545358*i + 1.22417796742,
  1159. - 630.485915434*i + 1.32195292724,
  1160. - 542.510039297*i - 1.94318764036,359.860945563*i - 1.69174206177),
  1161. ( - 469.501213476*i - 1.17375946319, - 62.2197820375*i - 1.4051578261
  1162. , - 98.6604380996*i + 1.64691610034,
  1163. - 216.296595937*i + 1.56809020199,797.19877393*i - 1.31894550853),
  1164. (2.07054207792*i + 1.3891068942,393.038868455*i - 1.60894498437,
  1165. - 215.390393738*i - 1.00068640594,
  1166. - 195.674928032*i + 1.22123114986,211.921323796*i - 1.42499533273),
  1167. ( - 750.357435524*i - 1.19871674827,
  1168. - 792.333836712*i - 1.63151974094, - 494.87049225*i + 1.99554801527
  1169. ,638.173945822*i + 1.23793954612,111.418959978*i - 1.96273029328),
  1170. ( - 255.359922267*i + 1.99035939892,
  1171. - 575.376389757*i - 1.03533681609,463.961589382*i - 1.86476410547,
  1172. 83.8856338571*i + 1.10369785887, - 129.597812786*i - 1.4917934624))
  1173. triang_adjoint tmp;
  1174. mat((1,0,0,0,0),
  1175. (469.501213476*i + 1.17375946319,107.345792105*i - 1.98704739339,0,0,0),
  1176. (383.407897912*i + 1.84407237435e+5,1218.59364331*i + 41798.5118562,
  1177. 769.235159465*i - 81990.7504399,0,0),
  1178. - 1.411092405e+10*i - 1.91497165215e+8
  1179. (-----------------------------------------,
  1180. i - 106.587367245
  1181. - 2.06157034475e+10*i + 1.09218575639e+8
  1182. -------------------------------------------,
  1183. i - 106.587367245
  1184. - 2.4008888901e+8*i + 13175.2571592,
  1185. - 1.02728261373e+8*i + 9.22309484944e+5,0),
  1186. - 203213290519.0*i - 3.07405185302e+12
  1187. (-----------------------------------------,
  1188. i - 184.764270765
  1189. 311149245317.0*i + 2.05618234856e+13
  1190. --------------------------------------,
  1191. i - 184.764270765
  1192. 212889617996.0*i - 4.13210409411e+13
  1193. --------------------------------------,
  1194. i - 184.764270765
  1195. - 7.79955805661e+10*i - 5.10418442965e+12
  1196. --------------------------------------------,
  1197. i - 184.764270765
  1198. 7.62835257557e+10*i - 1.40944700076e+13
  1199. -----------------------------------------))
  1200. i - 106.587367245
  1201. tmp:=random_matrix(1,1,1000);
  1202. tmp := [276.278111177*i + 1.74724262616]
  1203. triang_adjoint tmp;
  1204. [1]
  1205. off imaginary;
  1206. % random matrix contains rounded real values
  1207. on rounded;
  1208. tmp:=random_matrix(5,5,1000);
  1209. tmp := mat(( - 293.224093687, - 99.023221037, - 819.400851656,796.020234589,
  1210. 593.862087611),
  1211. ( - 137.84203019,354.3234619, - 852.314261681, - 217.485901759,
  1212. 256.139775139),
  1213. (324.37828726, - 56.5718498235, - 118.293003834,108.279501424,
  1214. 23.2385400299),
  1215. ( - 976.556156754,684.207160793,146.328625386,502.848132905,
  1216. 312.766816689),
  1217. (211.783458501,166.556239469,175.715904944,251.57997022,280.123720131
  1218. ))
  1219. triang_adjoint tmp;
  1220. mat((1,0,0,0,0),
  1221. (137.84203019, - 293.224093687,0,0,0),
  1222. ( - 1.07136859076e+5, - 48709.2122316, - 1.17545737812e+5,0,0),
  1223. (1.27980020917e+8, - 1.64635380167e+8,4.76863677307e+8,1.43208428244e+8,0),
  1224. (5.82963241185e+10,3.9383738062e+10, - 437637051137.0, - 111757830528.0,
  1225. 261327212376.0))
  1226. tmp:=random_matrix(1,1,1000);
  1227. tmp := [406.584701921]
  1228. triang_adjoint tmp;
  1229. [1]
  1230. off rounded;
  1231. % random matrix contains only integer values
  1232. on only_integer;
  1233. tmp:=random_matrix(7,7,1000);
  1234. [969 210 8 244 -887 -39 -916]
  1235. [ ]
  1236. [-774 296 -475 -694 -909 560 89 ]
  1237. [ ]
  1238. [-390 -559 -551 -567 241 -306 -655]
  1239. [ ]
  1240. tmp := [-478 809 181 -987 -144 929 -886]
  1241. [ ]
  1242. [188 267 -778 660 374 590 30 ]
  1243. [ ]
  1244. [ 73 971 -946 -43 -215 386 -365]
  1245. [ ]
  1246. [-792 -852 558 -797 343 219 110 ]
  1247. triang_adjoint tmp;
  1248. mat((1,0,0,0,0,0,0),
  1249. (774,969,0,0,0,0,0),
  1250. (548106,459771,449364,0,0,0,0),
  1251. (-108937808,399369604,-497500435,-461605941,0,0,0),
  1252. (-386678984240,-1001551613816,454549593485,637690866447,433944480084,0,0),
  1253. (-604165739229705,-320961967400919,-165015285307395,-1008712187269380,
  1254. -1670995725485274,1433408878792557,0),
  1255. (-181830640557070260,295390292387079435,816541226477288004,
  1256. 850494616785589377,458176543109779557,-1709784109660828152,
  1257. -1475366833406131953))
  1258. tmp:=random_matrix(7,7,1);
  1259. [0 0 0 0 0 0 0]
  1260. [ ]
  1261. [0 0 0 0 0 0 0]
  1262. [ ]
  1263. [0 0 0 0 0 0 0]
  1264. [ ]
  1265. tmp := [0 0 0 0 0 0 0]
  1266. [ ]
  1267. [0 0 0 0 0 0 0]
  1268. [ ]
  1269. [0 0 0 0 0 0 0]
  1270. [ ]
  1271. [0 0 0 0 0 0 0]
  1272. triang_adjoint tmp;
  1273. [1 0 0 0 0 0 0]
  1274. [ ]
  1275. [0 0 0 0 0 0 0]
  1276. [ ]
  1277. [0 0 0 0 0 0 0]
  1278. [ ]
  1279. [0 0 0 0 0 0 0]
  1280. [ ]
  1281. [0 0 0 0 0 0 0]
  1282. [ ]
  1283. [0 0 0 0 0 0 0]
  1284. [ ]
  1285. [0 0 0 0 0 0 0]
  1286. % random matrix contains only complex integer
  1287. % values
  1288. on imaginary;
  1289. tmp:=random_matrix(5,5,1000);
  1290. tmp := mat((12*(38*i + 83),3*(153*i - 305),2*(141*i + 427), - 553*i + 617,
  1291. 3*(83*i + 157)),
  1292. (164*i - 635, - 133*i + 991, - 373*i + 210,965*i - 608,2*(358*i - 55)
  1293. ),
  1294. ( - 230*i + 227,32*i + 339,2*(485*i - 219),707*i - 767, - 985*i - 51)
  1295. ,
  1296. ( - 609*i + 647, - 441*i + 187,930*i - 349,250*i - 211,274*i - 451),
  1297. ( - 374*i - 135,793*i + 592, - 81*i - 1,89*i + 26,3*( - 40*i + 201)))
  1298. triang_adjoint tmp;
  1299. mat((1,0,0,0,0),
  1300. ( - 164*i + 635,12*(38*i + 83),0,0,0),
  1301. (293397*i - 414880,9*(14243*i - 47243),3*(253651*i + 180645),0,0),
  1302. - 253324472288717*i + 71265413812547
  1303. (---------------------------------------,
  1304. 253651*i + 180645
  1305. 2*( - 220885726602145*i - 1441709355714)
  1306. ------------------------------------------, - 1436348339*i + 1393250309,
  1307. 253651*i + 180645
  1308. 511458435*i - 1454012933,0),
  1309. 13983048003979950612955437881*i - 71498490838832832842693585028
  1310. (-----------------------------------------------------------------,
  1311. 65634686423804933*i - 9174596297286164
  1312. 89295323223054915316808489269*i - 37624299403809895760446255007
  1313. -----------------------------------------------------------------,
  1314. 65634686423804933*i - 9174596297286164
  1315. 2*( - 71881165390656818494884812727*i - 25318671134083617432051412624)
  1316. ------------------------------------------------------------------------,
  1317. 65634686423804933*i - 9174596297286164
  1318. 134577377248105484011524135103*i + 3495516738012600790097438251
  1319. -----------------------------------------------------------------,
  1320. 65634686423804933*i - 9174596297286164
  1321. 6*(65634686423804933*i - 9174596297286164)
  1322. --------------------------------------------))
  1323. 253651*i + 180645
  1324. tmp:=random_matrix(5,5,2);
  1325. [i - 1 i i 0 - (i + 1)]
  1326. [ ]
  1327. [ 0 i -1 - i + 1 i + 1 ]
  1328. [ ]
  1329. tmp := [ -1 0 0 - i + 1 -1 ]
  1330. [ ]
  1331. [ -1 - i - i - i i + 1 ]
  1332. [ ]
  1333. [i - 1 0 i + 1 -1 0 ]
  1334. triang_adjoint tmp;
  1335. [ 1 0 0 0 0 ]
  1336. [ ]
  1337. [ 0 i - 1 0 0 0 ]
  1338. [ ]
  1339. [ - (i + 1) i + 1 ]
  1340. [------------ ------- - (i + 1) 0 0 ]
  1341. [ i - 1 i - 1 ]
  1342. [ ]
  1343. [ - (i + 1) 2*(2*i + 1) - 2*i ]
  1344. [------------ 0 ------------- -------- 0 ]
  1345. [ i i - 1 i - 1 ]
  1346. [ ]
  1347. [ 2*(3*i - 4) 2*(i + 2) 5*(3*i + 1) - 7*i + 1 2*(i + 2) ]
  1348. [------------- ----------- ------------- ------------ -----------]
  1349. [ 4*i + 3 i - 1 4*i + 3 4*i + 3 i - 1 ]
  1350. % Predicates.
  1351. matrixp(mat1);
  1352. t
  1353. matrixp(poly);
  1354. squarep(mat2);
  1355. t
  1356. squarep(mat3);
  1357. symmetricp(mat1);
  1358. t
  1359. symmetricp(mat3);
  1360. if not rounded_was_on then off rounded;
  1361. END;
  1362. 4: 4: 4: 4: 4: 4: 4: 4: 4:
  1363. Time for test: 1460 ms, plus GC time: 60 ms
  1364. 5: 5:
  1365. Quitting
  1366. Fri Feb 12 00:06:12 MET 1999