Julia新手运行代码bx赋值行触发MethodError错误,求解决方案
错误排查与修复方案
1. 直接报错的核心问题
运行最后一行报错的直接原因是x变量的定义多了多余的方括号,导致类型不匹配:
你写的代码为:
x=[minimum(collect(A)):dx:maximum(collect(A))];
外层的[]把原本的StepRangeLen区间对象包裹成了仅包含1个区间对象的一维数组,后续执行x - dx/2时相当于对整个数组做减法,没有对应实现方法,就抛出了你看到的MethodError。
修复这部分的代码如下:
# minimum/maximum可直接作用于二维矩阵,不需要额外collect,也不需要加外层方括号 x = minimum(A):dx:maximum(A) # bx是直方图的区间边界,需要把所有左边界和最后一个右边界拼接成完整的区间数组 bx = vcat(collect(x) .- dx/2, x[end] + dx/2)
2. 其余代码兼容Julia 1.x版本的修改点
你提供的完整主函数是Julia 0.6及更早版本的语法,在当前1.x主流版本中会有大量报错,需要逐一修改:
- 引入包的关键字是小写的
using,而非Using,Julia语法区分大小写 - 原代码中的
hist函数已经从Base标准库移除,需要先安装导入StatsBase包,修改为:using StatsBase hist_res = fit(Histogram, A[:], bx) hA = hist_res.weights - 字符串数组定义语法更新:原代码
Sx=Array(ASCIIString,1,nparams)改为Sx = Array{String}(undef, 1, nparams) linspace函数已废弃,原代码:
改为:x[1:nx[j],j]=linspace(Rx[1,j],Rx[2,j],nx[j])'x[1:nx[j],j] = range(Rx[1,j], Rx[2,j], length=nx[j])'- 画图相关代码需要先导入PyPlot包,开头添加
using PyPlot,原代码中的"是HTML转义字符,全部替换为正常双引号" - 逻辑与运算推荐使用短路运算的
&&而非逐元素运算的&,allowed2&allowed3改为allowed2 && allowed3
内容的提问来源于stack exchange,提问作者Andrés CM
相关产品推荐
相关产品推荐

