## Introduction

This program can solve 4 types of equations.

## Background

I'm a ninth grader from India. I was too bored to solve equations and check them all by myself. So I wrote this program.

Knowledge of the quadratic formula (including imaginary roots) and synthetic division will help a lot.

## Using the Code

The method for solving linear equations in one variable is quite simple.

`ax+b = 0`

is the format for one variable equations. The variables `a `

and `b `

are determined and `x `

is computed by `-b/a`

.

The method I have implemented for solving linear equations in two variables is a formula which can be derived by operating on both sets of the equation. The formula for the equations is:

ax + by + c = 0

dx + ey + f = 0

x = (fb-ce)/(ae-db)

y = (cd -fa)/(ae-db)

To solve quadratic equations, we use the quadratic formula:

Root 1 = (-b + Sqrt(b2 - 4ac))/2a
Root 2 = (-b - Sqrt(b2 - 4ac))/2a

`b`^{2}-4ac

is called the "Discriminant" which is generally denoted by D.

If D >= 0, we will get Real roots.

Things get complicated when we get imaginary roots.

If D<0, then we get imaginary roots and the roots will change as follows:

Root 1 = (-b + Sqrt(4ac - b<sup>2</sup>)*i*)/2a
Root 2 = (-b + Sqrt(4ac - b2)*i)/2a*

C does not support complex numbers. So, I decided to print the root as a string:

printf("\nRoot 1 : %f+%fi",((-b)/(2*a)),disc);

The first `%f `

in the roots is `-b/2a`

which is the real part of the root and the second `%f`

prints `4ac-b`^{2}

with '`i`

' representing the imaginary part.

**I don't know a method to solve all sorts of cubic equations. If anyone gets to know of a method, please inform me of the method in a language a ninth grader like me can understand.**

float a,b,c,d,x1,x2,x3,disc;
int i;
float expr;
clrscr();
printf("ax^3 + bx^2 + cx + d = 0\n Enter a,b,c,d : \n");
scanf("%f,%f,%f,%f",&a,&b,&c,&d);
i = 0;
while(i<abs(d))
{
expr = a*pow(i,3)+b*pow(i,2)+c*i+d;
if(expr==0)
{
x1=i;
break;
}
expr = a*pow(-i,3)+b*pow(-i,2)+c*(-i)+d;
if(expr==0)
{
x1=-i;
break;
}
i++;
}
printf("Root 1 = %f",x1);
b = b + (a*(x1));
c = c + (b*(x1));
disc = (b*b)-(4*a*c);
if(disc>=0)
{
x2 = (-b+sqrt(disc))/(2*a);
x3 = (-b-sqrt(disc))/(2*a);
printf("\nRoot 2 = %f\nRoot 3 = %f",x2,x3);
}
else
{
disc = ((4*a*c)-pow(b,2))/(2*a);
printf("\nRoot 2 : %f+%fi",((-b)/(2*a)),disc);
printf("\nRoot 3 : %f-%fi",((-b)/(2*a)),disc);
}

One root is found by trial and error method. If this fails, we cannot find any other root of the expression in this program. This is the method which I have implemented in the program. All the numbers (both positive and negative) till `d`

are checked by substitution. If it succeeds, then the program moves to the next step.

b = b + (a*(x1));
c = c + (b*(x1));

This is the place where synthetic division comes into play.

Synthetic division is a shortcut method for dividing a polynomial by a linear polynomial instead of using the long division method.

I will explain the process with an example.

Let the polynomial be `(x`^{3} + 2x^{2} - 4x + 8)

and the linear polynomial `(x + 2)`

.

We have to divide them.

- Reverse the sign of the constant in the divisor. In this case, we have to make 2 into -2.
- Then write the co-efficients a, b, c and d in order. It will look like this:
`-2|1 2 -4 8`

- Bring down the first co-efficient and multiply it by the divisor. Then add this to the second co-efficient.
`2+(-2*1) = 0`

. The general form is `b`_{new} = b+(divisor * a)

.
- Then multiply the divisor again by the obtained result and add with the next co-efficient.
`-4+(-2*0) = -4`

. The general form is `c`_{new}= c+(divisor * b_{new})

.
- Again multiply the divisor by the result obtained and add this to the next (last in this case) co-efficient.
`8+ (-2*-4) =16`

.

In this example, we get the remainder as `16`

. If the polynomial is divided by one of its roots, we will get zero as the remainder in the last step. Then, the polynomial will be reduced to a quadratic equation of the form `Ax`^{2}+Bx+C=0

where `A`

is `a`

, `B `

is `b`_{new}

and `C `

is `c`_{new}

.

Then the quadratic equation is solved.

Now, we have all 3 roots of the equation.

Any suggestions or improvements are welcome. Please inform me if there is another fool-proof method for solving 3^{rd} degree equations. Methods suggested for solving 4^{th} degree and higher degree equations are welcome with open hands.

## History

- 1
^{st} October, 2009: Initial post

## Contact

You can either post a comment or mail me at r.anshul@gmail.com.