Swift的矩阵行列式计算器

时间:2015-11-19 22:48:13

标签: ios swift cocoa-touch

所以我正在尝试制作一个行列式计算器并找到它的算法。为了适应迅捷,我不得不改变它。

我想找到一个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
}

1 个答案:

答案 0 :(得分:0)

在函数func determ()中,正是这一行:

var temp: [[Double]] = []

您正在创建一个空数组。然后在循环中,您将索引中的值设置为超出数组索引(实际上,数组没有任何索引)。

temp[h][k] = matrix[i][j]

您需要使用0或其他任何方式填充数组(可能是附加内容),因为您无法设置值,例如temp[2][3]temp