Решить уравнение методом хорд - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста решить уравнение методом хорд.
Даны числа c=3, d=-3, n=30. Для каждого pi=c+i*h найти корень. Т.е. получается у меня будет 30 корней. Корень найти с точностью ε=0.001. Для каждого pi найти интервал [a, b].
Вот то, что я написала:
Совсем чуть-чуть. Не знаю, как дальше. Очень нужна срочно помощь
#include "stdlib.h"
#include "stdio.h"
#include "conio.h"
float f(float x, float p)
{
3*x-p*(5*x-3);
}
float ytochn(float a, float b, float e)
{
float x1, x2;
do
{
if(a<0)
x1 = b-(b-a/f(b)-f(a))*f(b);
x2 =
else
x1 = a-(b-a/f(b)-f(a))*f(a);
x2 =
}
while(fabs(x2-x1)>e);
}
float yr(float p)
{
int n, i;
float x1, x2, x0, dx, xk, c, d, h;
h = d-c/n;
for(i=0;i<n;i++)
p = c-i*h;
if(f(x1)*f(x2) <0)
a=x1; b=x2;
}Решение задачи: «Решить уравнение методом хорд»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_I 100000
int chord_method (double (*f)(double), double a, double b, double eps, double *x);
double f (double x);
static int count=0;
double f (double x)
{
count++;
return x*x+3*x-4;
}
int chord_method (double (*f)(double), double a, double b, double eps, double *x)
{
double fa, fb;
int i;
for (i=0; i < MAX_I; i++)
{
if ( fabs(b - a) < eps ) break;
fa = f(a); fb = f(b);
a = b - (b-a)*fb / (fb - fa);
b = a - (a-b)*fa / (fa - fb);
}
if (i < MAX_I)
{
*x = b;
return count;
}
return -1;
}
int main (void)
{
double a, b, eps, x;
printf("Input a: "); scanf("%lf", &a);
printf("Input b: "); scanf("%lf", &b);
printf("Input eps: "); scanf("%lf", &eps);
if ( chord_method(f, a, b, eps, &x) > 0 ) printf("Root: %lf\nIterations: %d\n", x, count);
else printf("Bad luck, dude\n");
return 0;
}
Объяснение кода листинга программы
- Код включает в себя функцию
chord_method, которая реализует метод хорд для численного решения уравнений. - Функция
fпредставляет собой функцию, которую нужно решить. В данном случае она возвращает значениеx*x+3*x-4. - В функции
mainпользователю предлагается ввести значенияa,bиeps. - Значения
aиbпредставляют собой начальные приближения для решения уравнения. - Значение
epsопределяет требуемую точность решения. - После ввода значений, вызывается функция
chord_methodс передачей в нее функцииf,a,bиepsв качестве аргументов, а также указанием адреса переменнойxдля возвращения результата. - Если функция
chord_methodвернула значение больше нуля, то это означает, что решение найдено и выводится на экран. - Если функция
chord_methodвернула значение меньше нуля, то выводится сообщение об неудачном решении.