# Biomatrix **Repository Path**: Eplankton/Biomatrix ## Basic Information - **Project Name**: Biomatrix - **Description**: Biomatrix is a interactive shell matrix calculation. - **Primary Language**: C - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2021-08-12 - **Last Updated**: 2022-11-08 ## Categories & Tags **Categories**: mathlibs **Tags**: Cpp ## README # Biomatrix ## 提供命令式、交互式、解释型的矩阵运算计算 ## # 如何安装 ``` 1.下载 .zip 并解压(或使用 git clone) 2.在任意 Linux 环境下进入文件夹目录 3.确保 GCC 编译环境 4.在 Linux 终端 输入 ./install.sh 一键安装 5.安装完成,自动进入交互式环境 6.卸载 ./uninstall.sh ``` ![输入图片说明](man.PNG) ## # 如何使用 ``` 1.进入 workplace 文件夹 2.建立新文本文件 格式如 a.bmx 或 a.bx 3.撰写语句并保存 4.执行 ./biox < a.bmx >a.out //输入重定向到a.bmx 输出到a.out 5.得到输出a.out 用 cat a.out 查看 ``` ## # 基本语法 ``` exit() clear() mat.in(A,2,2) mat.out(A) mat.add(A,B,C) mat.minus(A,B,C) mat.multi(A,B,C) mat.tran(A,A^T) mat.scale(A,3.14,new_A) mat.det(A) mat.inv(A,A^-1) mat.del(A) mat.approx(A,r%A) mat.rank(A) mat.eche(A,eA) vct.dot(va,vb,ans) vct.cross(va,vb,vc) vct.mag(va) vct.angle(va,vb,theta(a:b)) vct.i0(va,va0) vct.n0(va,vb,vc0) val.del(value_name) file.del(file_name) ``` ## 代码示例 ->test.bmx ``` mat.in(A,3,3): 1.2 2.3 3.4 4.5 1.32 2.2 3.12 2.65 9.5 mat.in((A|E),3,6) 1.2 2.3 3.4 1 0 0 4.5 1.32 2.2 0 1 0 3.12 2.65 9.5 0 0 1 mat.eche((A|E),(E|A^-1)) mat.in(B,3,3): 2.2 3.3 5.3 5.5 1 3 3 0.5 9 vct.in(v.a,3,1): 3.1415 2.71842 4.33 vct.in(v.b,3,1): 3.1415 2.718142 1.22 mat.add(A,B,A+B) mat.multi(A,A+B,A*(A+B)) mat.inv(A*(A+B),[A*(A+B)]^-1) mat.det(A*(A+B)) mat.det([A*(A+B)]^-1) mat.multi(A*(A+B),v.a,A*(A+B)->v.a) mat.multi([A*(A+B)]^-1,A*(A+B)->v.a,v.GOOD) vct.mag(A*(A+B)->v.a) val.del(Mag(A*(A+B)->v.a)) vct.mag(v.b) val.del(Mag(v.b)) vct.angle(A*(A+B)->v.a,v.b,theta(T->v.a|v.b)) vct.n0(A*(A+B)->v.a,v.b,v.n0Cross_(v.a|v.b)) vct.cross(A*(A+B)->v.a,v.b,v.Cross_(v.a|v.b)) vct.minus(v.GOOD,v.a,v.delta(v.GOOD-v.a)) vct.approx(v.delta(v.GOOD-v.a),r%v.delta(v.GOOD-v.a)) file.del(matrix) file.del(matrixstream) file.del(value) mat.in(A,5,5): 1 2 2 1 2 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 3 0 8 2 4 mat.inv(A,A^-1) mat.in(B,5,5): 1.37 2.7 2 1 2 5 6.7 7.7 8.7 3 9.7 3.7 0 5 3 7 2 1.7 4 6.7 3.7 0.7 8 2 4.7 mat.tran(B,B^T) mat.multi(A^-1,B^T,C) mat.multi(A^-1,A,I[5]) mat.approx(I[5],r%I[5]) mat.det(A) mat.det(A^-1) mat.det(B) mat.det(B^T) mat.det(I[5]) mat.det(r%I[5]) file.del(value) file.del(matrix) file.del(matrixstream) quit() ``` 执行结果 ``` Biomatrix 1.0.8 Mon Jan 03 19:48:03 2022 Type 'help()' for Manual. >> mat.in(A,3,3): [Matrix]: A < 3, 3 > 1.2 2.3 3.4 4.5 1.32 2.2 3.12 2.65 9.5 [Matrix]: A < 3, 3 > has been saved. [ 1.2 2.3 3.4 ] [ 4.5 1.32 2.2 ] [ 3.12 2.65 9.5 ] >> mat.in((A|E),3,6) [Matrix]: (A|E) < 3, 6 > 1.2 2.3 3.4 1 0 0 4.5 1.32 2.2 0 1 0 3.12 2.65 9.5 0 0 1 [Matrix]: (A|E) < 3, 6 > has been saved. [ 1.2 2.3 3.4 1 0 0 ] [ 4.5 1.32 2.2 0 1 0 ] [ 3.12 2.65 9.5 0 0 1 ] >> mat.eche((A|E),(E|A^-1)) [Matrix]: (A|E) < 3, 6 > [ 1.2 2.3 3.4 1 0 0 ] [ 4.5 1.32 2.2 0 1 0 ] [ 3.12 2.65 9.5 0 0 1 ] [Matrix]: (E|A^-1) < 3, 6 > has been saved. [ 1 0 0 -0.139957 0.267816 -0.0119307 ] [ 0 1 0 0.748508 -0.0165195 -0.264062 ] [ 0 0 1 -0.16283 -0.0833484 0.182841 ] >> mat.in(B,3,3): [Matrix]: B < 3, 3 > 2.2 3.3 5.3 5.5 1 3 3 0.5 9 [Matrix]: B < 3, 3 > has been saved. [ 2.2 3.3 5.3 ] [ 5.5 1 3 ] [ 3 0.5 9 ] >> vct.in(v.a,3,1): 3.1415 2.71842 4.33 [Matrix]: v.a < 3, 1 > [Matrix]: v.a < 3, 1 > has been saved. [ 3.1415 ] [ 2.71842 ] [ 4.33 ] >> vct.in(v.b,3,1): 3.1415 2.718142 1.22 [Matrix]: v.b < 3, 1 > [Matrix]: v.b < 3, 1 > has been saved. [ 3.1415 ] [ 2.71814 ] [ 1.22 ] >> mat.add(A,B,A+B) [Matrix]: A < 3, 3 > [ 1.2 2.3 3.4 ] [ 4.5 1.32 2.2 ] [ 3.12 2.65 9.5 ] [Matrix]: B < 3, 3 > [ 2.2 3.3 5.3 ] [ 5.5 1 3 ] [ 3 0.5 9 ] [Matrix]: A+B < 3, 3 > has been saved. [ 3.4 5.6 8.7 ] [ 10 2.32 5.2 ] [ 6.12 3.15 18.5 ] >> mat.multi(A,A+B,A*(A+B)) [Matrix]: A < 3, 3 > [ 1.2 2.3 3.4 ] [ 4.5 1.32 2.2 ] [ 3.12 2.65 9.5 ] [Matrix]: A+B < 3, 3 > [ 3.4 5.6 8.7 ] [ 10 2.32 5.2 ] [ 6.12 3.15 18.5 ] [Matrix]: A*(A+B) < 3, 3 > has been saved. [ 47.888 22.766 85.3 ] [ 41.964 35.1924 86.714 ] [ 95.248 53.545 216.674 ] >> mat.inv(A*(A+B),[A*(A+B)]^-1) [Matrix]: A*(A+B) < 3, 3 > [ 47.888 22.766 85.3 ] [ 41.964 35.1924 86.714 ] [ 95.248 53.545 216.674 ] [Matrix]: [A*(A+B)]^-1 < 3, 3 > has been saved. [ 0.10081 -0.0123524 -0.0347431 ] [ -0.0281646 0.0761074 -0.0193707 ] [ -0.0373549 -0.0133778 0.0246749 ] >> mat.det(A*(A+B)) [Matrix]: A*(A+B) < 3, 3 > [ 47.888 22.766 85.3 ] [ 41.964 35.1924 86.714 ] [ 95.248 53.545 216.674 ] Det(A*(A+B)) = 29582.3 [Value]: Det(A*(A+B)) has been saved. [ 29582.3 ] [System.Out]: Det(A*(A+B)) is an value. >> mat.det([A*(A+B)]^-1) [Matrix]: [A*(A+B)]^-1 < 3, 3 > [ 0.10081 -0.0123524 -0.0347431 ] [ -0.0281646 0.0761074 -0.0193707 ] [ -0.0373549 -0.0133778 0.0246749 ] Det([A*(A+B)]^-1) = 3.38047e-005 [Value]: Det([A*(A+B)]^-1) has been saved. [ 3.38047e-005 ] [System.Out]: Det([A*(A+B)]^-1) is an value. >> mat.multi(A*(A+B),v.a,A*(A+B)->v.a) [Matrix]: A*(A+B) < 3, 3 > [ 47.888 22.766 85.3 ] [ 41.964 35.1924 86.714 ] [ 95.248 53.545 216.674 ] [Matrix]: v.a < 3, 1 > [ 3.1415 ] [ 2.71842 ] [ 4.33 ] [Matrix]: A*(A+B)->v.a < 3, 1 > has been saved. [ 581.677 ] [ 602.969 ] [ 1382.98 ] >> mat.multi([A*(A+B)]^-1,A*(A+B)->v.a,v.GOOD) [Matrix]: [A*(A+B)]^-1 < 3, 3 > [ 0.10081 -0.0123524 -0.0347431 ] [ -0.0281646 0.0761074 -0.0193707 ] [ -0.0373549 -0.0133778 0.0246749 ] [Matrix]: A*(A+B)->v.a < 3, 1 > [ 581.677 ] [ 602.969 ] [ 1382.98 ] [Matrix]: v.GOOD < 3, 1 > has been saved. [ 3.14173 ] [ 2.71841 ] [ 4.33001 ] >> vct.mag(A*(A+B)->v.a) val.del(Mag(A*(A+B)->v.a)) [Vector]: A*(A+B)->v.a < 3, 1 > [ 581.677 ] [ 602.969 ] [ 1382.98 ] [Value]: Mag(A*(A+B)->v.a) has been saved. [ 1616.96 ] [System.Out]: Mag(A*(A+B)->v.a) is an value. >> [Value]: Mag(A*(A+B)->v.a) has been deleted. >> vct.mag(v.b) val.del(Mag(v.b)) [Vector]: v.b < 3, 1 > [ 3.1415 ] [ 2.71814 ] [ 1.22 ] [Value]: Mag(v.b) has been saved. [ 4.32963 ] [System.Out]: Mag(v.b) is an value. >> [Value]: Mag(v.b) has been deleted. >> vct.angle(A*(A+B)->v.a,v.b,theta(T->v.a|v.b)) [Vector]: A*(A+B)->v.a < 3, 1 > [ 581.677 ] [ 602.969 ] [ 1382.98 ] [Vector]: v.b < 3, 1 > [ 3.1415 ] [ 2.71814 ] [ 1.22 ] [Value]: TEMP_VAL has been saved. [ 5153.53 ] [System.Out]: TEMP_VAL is an value. [Vector]: A*(A+B)->v.a < 3, 1 > [ 581.677 ] [ 602.969 ] [ 1382.98 ] [Value]: Mag(A*(A+B)->v.a) has been saved. [ 1616.96 ] [System.Out]: Mag(A*(A+B)->v.a) is an value. [Vector]: v.b < 3, 1 > [ 3.1415 ] [ 2.71814 ] [ 1.22 ] [Value]: Mag(v.b) has been saved. [ 4.32963 ] [System.Out]: Mag(v.b) is an value. [Value]: theta(T->v.a|v.b) has been saved. [ 0.743461 ] [System.Out]: theta(T->v.a|v.b) is an value. [Value]: Mag(A*(A+B)->v.a) has been deleted. [Value]: Mag(v.b) has been deleted. [Value]: TEMP_VAL has been deleted. >> vct.n0(A*(A+B)->v.a,v.b,v.n0Cross_(v.a|v.b)) [Vector]: A*(A+B)->v.a < 3, 1 > [ 581.677 ] [ 602.969 ] [ 1382.98 ] [Vector]: v.b < 3, 1 > [ 3.1415 ] [ 2.71814 ] [ 1.22 ] [Vector]: TEMP_VCT < 3, 1 > has been saved. [ -3023.51 ] [ 3634.99 ] [ -313.148 ] [Vector]: TEMP_VCT < 3, 1 > [ -3023.51 ] [ 3634.99 ] [ -313.148 ] [Value]: Mag(TEMP_VCT) has been saved. [ 4738.44 ] [System.Out]: Mag(TEMP_VCT) is an value. [Matrix]: TEMP_VCT < 3, 1 > [ -3023.51 ] [ 3634.99 ] [ -313.148 ] [Matrix]: v.n0Cross_(v.a|v.b) < 3, 1 > has been saved. [ -0.638082 ] [ 0.767128 ] [ -0.0660868 ] [Value]: Mag(TEMP_VCT) has been deleted. [Matrix]: TEMP_VCT has been deleted. >> vct.cross(A*(A+B)->v.a,v.b,v.Cross_(v.a|v.b)) [Vector]: A*(A+B)->v.a < 3, 1 > [ 581.677 ] [ 602.969 ] [ 1382.98 ] [Vector]: v.b < 3, 1 > [ 3.1415 ] [ 2.71814 ] [ 1.22 ] [Vector]: v.Cross_(v.a|v.b) < 3, 1 > has been saved. [ -3023.51 ] [ 3634.99 ] [ -313.148 ] >> vct.minus(v.GOOD,v.a,v.delta(v.GOOD-v.a)) [Matrix]: v.GOOD < 3, 1 > [ 3.14173 ] [ 2.71841 ] [ 4.33001 ] [Matrix]: v.a < 3, 1 > [ 3.1415 ] [ 2.71842 ] [ 4.33 ] [Matrix]: v.delta(v.GOOD-v.a) < 3, 1 > has been saved. [ 0.00023 ] [ -1e-005 ] [ 1e-005 ] >> vct.approx(v.delta(v.GOOD-v.a),r%v.delta(v.GOOD-v.a)) [Matrix]: v.delta(v.GOOD-v.a) < 3, 1 > [ 0.00023 ] [ -1e-005 ] [ 1e-005 ] [Matrix]: r%v.delta(v.GOOD-v.a) < 3, 1 > has been saved. [ 0.00023 ] [ 0 ] [ 0 ] >> file.del(matrix) file.del(matrixstream) file.del(value) [FILE]: matrix has been deleted. >> [FILE]: matrixstream has been deleted. >> [FILE]: value has been deleted. >> mat.in(A,5,5): [Matrix]: A < 5, 5 > 1 2 2 1 2 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 3 0 8 2 4 [Matrix]: A < 5, 5 > has been saved. [ 1 2 2 1 2 ] [ 5 6 7 8 3 ] [ 9 3 0 5 3 ] [ 7 2 1 4 6 ] [ 3 0 8 2 4 ] >> mat.inv(A,A^-1) [Matrix]: A < 5, 5 > [ 1 2 2 1 2 ] [ 5 6 7 8 3 ] [ 9 3 0 5 3 ] [ 7 2 1 4 6 ] [ 3 0 8 2 4 ] [Matrix]: A^-1 < 5, 5 > has been saved. [ 0.131234 -0.119685 0.275066 -0.184777 0.0950131 ] [ 0.616798 -0.0425197 0.132808 -0.188451 -0.0934383 ] [ 0.0839895 -0.0125984 0.064042 -0.142257 0.132808 ] [ -0.637795 0.245669 -0.248819 0.274016 -0.0897638 ] [ 0.0524934 -0.00787402 -0.209974 0.286089 -0.0419948 ] >> mat.in(B,5,5): [Matrix]: B < 5, 5 > 1.37 2.7 2 1 2 5 6.7 7.7 8.7 3 9.7 3.7 0 5 3 7 2 1.7 4 6.7 3.7 0.7 8 2 4.7 [Matrix]: B < 5, 5 > has been saved. [ 1.37 2.7 2 1 2 ] [ 5 6.7 7.7 8.7 3 ] [ 9.7 3.7 0 5 3 ] [ 7 2 1.7 4 6.7 ] [ 3.7 0.7 8 2 4.7 ] >> mat.tran(B,B^T) [Matrix]: B < 5, 5 > [ 1.37 2.7 2 1 2 ] [ 5 6.7 7.7 8.7 3 ] [ 9.7 3.7 0 5 3 ] [ 7 2 1.7 4 6.7 ] [ 3.7 0.7 8 2 4.7 ] [Matrix]: B^T < 5, 5 > has been saved. [ 1.37 5 9.7 7 3.7 ] [ 2.7 6.7 3.7 2 0.7 ] [ 2 7.7 0 1.7 8 ] [ 1 8.7 5 4 2 ] [ 2 3 3 6.7 4.7 ] >> mat.multi(A^-1,B^T,C) [Matrix]: A^-1 < 5, 5 > [ 0.131234 -0.119685 0.275066 -0.184777 0.0950131 ] [ 0.616798 -0.0425197 0.132808 -0.188451 -0.0934383 ] [ 0.0839895 -0.0125984 0.064042 -0.142257 0.132808 ] [ -0.637795 0.245669 -0.248819 0.274016 -0.0897638 ] [ 0.0524934 -0.00787402 -0.209974 0.286089 -0.0419948 ] [Matrix]: B^T < 5, 5 > [ 1.37 5 9.7 7 3.7 ] [ 2.7 6.7 3.7 2 0.7 ] [ 2 7.7 0 1.7 8 ] [ 1 8.7 5 4 2 ] [ 2 3 3 6.7 4.7 ] [Matrix]: C < 5, 5 > has been saved. [ 0.412022 0.649768 0.19129 1.04436 2.67932 ] [ 0.620498 1.90189 4.60305 3.07848 2.49879 ] [ 0.332493 -0.0105503 0.455223 0.992387 1.15396 ] [ -0.613622 -1.34425 -4.17685 -3.90157 -4.05228 ] [ -0.167192 0.955901 1.78451 0.857741 -1.11628 ] >> mat.multi(A^-1,A,I[5]) [Matrix]: A^-1 < 5, 5 > [ 0.131234 -0.119685 0.275066 -0.184777 0.0950131 ] [ 0.616798 -0.0425197 0.132808 -0.188451 -0.0934383 ] [ 0.0839895 -0.0125984 0.064042 -0.142257 0.132808 ] [ -0.637795 0.245669 -0.248819 0.274016 -0.0897638 ] [ 0.0524934 -0.00787402 -0.209974 0.286089 -0.0419948 ] [Matrix]: A < 5, 5 > [ 1 2 2 1 2 ] [ 5 6 7 8 3 ] [ 9 3 0 5 3 ] [ 7 2 1 4 6 ] [ 3 0 8 2 4 ] [Matrix]: I[5] < 5, 5 > has been saved. [ 1 2e-006 8e-007 2.2e-006 1.4e-006 ] [ -4e-007 1 7e-007 -2e-007 1.7e-006 ] [ 5e-007 6e-007 0.999997 3e-007 -2e-007 ] [ -4e-007 -1e-006 -1.4e-006 0.999998 8e-007 ] [ -4.1e-006 -1.32e-006 -7.4e-007 -2.36e-006 0.999998 ] >> mat.approx(I[5],r%I[5]) [Matrix]: I[5] < 5, 5 > [ 1 2e-006 8e-007 2.2e-006 1.4e-006 ] [ -4e-007 1 7e-007 -2e-007 1.7e-006 ] [ 5e-007 6e-007 0.999997 3e-007 -2e-007 ] [ -4e-007 -1e-006 -1.4e-006 0.999998 8e-007 ] [ -4.1e-006 -1.32e-006 -7.4e-007 -2.36e-006 0.999998 ] [Matrix]: r%I[5] < 5, 5 > has been saved. [ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ] >> mat.det(A) mat.det(A^-1) [Matrix]: A < 5, 5 > [ 1 2 2 1 2 ] [ 5 6 7 8 3 ] [ 9 3 0 5 3 ] [ 7 2 1 4 6 ] [ 3 0 8 2 4 ] Det(A) = 1905 [Value]: Det(A) has been saved. [ 1905 ] [System.Out]: Det(A) is an value. >> [Matrix]: A^-1 < 5, 5 > [ 0.131234 -0.119685 0.275066 -0.184777 0.0950131 ] [ 0.616798 -0.0425197 0.132808 -0.188451 -0.0934383 ] [ 0.0839895 -0.0125984 0.064042 -0.142257 0.132808 ] [ -0.637795 0.245669 -0.248819 0.274016 -0.0897638 ] [ 0.0524934 -0.00787402 -0.209974 0.286089 -0.0419948 ] Det(A^-1) = 0.000524932 [Value]: Det(A^-1) has been saved. [ 0.000524932 ] [System.Out]: Det(A^-1) is an value. >> mat.det(B) mat.det(B^T) [Matrix]: B < 5, 5 > [ 1.37 2.7 2 1 2 ] [ 5 6.7 7.7 8.7 3 ] [ 9.7 3.7 0 5 3 ] [ 7 2 1.7 4 6.7 ] [ 3.7 0.7 8 2 4.7 ] Det(B) = 4163.94 [Value]: Det(B) has been saved. [ 4163.94 ] [System.Out]: Det(B) is an value. >> [Matrix]: B^T < 5, 5 > [ 1.37 5 9.7 7 3.7 ] [ 2.7 6.7 3.7 2 0.7 ] [ 2 7.7 0 1.7 8 ] [ 1 8.7 5 4 2 ] [ 2 3 3 6.7 4.7 ] Det(B^T) = 4163.94 [Value]: Det(B^T) has been saved. [ 4163.94 ] [System.Out]: Det(B^T) is an value. >> mat.det(I[5]) [Matrix]: I[5] < 5, 5 > [ 1 2e-006 8e-007 2.2e-006 1.4e-006 ] [ -4e-007 1 7e-007 -2e-007 1.7e-006 ] [ 5e-007 6e-007 0.999997 3e-007 -2e-007 ] [ -4e-007 -1e-006 -1.4e-006 0.999998 8e-007 ] [ -4.1e-006 -1.32e-006 -7.4e-007 -2.36e-006 0.999998 ] Det(I[5]) = 0.999993 [Value]: Det(I[5]) has been saved. [ 0.999993 ] [System.Out]: Det(I[5]) is an value. >> mat.det(r%I[5]) [Matrix]: r%I[5] < 5, 5 > [ 1 0 0 0 0 ] [ 0 1 0 0 0 ] [ 0 0 1 0 0 ] [ 0 0 0 1 0 ] [ 0 0 0 0 1 ] Det(r%I[5]) = 1 [Value]: Det(r%I[5]) has been saved. [ 1 ] [System.Out]: Det(r%I[5]) is an value. >> file.del(value) file.del(matrix) file.del(matrixstream) >> [FILE]: value has been deleted. >> [FILE]: matrix has been deleted. >> [FILE]: matrixstream has been deleted. >> quit() [EXIT]: 0 ```