swift算法手记-5

前端之家收集整理的这篇文章主要介绍了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/


猜你在找的Swift相关文章