IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]swift算法手记-7

    u010255642发表于 2016-01-29 22:18:09
    love 0
        @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/







沪ICP备19023445号-2号
友情链接