Cramer‘s Rule
2023-12-31 15:36:13
cramer.js
function Cramer2(vec2x2A, vec2B) {
this.A = vec2x2A;
this.B = vec2B;
}
Cramer2.det2 = function(v) {
return v[0][0] * v[1][1] - v[0][1] * v[1][0];
};
Cramer2.xCol = function(vec2x2A, B, col) {
var nVec = [];
var i, j;
for (i = 0; i < 2; i++) {
nVec[i] = [];
for (j = 0; j < 2; j++) {
if (j == col) {
nVec[i].push(B[i]);
} else {
nVec[i].push(vec2x2A[i][j]);
}
}
}
return nVec;
}
Cramer2.prototype.getX = function() {
var D, Dx, Dy;
D = Cramer2.det2(this.A);
Dx = Cramer2.det2( Cramer2.xCol(this.A, this.B, 0) );
Dy = Cramer2.det2( Cramer2.xCol(this.A, this.B, 1) );
return [Dx/D, Dy/D];
}
function Cramer3(vec3x3A, vec3B) {
this.A = vec3x3A;
this.B = vec3B;
}
Cramer3.det3 = function(v) {
return v[0][0] * (v[1][1]*v[2][2] - v[2][1]*v[1][2]) -
v[0][1] * (v[1][0]*v[2][2] - v[2][0]*v[1][2]) +
v[0][2] * (v[1][0]*v[2][1] - v[2][0]*v[1][1]);
};
Cramer3.xCol = function(v3x3, B, col) {
var nVec = [];
var i, j;
for (i = 0; i < 3; i++) {
nVec[i] = [];
for (j = 0; j < 3; j++) {
if (j == col) {
nVec[i].push(B[i]);
} else {
nVec[i].push(v3x3[i][j]);
}
}
}
return nVec;
}
Cramer3.prototype.getX = function() {
var D, Dx, Dy, Dz;
D = Cramer3.det3(this.A);
Dx = Cramer3.det3( Cramer3.xCol(this.A, this.B, 0) );
Dy = Cramer3.det3( Cramer3.xCol(this.A, this.B, 1) );
Dz = Cramer3.det3( Cramer3.xCol(this.A, this.B, 2) );
return [Dx/D, Dy/D, Dz/D];
}
module.exports = {
Cramer2: Cramer2,
Cramer3: Cramer3
};
* index.js
var cramer = require("./cramer");
/* 2x-y=1 and x-3y=8 */
var A = [[2,-1],[1,-3]], B = [1, 8];
var cramer2 = new cramer.Cramer2(A, B);
console.log(cramer2.getX());
/* x+y+z=2, 2x + y + 3z = 9, and x - 3y + z = 10 */
A = [ [1,1,1], [2,1,3], [1,-3,1] ];
B = [2, 9, 10];
var cramer3 = new cramer.Cramer3(A, B);
console.log(cramer3.getX()); /* [1,-2,3] */
文章来源:https://blog.csdn.net/fareast_mzh/article/details/135315846
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!