加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift算法手记-7

发布时间:2020-12-14 07:19:29 所属栏目:百科 来源:网络整理
导读:@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
@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/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读