zoukankan      html  css  js  c++  java
  • 用弦截法求解方程的根

    //弦截法求解方程的根
    //要求:输入左右两个端点x值
    //结果:在一定精度范围内求解出方程的根
    //难点:1)推导出x处的横坐标的求解公式   2)迭代掉原来的左端点或者右端点
    #include "pch.h"
    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    double f(double x);
    double xpoint(double x1, double x2);
    double root(double x1, double x2);
    int main()
    {
    	double x1, x2, f1, f2, x;
    	do 
    	{
    		cout << "input x1,x2:";
    		cin >> x1 >> x2;
    		f1 = f(x1);
    		f2 = f(x2);
    	} while (f1*f2>=0);
    	x = root(x1, x2);
    	cout << setiosflags(ios::fixed) << setprecision(7);
    	cout << "A root of equation is " << x << endl;
    	return 0;
    }
    
    double f(double x)
    {
    	double y;
    	y = x * x*x - 5 * x * x + 16 * x - 80;
    	return y;
    }
    
    double xpoint(double x1, double x2)
    {
    	double x;
    	x = (x1*f(x2) - x2 * f(x1)) / (f(x2) - f(x1));
    	return x;
    }
    double root(double x1,double x2)
    {
    	double x, y, y1;
    	y1 = f(x1);
    	do 
    	{
    		x = xpoint(x1, x2);
    		y = f(x);
    		if (y*y1 > 0)
    		{
    			y1 = y;   //细节:如果同号,需要替代掉左端点原来的y1值和x1值,
    			x1 = x;		//y1值用于与求解出来的y值相乘以判断需要保留左端点还是右端点
    		}
    		else
    			x2 = x;
    	} while (fabs(y)>=0.00001); //fabs 双精度求绝对值函数,包含于cmath库,因而需要包含cmath头文件
    	return x;
    }
    

      

      

    不忘初心,不轻言放弃,认真选择,然后勇往直前!
  • 相关阅读:
    代码 技术债务 打分
    C++ boost coroutine
    什么是 Python Django Flask &Tornado
    Quartz应用与集群原理分析
    和开源产品对比
    Apache Storm || Processing real-time data
    认清自我,不在迷茫 程序员
    快速傅里叶变换算法
    Netty和Tomcat的区别、性能对比
    HTTP vs. MQTT ->TCP
  • 原文地址:https://www.cnblogs.com/BoltLi/p/10307000.html
Copyright © 2011-2022 走看看