代码拉取完成,页面将自动刷新
同步操作将从 黑影/goNum 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
// Norm
/*
------------------------------------------------------
作者 : Black Ghost
日期 : 2018-12-21
版本 : 0.0.0
------------------------------------------------------
求向量p范数
理论:
------------------------------------------------------
输入 :
A 向量,nx1
p 指定范数
输出 :
sol 范数值
err 解出标志:false-未解出或达到边界;
true-全部解出
------------------------------------------------------
注释 p :
1 1 modulus
2 2 modulus
p p modulus
-1 infinite modulus
------------------------------------------------------
*/
package goNum
import (
"math"
)
// Norm 求向量p范数
func Norm(A Matrix, p float64) (float64, bool) {
/*
求向量p范数
输入 :
A 向量,nx1
p 指定范数
输出 :
sol 范数值
err 解出标志:false-未解出或达到边界;
true-全部解出
*/
//A的维数
if A.Columns != 1 {
panic("Error in goNum.Norm: A is not a vector")
}
//判断p的值
if (p < (-1.0)) || ((p > (-1.0)) && (p <= 0.0)) {
panic("Error in goNum.Norm: p is wrong")
}
var sol float64
var err bool = false
switch {
case p == 1.0: //1范数
for i := 0; i < A.Rows; i++ {
sol += math.Abs(A.Data[i])
}
case p == 2.0: //2范数
for i := 0; i < A.Rows; i++ {
sol += A.Data[i] * A.Data[i]
}
sol = math.Sqrt(sol)
case p == -1.0: //无穷范数
sol, _, _ = MaxAbs(A.Data)
sol = math.Abs(sol)
default: //p范数
for i := 0; i < A.Rows; i++ {
sol += math.Pow(A.Data[i], p)
}
sol = math.Pow(sol, 1.0/p)
}
err = true
return sol, err
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。