direction Link to heading

  • IQAir wants to estimate of the amount of air pollutants resulting from the combustion reaction at a coal-based PLTU around Jakarta which is one of the causes of air quality in Jakarta getting worse.
  • If the combustion reaction equation is known to be nonlinear with the function is $$\tag{1} f(x) = x^3 - 3x - 7, $$ help find the approximate value of the pollutant $(x)$ from the equation using the regula falsi OR bisection method as well as the desired number of iterations and pollutant limit values $[a,b]$.
  • Note: There is mission information, e.g.
    • What is the meaning of combustion reaction equation, when $f(x) = 0$?
    • Why if $f(x) = 0$, the solution $x$ is the approximate value of the pollutant?
  • Output
Method:
1. Bisection
2. Regula Falsi
Select Method: 1
Input pollutan lower limit value (mg/L): 1
Input pollutan upper limit value (mg/L): 8
Input the number of interations: 3

  Iteration no    Estimation Value of Pollutan Concentration (mg/L)    Error
  ------------    -------------------------------------------------    -----
       1                             4.5                                3.5
       2                             2.75                               1.75
       3                             1.875                              0.875

code Link to heading

  • Code
    def combustion(x):
      y = x**3 - 3*x - 7
      return y
    
    print("Method:")
    print("1. Bisection")
    print("2. Regula Falsi")
    print("Select Method: ", end='')
    method = input()
    print(method)
    
    print("Input pollutan lower", end=' ')
    print("limit value (mg/L): ", end='')
    a = float(input())
    print(a)
    
    print("Input pollutan upper", end=' ')
    print("limit value (mg/L): ", end='')
    b = float(input())
    print(b)
    
    print("Input number of iteration: ", end='')
    N = int(input())
    print(N)
    
    print()
    print("i\tx\terr")
    
    for i in range(1, N+1):
      fa = combustion(a)
      fb = combustion(b)
    
      if fa == fb:
        break;
    
      if method == '1':
        # apply bisection method
        c = (a + b) / 2
    
        # update a and b
        fc = combustion(c)
        if fa * fc < 0:
          b = c
        elif fc * fb < 0:
          a = c
        else:
          pass
    
      elif method == '2':
        # apply bisection regular falsi method
        c = (b * fa - a * fb) / (fa - fb)
    
        # update a and b
        a = b
        b = c
      else:
        # apply other methods
        pass
    
      # calculate error
      err = abs(a - b)
    
      # display results
      print(i, end='\t')
      print(c, end='\t')
      print(err)
    
    print()
    cs = f'{c:.20f}'
    print("x =", cs)
    print("error =", err)
    print("interation =", i)
    
  • Method 1 (Bisection)
    Method:
    1. Bisection
    2. Regula Falsi
    Select Method: 1
    Input pollutan lower limit value (mg/L): 1.0
    Input pollutan upper limit value (mg/L): 8.0
    Input number of iteration: 100
    
    i	x	err
    1	4.5	3.5
    2	2.75	1.75
    3	1.875	0.875
    4	2.3125	0.4375
    5	2.53125	0.21875
    6	2.421875	0.109375
    7	2.4765625	0.0546875
    8	2.44921875	0.02734375
    9	2.435546875	0.013671875
    10	2.4287109375	0.0068359375
    11	2.42529296875	0.00341796875
    12	2.427001953125	0.001708984375
    13	2.4261474609375	0.0008544921875
    14	2.42572021484375	0.00042724609375
    15	2.425933837890625	0.000213623046875
    16	2.4260406494140625	0.0001068115234375
    17	2.4259872436523438	5.340576171875e-05
    18	2.426013946533203	2.6702880859375e-05
    19	2.4260005950927734	1.33514404296875e-05
    20	2.4259939193725586	6.67572021484375e-06
    21	2.425990581512451	3.337860107421875e-06
    22	2.4259889125823975	1.6689300537109375e-06
    23	2.4259880781173706	8.344650268554688e-07
    24	2.425988495349884	4.172325134277344e-07
    25	2.4259887039661407	2.086162567138672e-07
    26	2.425988808274269	1.043081283569336e-07
    27	2.425988756120205	5.21540641784668e-08
    28	2.425988782197237	2.60770320892334e-08
    29	2.425988769158721	1.30385160446167e-08
    30	2.425988762639463	6.51925802230835e-09
    31	2.425988759379834	3.259629011154175e-09
    32	2.4259887577500194	1.6298145055770874e-09
    33	2.425988756935112	8.149072527885437e-10
    34	2.425988757342566	4.0745362639427185e-10
    35	2.4259887575462926	2.0372681319713593e-10
    36	2.425988757444429	1.0186340659856796e-10
    37	2.4259887573934975	5.093170329928398e-11
    38	2.4259887573680317	2.546585164964199e-11
    39	2.4259887573552987	1.2732925824820995e-11
    40	2.425988757361665	6.366462912410498e-12
    41	2.425988757358482	3.183231456205249e-12
    42	2.4259887573600736	1.5916157281026244e-12
    43	2.4259887573608694	7.958078640513122e-13
    44	2.4259887573612673	3.979039320256561e-13
    45	2.4259887573614662	1.9895196601282805e-13
    46	2.4259887573615657	9.947598300641403e-14
    47	2.4259887573616155	4.973799150320701e-14
    48	2.4259887573616403	2.4868995751603507e-14
    49	2.425988757361628	1.2434497875801753e-14
    50	2.4259887573616217	6.217248937900877e-15
    51	2.425988757361625	3.1086244689504383e-15
    52	2.4259887573616234	1.7763568394002505e-15
    53	2.4259887573616226	8.881784197001252e-16
    54	2.425988757361622	8.881784197001252e-16
    55	2.425988757361622	8.881784197001252e-16
    56	2.425988757361622	8.881784197001252e-16
    57	2.425988757361622	8.881784197001252e-16
    58	2.425988757361622	8.881784197001252e-16
    59	2.425988757361622	8.881784197001252e-16
    60	2.425988757361622	8.881784197001252e-16
    61	2.425988757361622	8.881784197001252e-16
    62	2.425988757361622	8.881784197001252e-16
    63	2.425988757361622	8.881784197001252e-16
    64	2.425988757361622	8.881784197001252e-16
    65	2.425988757361622	8.881784197001252e-16
    66	2.425988757361622	8.881784197001252e-16
    67	2.425988757361622	8.881784197001252e-16
    68	2.425988757361622	8.881784197001252e-16
    69	2.425988757361622	8.881784197001252e-16
    70	2.425988757361622	8.881784197001252e-16
    71	2.425988757361622	8.881784197001252e-16
    72	2.425988757361622	8.881784197001252e-16
    73	2.425988757361622	8.881784197001252e-16
    74	2.425988757361622	8.881784197001252e-16
    75	2.425988757361622	8.881784197001252e-16
    76	2.425988757361622	8.881784197001252e-16
    77	2.425988757361622	8.881784197001252e-16
    78	2.425988757361622	8.881784197001252e-16
    79	2.425988757361622	8.881784197001252e-16
    80	2.425988757361622	8.881784197001252e-16
    81	2.425988757361622	8.881784197001252e-16
    82	2.425988757361622	8.881784197001252e-16
    83	2.425988757361622	8.881784197001252e-16
    84	2.425988757361622	8.881784197001252e-16
    85	2.425988757361622	8.881784197001252e-16
    86	2.425988757361622	8.881784197001252e-16
    87	2.425988757361622	8.881784197001252e-16
    88	2.425988757361622	8.881784197001252e-16
    89	2.425988757361622	8.881784197001252e-16
    90	2.425988757361622	8.881784197001252e-16
    91	2.425988757361622	8.881784197001252e-16
    92	2.425988757361622	8.881784197001252e-16
    93	2.425988757361622	8.881784197001252e-16
    94	2.425988757361622	8.881784197001252e-16
    95	2.425988757361622	8.881784197001252e-16
    96	2.425988757361622	8.881784197001252e-16
    97	2.425988757361622	8.881784197001252e-16
    98	2.425988757361622	8.881784197001252e-16
    99	2.425988757361622	8.881784197001252e-16
    100	2.425988757361622	8.881784197001252e-16
    
    x = 2.42598875736162211680380096368025988340377807617187500
    error = 8.881784197001252e-16
    interation = 100
    
    Note: It has not yet stopped in 100 iterations since there is always new c from previous a and b.
  • Method 2 (Regula Falsi)
    Method:
    1. Bisection
    2. Regula Falsi
    Select Method: 2
    Input pollutan lower limit value (mg/L): 1.0
    Input pollutan upper limit value (mg/L): 8.0
    Input number of iteration: 100
    
    i	x	err
    1	1.1285714285714286	6.871428571428572
    2	1.2540693397752025	0.12549791120377396
    3	8.22098176347065	6.966912423695447
    4	1.3690203109391845	6.851961452531466
    5	1.4789269031521688	0.10990659221298427
    6	4.136642366324688	2.6577154631725195
    7	1.844814336803726	2.2918280295209623
    8	2.093593129020052	0.24877879221632582
    9	2.5681447002446642	0.47455157122461245
    10	2.4009115872524283	0.16723311299223598
    11	2.4242907675446332	0.023379180292204982
    12	2.4260101070971984	0.0017193395525652022
    13	2.4259887393490422	2.136774815619802e-05
    14	2.4259887573614316	1.8012389357835445e-08
    15	2.4259887573616217	1.900701818158268e-13
    16	2.425988757361622	4.440892098500626e-16
    17	2.425988757361622	0.0
    
    x = 2.42598875736162211680380096368025988340377807617187500  
    error = 0.0
    interation = 18
    
    Note: It stops in 18 iterations after fa == fb.