我正在快速处理一些微积分函数。我对他们所有人的主要障碍是采用某种用户输入系统并能够在函数中使用它。例如,如果我可以将用户输入的内容转换为可接受的快速数学表达式,那么我就可以使用非常简单的函数来完成我需要的所有基于微积分的事情,例如:
导数:
func derivativeOf(fn: (Double)->Double, atX x: Double) -> Double {
let h = 0.0000001
return (fn(x + h) - fn(x))/h
}
限制
func limit(fn: (Double)->Double, atX x: Double) -> Double {
let modifier = 0.0000001
return (fn(x + modifier))
}
等..
我可以采取什么用户输入策略来快速明确我的微积分函数需要的 Double to Double 函数?我如何翻译三角函数、常量、指数等。好吗?
最佳答案
看起来很棒!在 Playground 上,说:
func derivativeOf(fn: (Double)->Double, atX x: Double) -> Double {
let h = 0.0000001
return (fn(x + h) - fn(x))/h
}
derivativeOf({ (x) -> Double in
return x * x
}, atX: 5)
给出 10.000001 一些东西(这是一个近似值),这确实是正确答案!看起来很棒,但为了利用 Swift 的尾随闭包,我会交换两个参数,因此 fn
参数位于末尾。
这样,它会更像这样:
func derivativeOf(atX x: Double, fn: (Double)->Double) -> Double {
let h = 0.0000001
return (fn(x + h) - fn(x))/h
}
derivativeOf(atX: 5) { x in
return x*x
}
以这种方式阅读函数调用更加直观。
我对如何让用户输入函数的想法是通过一个顶部带有标签的文本字段,上面写着“给定 x,方程是:”
然后用户会写“x * x”。但是,因为 Swift 是一种编译语言,我们不能只将字符串转换为可编译代码。
但是,我在想别的事情。您可以让用户编写“5 * 5”,并通过从字符串“5”强制向下转换为 Int 类型来计算导数,而不是让用户编写“x * x”。只是一个想法。
这也是一个看似合理的解决方案。我正在研究 Objective C 实现,这是一种方法:
关于ios - 用户输入的 f(x) 可在 swift 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31040099/