用弦截法求解方程的根

//弦截法求解方程的根
//要求:输入左右两个端点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;
}

  

  

原文地址:https://www.cnblogs.com/BoltLi/p/10307000.html

时间: 2024-11-09 15:13:53

用弦截法求解方程的根的相关文章

弦截法求方程根

THE SECANT METHOD In numerical analysis, the secant method is a root-finding algorithm that uses a succession of roots of secant lines to better approximate a root of a function f. The secant method can be thought of as a finite difference approximat

用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 ;带注释!

//用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 #include<stdio.h>#include<math.h> float f(float x) //定义子函数f(x) = x^3-5x^2+16x-80,当f(x) →0时,则x即为所求的实数根:  {     float y;     y=((x-5.0)*x+16.0)*x-80.0;     return(y);          //返回f(x)的值  }    float xpoint( float

C语言之基本算法24—黄金切割法求方程近似根

//黄金切割法! /* ================================================================ 题目:用黄金切割法求解3*x*x*x-2*x*x-16=0的根. ================================================================ */ #include<stdio.h> #include <math.h> #define E 1e-8 double hs(doub

(三) 弦截法(试位法)求根

1 # -*- coding: utf-8 -*- 2 #coding=utf-8 3 import numpy as np 4 from sympy import * 5 import math 6 import matplotlib.pyplot as plt 7 8 plt.close() 9 fig = plt.figure() 10 #网格可见 11 plt.grid(True) 12 plt.axis([0, 2, -10, 50]) 13 #开启交互 14 plt.ion() 15

弦截法求一元三次方程的近似解

1 #include<stdio.h> 2 #include<math.h> 3 4 //计算一元三次方程的根大致分布位置 5 6 //计算的方程为 x*x*x-8*x*x+12*x-30=0 7 8 //计算函数值 9 float f(float x) 10 { 11 return ((x-8.0)*x+12.0)*x-30.0; 12 } 13 14 //计算弦与坐标x轴的交点 15 16 float xpoint(float x1,float x2) 17 { 18 retu

C++ 二分法求解方程的解

二分法是一种求解方程近似根的方法.对于一个函数 f(x)f(x),使用二分法求 f(x)f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我们之后给出了的两个初值决定的区间 [-20,20][?20,20]),区间两端自变量 xx 的值对应的 f(x)f(x) 值是异号的,之后我们会计算出两端 xx 的中点位置 x'x′ 所对应的 f(x')f(x′) ,然后更新我们的迭代区间,确保对应的迭代区间的两端 xx 的值对应的 f(x)f(x) 值还会是异号的. 重复这个过程直到我们某一次

牛顿法求解方程

目的:求解方程{\displaystyle f(x)=0}的根

MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根

一.实验原理 二.实验步骤 三.实验过程 1.(程序) (1)二分法:求   在区间(1,2)之间的根,取 (a)bipart.m: function [x,m]=bipart(fun,a0,b0,tol) a=a0;b=b0; m=1+round(round(log((b-a)/tol))/log(2)); for k=1:m p=(a+b)/2; if fun(p)*fun(b)<0 a=p; else b=p; end x=p; end end (b)fun1.m: function f=

C语言之基本算法23—二分法求方程近似根

//二分法! /* ======================================================== 题目:用二分法求解方程3x^3-2x^2-16=0的近似解. ========================================================= */ #include <stdio.h> #include <math.h> double hs(double t) { return 3*t*t*t-2*t*t-16;/