Julia函数定义相关问题:单次求值与数组求和定义函数
问题2:根据数组
ar=[1,2,:x,-2,2*:x]定义f(x)为数组的和? 这个完全可以实现!而且有两种思路,看你要不要用专门的符号运算包:
方法1:用Symbolics.jl(推荐,扩展性强)
Julia的Symbolics.jl包专门处理符号运算,能自动帮你求和化简:
# 先安装包(第一次用的话) using Pkg Pkg.add("Symbolics") using Symbolics # 定义符号变量x @variables x # 把数组换成符号形式的数组 ar = [1, 2, x, -2, 2x] # 直接求和,会自动化简成3x+1 sum_ar = sum(ar) # 把符号表达式转换成可调用的函数 f = build_function(sum_ar, x)
现在调用f(2)就会得到3*2+1=7,完美符合你的需求。
方法2:手动解析数组(适合简单场景)
如果不想安装外部包,也可以手动遍历数组,提取常数项和x的系数:
function make_sum_func(ar) constant = 0 x_coefficient = 0 for elem in ar if elem isa Number # 常数项直接加 constant += elem elseif elem == :x # 单个:x,系数加1 x_coefficient +=1 elseif elem == 2*:x # 2*x的情况,系数加2 x_coefficient +=2 end # 可以扩展处理更多情况,比如3*x之类的 end # 返回一个计算和的函数 return x -> x_coefficient * x + constant end ar = [1,2,:x,-2,2*:x] f = make_sum_func(ar) f(4) # 返回3*4+1=13
不过这种方法只能处理你列出来的简单情况,如果数组里有更复杂的项(比如3x+5)就不行了,所以还是推荐用Symbolics.jl更靠谱。
内容的提问来源于stack exchange,提问作者tst
相关产品推荐
相关产品推荐

