所以我正在尝试制作一个行列式计算器并找到它的算法。为了适应迅捷,我不得不改变它。
我想找到一个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
}
答案 0 :(得分:0)
在函数func determ()
中,正是这一行:
var temp: [[Double]] = []
您正在创建一个空数组。然后在循环中,您将索引中的值设置为超出数组索引(实际上,数组没有任何索引)。
temp[h][k] = matrix[i][j]
您需要使用0或其他任何方式填充数组(可能是附加内容),因为您无法设置值,例如temp[2][3]
空temp
。