Integration in a Polynomial for a given value

Given a string str which represents a polynomial and a number N, the task is to integrate this polynomial with respect to X at the given value N.

Examples:

Input: str = “90x4 + 24x3 + 18x2 + 18x”, N = 1.
Output: 39
Explanation:
Given, dy/dx = 90*(X4) + 24* (X3) + 18* (X2) + 18*(X). On integrating this equation, we get 18*(X5) + 6*(X4) + 6*(X3) + 9*(X2) and substituting the value X = 1, we get:
18 + 6 + 6 + 9 = 39.

Input: str = “4x3 + 2x2 + 3x”, N = 2
Output: 27

Approach: The idea is to use the identity of the integration. For some given function X with the power of N, the integration of this term is given by:
\int (X^{N}) = \frac{X^{N + 1}}{N + 1}



Therefore, the following steps are followed to compute the answer:

  • Get the string.
  • Split the string and perform the integration based on the above formula.
  • Substitute the value of N in the obtained expression.
  • Add all the individual values to get the final integral value.

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the integration
// of the given polynomial for the
// value N
  
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
  
// Function to return the integral
// of the given term
double inteTerm(string pTerm, ll val)
{
    // Get the coefficient
    string coeffStr = "";
    int i;
  
    // Loop to iterate through the string
    // and get the coefficient
    for (i = 0; pTerm[i] != 'x'; i++)
        coeffStr.push_back(pTerm[i]);
    ll coeff = atol(coeffStr.c_str());
  
    // Get the Power
    string powStr = "";
  
    // Loop to skip 2 characters for x and ^
    for (i = i + 2; i != pTerm.size(); i++)
        powStr.push_back(pTerm[i]);
    ll power = atol(powStr.c_str());
  
    // Return the computed integral
    return (coeff * pow(val, power + 1))
           / (power + 1);
}
  
// Functionto find the integration
// of the given polynomial for the
// value N
double integrationVal(string poly, int val)
{
    ll ans = 0;
  
    // Using string stream to get the
    // input in tokens
    istringstream is(poly);
    string pTerm;
  
    while (is >> pTerm) {
  
        // If the token is equal to '+' then
        // continue with the string
        if (pTerm == "+")
            continue;
  
        // Otherwise find the integration
        // of that particular term
        else
            ans = (ans + inteTerm(pTerm, val));
    }
    return ans;
}
  
// Driver code
int main()
{
    string str = "4x^3 + 3x^1 + 2x^2";
    int val = 2;
    cout << integrationVal(str, val);
    return 0;
}

chevron_right


Output:

27

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.