微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift算法手记-5

//
//  ViewController.swift
//  learn5
//
//  Created by myhaspl on 16/1/23.
//  copyright (c) 2016年 myhaspl. All rights reserved.
//

import Cocoa
import Foundation

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override var representedobject: AnyObject? {
        didSet {
        // Update the view,if already loaded.
        }

    }
	private func comresult(inputnum:Double)->Double{
        //  5*x^7-3*x^5+16*x^2+7*x+90=0
        let myresult:Double = 5 * pow(inputnum,7) - 3 * pow(inputnum,5) + 16 * pow(inputnum,2) + 7 * inputnum + 90
        return myresult
	}
    @IBOutlet weak var result: NSTextField!
    
    @IBAction func compute(sender: AnyObject){
//  5*x^7-3*x^5+16*x^2+7*x+90=0
//  二分法求一元方程的解,最大求解范围[-100000,100000]
      let trycount = 80
      var accuracy: Double = 0.00000000000001
      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
		  }
	  }
	  if (leftbound==nil || rightbound==nil){
		  return 
	  }
	  //计算方程的解
		  for i in 1...trycount{
                result.stringValue=String(i)
		        let center=leftbound!+(rightbound!-leftbound!)/2
				let leftres:Double=comresult(leftbound!)
		        let rightres:Double=comresult(rightbound!)
				let centres:Double=comresult(center)
				if centres==0 {
					answer=center
					break
				}
				else if abs(rightbound!-leftbound!) < accuracy {
					answer=leftbound!
					break					
				}
				else if leftres*centres<0{
					rightbound=center
				}
				else if rightres*centres<0{
					leftbound=center
				}  
			}		  

	  if let ans=answer{
		//方程有解
		 result.stringValue="解:"+String(stringInterpolationSegment: ans)+"   "
         result.stringValue += "解代入方程的值:"+String(stringInterpolationSegment:comresult(ans))
	  }     
    }
}
 
 
 

博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐