最大剩余法的golang代码
时间: 2023-07-27 11:23:08 浏览: 132
以下是最大剩余法的golang代码实现:
```go
package main
import (
"fmt"
"math"
)
func maxDantzig(A [][]float64, b []float64) []float64 {
rows := len(A)
cols := len(A[0])
x := make([]float64, cols)
w := make([]float64, cols)
for i := 0; i < cols; i++ {
w[i] = -1
}
for {
maxW := 0.0
maxWIdx := -1
for i := 0; i < cols; i++ {
if w[i] > maxW {
maxW = w[i]
maxWIdx = i
}
}
if maxWIdx == -1 {
break
}
maxRatio := math.Inf(-1)
maxRatioIdx := -1
for i := 0; i < rows; i++ {
if A[i][maxWIdx] > 0 {
ratio := b[i] / A[i][maxWIdx]
if ratio > maxRatio {
maxRatio = ratio
maxRatioIdx = i
}
}
}
if maxRatioIdx == -1 {
return nil
}
x[maxWIdx] = b[maxRatioIdx] / A[maxRatioIdx][maxWIdx]
for i := 0; i < cols; i++ {
w[i] = 0
}
for i := 0; i < rows; i++ {
b[i] -= x[maxWIdx] * A[i][maxWIdx]
for j := 0; j < cols; j++ {
w[j] += math.Abs(b[i]) * A[i][j]
}
}
}
return x
}
func main() {
A := [][]float64{{1, -1, 0}, {-1, 2, -1}, {0, -1, 2}}
b := []float64{1, 2, 3}
x := maxDantzig(A, b)
fmt.Println(x)
}
```
这里实现了一个maxDantzig函数,参数A是一个二维的浮点数数组,表示线性规划问题中的系数矩阵,b是一个一维的浮点数数组,表示线性规划问题中的常数向量。函数返回一个一维的浮点数数组,表示线性规划问题的最优解。如果无解,则返回nil。
阅读全文