Нахождение корней уравнения с помощью деления пополам - PullRequest
0 голосов
/ 04 марта 2019

Пытаюсь найти корни уравнения (x ^ 3) - (x ^ 2) +2, используя метод деления пополам.Для этого я взял два значения у пользователя, чтобы они действовали в качестве начальных догадок (здесь они называются пределами), а затем сходились к значению, при котором функция переходит на 0. Но всякий раз, когда я изменяю пределы, значение также различается в больших количествах, и ничегоиз них близки к фактической стоимости.Любые предложения, где я могу ошибаться?

Вот код:

#include<stdio.h>
#include<cstdlib>
# define Epsilon 0.0001
float f(float x)
{
    return x*x*x-x*x+2;
}
float bisection(float a, float b)
{
    if(f(a)*f(b)>0)
    {
        printf("No root within this interval.");
    }
    float c=a;
    while(abs(b-a)>Epsilon)
    {
        c=(a+b)/2;
        if(f(a)*f(c)<0)
        {
            b=c;
        }
        else if(f(b)*f(c)<0)
        {
            a=c;
        }
        else if(f(c)==0)
        {
            printf("The root of x^3-x^2+2 is %f",c);
            break;
        }
    }
    printf("The root of x^3-x^2+2 is %f",c);
}
int main(void)
{
    float u,l;
    printf("Enter upper limit:\n");
    scanf("%f",&u);
    printf("Enter lower limit:\n");
    scanf(" %f",&l);
    bisection(l,u);
}

Спасибо за помощь заранее!

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

У вас есть бесконечный цикл в вашей функции bisection.

if (f(a)*f(b)>0) вы определяете, что в вашем интервале нет корня;затем вы пытаетесь найти его.Вам не удается найти подинтервал, в котором существует корень, поэтому вы ничего не меняете и попробуйте снова.

0 голосов
/ 04 марта 2019
  1. Вам нужно #include <cmath>
  2. Вам необходимо заменить abs (целочисленное абсолютное значение) на fabs (абсолютное значение с плавающей запятой)
  3. Необходимо проверить поЭпсилон: if (f(c) <= Epsilon) вместо if (f(c) == 0), что вряд ли произойдет.

Но в любом случае вам все равно нужно проверить, есть ли решение.Если в интервале догадок нет решения, цикл в функции никогда не останавливается.Это оставлено как упражнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...