swift算法手记-7
2016-01-29 22:18
337 查看
@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 基本知识之十九 swift懒加载(lazy修饰符)
- Swift 基本知识之十八 swift格式化输出和反射机制
- Swift中NSData与NSDictionary之间的相互转换
- Swift 基本知识之十七 swift遍历数组的几种方式
- Swift 基本知识之十六 swift与C 混编的两种方式
- Swift 基本知识之十五 swift编码
- Swift 基本知识之十四 Sizeof 和 sizeofValue 解析
- Swift 基本知识之十三 构造函数
- 思考 Swift 中的 MirrorType 协议
- 思考 Swift 中的 MirrorType 协议
- Swift 可选链
- Swift 传值之单例传值
- Swift 之Protocol在cocoa中的使用范例搜集(一)
- swift语法知识(类结构体,构造函数,值和引用)
- swift 函数特性
- Swift 传值之通知传值
- Swift 方法的形参写法
- 给金额添加千分符,用swift语言编写.
- 7.Swift 中的Set集合
- Swift 传值之闭包传值