编写接收Pi、P*返回α的函数时sum函数使用问题求助
sum函数使用修正方案与函数实现
你当前的sum函数使用存在三处逻辑错误:
- 求和遍历规则不符合绝大多数编程语言/工具的
sum函数设计,无需手动指定i == 1, i == length(pstar)这类遍历条件,sum会自动累加传入的可迭代序列所有元素 - 计算顺序错误:你现有逻辑是先求和
x[i]再乘以(p-pstar)^2,而目标公式要求的是先计算每一组P_i与P*差值的平方,再对所有平方结果求和 - 括号匹配存在语法错误,多了多余的右括号
目标计算公式为:α = ( sqrt( (1/n) * Σ (P_i - P*)² ) / P* ) * 100
其中n为Pi序列的长度,要求和P*(pstar)的长度一致。
R语言实现
calculate_alpha <- function(Pi, pstar) { # 入参长度校验 if (length(Pi) != length(pstar)) { stop("Pi和pstar的长度必须一致") } n <- length(Pi) # 先计算所有差值的平方,直接传入sum求和 sum_squared <- sum((Pi - pstar)^2) alpha <- (sqrt(sum_squared / n) / pstar) * 100 return(alpha) }
Python实现
import math def calculate_alpha(Pi: list, pstar: list): if len(Pi) != len(pstar): raise ValueError("Pi和pstar的长度必须一致") n = len(Pi) # 生成所有差值平方的迭代器,传入sum求和 sum_squared = sum((pi - ps) ** 2 for pi, ps in zip(Pi, pstar)) alpha = (math.sqrt(sum_squared / n) / pstar) * 100 return alpha
内容的提问来源于stack exchange,提问作者vojta9
相关产品推荐
相关产品推荐

