我需要求解线性代数方程组//Caesar cipher in node
var inquirer = require("inquirer");
inquirer.prompt([
{
type: "input",
name: "message",
message: "Write the message you would like to encrypt:"
},
{
type: "input",
name: "key",
message: "Enter a number between 0 and 25"
}
]).then(function(encrypted) {
var newMessage = '';
if (encrypted.key < 0) {
console.log("cypher key is negative");
reverseEncryption();
} else {
console.log("cypher key is " + encrypted.key)
for (var i = 0; i < encrypted.message.length; i++) {
var newKey = encrypted.message[i];
//if (newKey.match(/[a-z]/i)){
var newCode = encrypted.message.charCodeAt(i);
if ((newCode >= 65) && (newCode <= 90)) {
newKey = String.fromCharCode(((newCode - 65 + encrypted.key) % 26) + 65);
} else if ((newCode >= 97) && (newCode <= 122)) {
newKey = String.fromCharCode(((newCode - 97 + encrypted.key) % 26) + 97);
}
//}
newMessage += newKey;
}
}
console.log(newMessage);
});
var reverseEncryption = function() {
var reverseMessage = "";
for (var i = 0; i < encrypted.message.length; i++) {
var reverseKey = encrypted.message[i];
//if (newKey.match(/[a-z]/i)){
var reverseCode = encrypted.message.charCodeAt(i);
if ((reverseCode >= 65) && (reverseCode <= 90)) {
reverseKey = String.fromCharCode(((reverseCode - 65 + (encrypted.key + 26)) % 26) + 65);
} else if ((reverseCode >= 97) && (reverseCode <= 122)) {
reverseKey = String.fromCharCode(((reverseCode - 97 + (encrypted.key + 26)) % 26) + 97);
}
reverseMessage += reverseKey;
}
console.log(reverseMessage);
};
矩阵A是双精度的,大小约为33000x33000,当我尝试分配它时会出错:
无法在数组大小计算上分配数组溢出。
由于我正在使用带有英特尔MKL库的LAPACK A.X = B
,我想知道是否有办法以某种方式将较小的矩阵传递给库函数? (因为只需要一半的矩阵阵列来解决)
dposv
函数只需要A. Here is more details about dposv.
更新:请注意A矩阵为N x N,但dposv
为lda: INTEGER
。那么可能有一种方法将A解析为一维数组吗?
答案 0 :(得分:1)
正如错误所说(无法分配数组 - 在数组大小计算上溢出)您的问题似乎在其他地方:尤其是用于在内部计算数组大小的整数类型的限制。即使你添加更多内存,我担心你可能无法解决这个问题。您将需要检查您用于内存管理的库的内部(可能是MKL,但我不使用MKL,所以我无法帮助)或选择另一个。
说明,有些函数在分配时使用4个字节的整数来计算内存大小。这为您提供了2^32
或4 GB内存的限制,您可以分配低于8 GB的数组。在那我假设无符号整数;带有符号整数,该限制为2 GB。
如果您的记忆力有限,则提示:
如果你没有足够的内存(因为它是三角形的,只有4 GB左右的矩阵)并且你不知道矩阵的结构,那么就忘掉特殊求解器并自己解决问题。求解具有上三角矩阵的系统是后向替换。从解决方案的最后一行开始,您只需要矩阵的一行来计算解决方案的每个组件。
找到一种从最后一行开始逐行加载矩阵的方法。
答案 1 :(得分:0)