2 * X ^ 3-5 * X ^ 2 + 3 * X-6 = 1 0根実数の方程式を解きます

タイトル

ここに画像を挿入説明

分析

まず、それが決定され得るとの間に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;
	
 } 

結果

ここに画像を挿入説明
もちろん、他の解決策があり、我々は、彼らが書いた見ることができる
詳細な方程式(反復法/ニュートン反復/ガウスの消去法)を解くとテンプレート
方程式の根を解決するために(グループ)反復法(詳細) -アルゴリズムの分析と設計

リリース8元の記事 ウォンの賞賛1 ビュー248

おすすめ

転載: blog.csdn.net/xililixilu/article/details/104167594
おすすめ