求解方程2*x^3-5*x^2+3*x-6=0的1个实数根

题目

在这里插入图片描述

分析

可以先确定它在哪2个整数之间,再精确小数位。

代码

#include<cstdio>
#include<iostream>

#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int main()
{
	int a,i;
	double b,k,j,x;
	i=1;
	while(2*i*i*i-5*i*i+3*i-6<0)i++;//先找出它在哪两个整数之间 
	x=i;
	j=x-1;
	while(2*j*j*j-5*j*j+3*j-6<0)
	j+=0.00001;
	x=j;
	k=x-0.00001;
	for(;;k+=0.000001)//使其精确到0.00001 
	{
		b=2*k*k*k-5*k*k+3*k-6;
		
		if(b>=-0.00001&&b<=0.00001)
		{
			cout<<k;
			return 0;//找到答案,可以直接返回 
		}
	}
	
	return 0;
	
 } 

结果

在这里插入图片描述

纠正

徐哥分析,这个代码应该是有问题的(笑哭),原题是x轴上与根的距离小于精度,我的做法是y轴上与跟的距离小于精度。所以,我还是用二分逼近法吧。

代码

#include<cstdio>
#include<iostream>

#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int main()
{
	int a,i;
	double b,k,j;
	double x1,x2;
	i=1;
	while(2*i*i*i-5*i*i+3*i-6<0)i++;//先找出它在哪两个整数之间 ,其实这个过程可以省略
	x1=i-1;
	x2=i;
	for(;;)
	{
		k=(x1+x2)/2;
		b=2*pow(k,3)-5*k*k+3*k-6;
		if(b<0)x1=k;
		else if(b>0)x2=k;
		if(fabs(x1-x2)<=0.00001)
		{
			cout<<x1;
			return 0;
		}
	}
	return 0;
	
 } 

结果

在这里插入图片描述
当然还有其它解法,可以看看他们写的
解方程 ( 迭代法/牛顿迭代/高斯消元 ) 详解及模板
算法分析与设计-迭代法求解方程(组)的根(详解)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值