所以我试图做一个行列式计算器并找到它的算法。为了适应迅速,我不得不改变它一点。斯威夫特的矩阵行列式计算器
我想找到一个矩阵的行列式,它是6x7,但最后一列将不会包含在计算中。 (即计算的6x6矩阵)
即时得到这个错误:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, subcode=0x0)
谁能解释这是什么意思?
class ViewController: UIViewController {
var values = [Double]()
@IBAction func calculate(sender: AnyObject) {
for case let textField as UITextField in self.view.subviews {
if textField.text == "" {
textField.text = "0"
}
values.append(Double(textField.text!)!)
}
print(values)
// convert to 2d
var matrix = [[Double]]()
matrix = [[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]
for var i = 0 ; i<6;i++ {
for var j = 0 ; j<7 ; j++ {
matrix[i][j] = values[i*7 + j]
}
}
print(matrix)
var n = 6
determ(matrix, n: 6)
}
func determ (matrix: [[Double]], var n:Int) -> Double {
var det:Double = 0
var p:Int, i:Int, j:Int,k:Int, h:Int
var temp: [[Double]] = []
for p = 0; p < n; p++ {
h = 0
k = 0
for i = 1; i < n ; i++ {
for j = 0; j < n; j++ {
if (j == p) {
continue
}
temp[h][k] = matrix[i][j]
k++
if k == (n-1) {
h++
k = 0
}
}
}
var power = Double(p)
var neg = Double(-1)
det = Double(det + matrix[0][p]) * pow(neg, power) * Double(determ(temp, n: n-1))
}
return det
}
你从哪里得到错误?你的代码究竟有什么问题,请指定行或其他。 – sunshinejr
错误是对于行 temp [h] [k] = matrix [i] [j] 和控制台说“致命错误:数组索引超出范围” – Abrgr