swift算法手记-7
Posted 麦好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift算法手记-7相关的知识,希望对你有一定的参考价值。
@IBAction func compute(sender: AnyObject) {
// 19*x^7-31*x^5+16*x^2+7*x-90=0
// newton迭代法求一元方程的解,最大求解范围[-100000,100000]
mytitle.stringValue="19*x^7-31*x^5+16*x^2+7*x-90=0"
let trycount = 120
var accuracy: Double = 1e-15
var answer: Double?=nil
// 估计解范围
var leftbound:Double?=nil
var rightbound:Double?=nil
for var bound:Double=1;bound<10000000;bound*=10{
let leftres=comresult(-bound)
let rightres=comresult(bound)
if (leftres*rightres) < 0 {
leftbound = (-bound)
rightbound = bound
break
}
else if leftres==0{
answer=leftbound
break
}
else if rightres==0{
answer=rightbound
break
}
}
if (leftbound==nil || rightbound==nil){
return
}
var center=leftbound!+(rightbound!-leftbound!)/2
let centres:Double=comresult(center)
if centres==0 {
answer=center
}
if centres*comresult(rightbound!)<0{
leftbound=center
}
else if centres*comresult(leftbound!)<0{
rightbound=center
}
if answer==nil{
//计算方程的解
var p0=leftbound!+(rightbound!-leftbound!)/2
var p:Double
for i in 1...trycount{
p = newtoncompresult(p0)
if abs(p-p0) < accuracy {
answer=p0
break
}
p0=p
}
}
if let ans=answer{
//方程有解
result.stringValue="解:"+String(stringInterpolationSegment: ans)+" "
result.stringValue += "解代入方程的值:"+String(stringInterpolationSegment:comresult(ans))
}
}
用牛顿迭代法解非线性方程
本博客所有内容是原创,如果转载请注明来源
http://blog.csdn.net/myhaspl/
以上是关于swift算法手记-7的主要内容,如果未能解决你的问题,请参考以下文章