溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++如何實現(xiàn)二分法求方程

發(fā)布時間:2021-05-10 11:06:02 來源:億速云 閱讀:245 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)C++如何實現(xiàn)二分法求方程,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

二分法是一種求解方程近似根的方法。對于一個函數(shù) f(x)f(x),使用二分法求 f(x)f(x) 近似解的時候,我們先設(shè)定一個迭代區(qū)間(在這個題目上,我們之后給出了的兩個初值決定的區(qū)間 [-20,20]),區(qū)間兩端自變量 x 的值對應(yīng)的 f(x) 值是異號的,之后我們會計算出兩端 x 的中點位置 x' 所對應(yīng)的 f(x') ,然后更新我們的迭代區(qū)間,確保對應(yīng)的迭代區(qū)間的兩端 x 的值對應(yīng)的 f(x) 值還會是異號的。

重復(fù)這個過程直到我們某一次中點值 x' 對應(yīng)的 f(x') < f(x′)<? (題目中可以直接用EPSILON)就可以將這個 x′ 作為近似解返回給 main 函數(shù)了。

例如:

C++如何實現(xiàn)二分法求方程

上面所示的一個迭代過程的第一次的迭代區(qū)間是 [a1,b1],取中點 b2,然后第二次的迭代區(qū)間是 [a1,b2],再取中點 a2,然后第三次的迭代區(qū)間是 [a2,b2],然后取 a3,然后第四次的迭代區(qū)間是[a3,b2],再取紅色中點 c,我們得到發(fā)現(xiàn) f(c) 的值已經(jīng)小于?,輸出c 作為近似解。

在這里,我們將用它實現(xiàn)對形如 px+q=0 的一元一次方程的求解。

在這里,你完成的程序?qū)⒈惠斎雰蓚€正整數(shù) p 和 q(你可以認(rèn)為測評機給出的 0<∣p∣≤1000 且0<∣q∣≤1000),程序需要用二分法求出 px+q=0 的近似解。

輸入格式

測評機會反復(fù)運行你的程序。每次程序運行時,輸入為一行,包括一組被空格分隔開的符合描述的正整數(shù) p 和 q。你可以認(rèn)為輸入數(shù)據(jù)構(gòu)成的方程 px+q=0 都是有解且解在[?20,20] 的區(qū)間內(nèi)。

輸出格式

輸出為一行,包括一個數(shù)字。為方程 px+q=0 的近似解。請使用四舍五入的方式保留小數(shù)點后 4 位小數(shù)。

樣例輸入1

55 9

樣例輸出1

-0.1636

樣例輸入2

-22 4

樣例輸出2

0.1818 

代碼:

#include <cstdio>
#include <cmath>
#define EPSILON 1e-7
 
double bisection(int p, int q, double (*func)(int, int, double));
double f(int p, int q, double x);
int main() {
    int p;
    int q;
    scanf("%d %d", &p, &q);
    printf("%.4lf\n", bisection(p, q, f));
    return 0;
}
 
double bisection(int p, int q, double (*func)(int, int, double)) {
    double x1 = -20;
 double x2 = 20;
 double x = 0;
 while(fabs((*func)(p,q,x))>EPSILON)
 {
  x = (x1+x2)/2.0;
  double fx1 = (*func)(p,q,x1);
  double fx =  (*func)(p,q,x);
  if(fx*fx1>0)
  {x1 = x;}
  else
  {x2 = x;}
  
 }
 return x;
}
 
double f(int p, int q, double x) {
    return p * x + q;
}

關(guān)于“C++如何實現(xiàn)二分法求方程”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI