Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2018, 14:18   #1
Алексей9912
Пользователь
 
Регистрация: 30.09.2018
Сообщений: 30
Вопрос численные методы решения нелинейных уравнений

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
#define PI 3.14159


double formula (double x) {
    return (pow(x, 3)* cos(3*PI*x)*exp(x)-pow(x,2)*cos(2*PI*x)*exp(0.5*x)+5);
}

double der2 (double x) {
    return -9*pow(PI,2)*exp(x)*pow(x,3)*cos(3*PI*x)-0.25 * exp(0.5*x)*pow(x, 2)*cos(2*PI*x)-exp(0.5*x)*(-4*pow(PI,2)*pow(x,2)*cos(2*PI*x)-8*PI*x*sin(2*PI*x)+2*cos(2*PI*x))-exp(0.5*x)*(2*x*cos(2*PI*x)-2*PI*x*x*sin(2*PI*x))-6*PI*(exp(x)*pow(x,3)+3*exp(x)*pow(x,2))*sin(3*PI*x)+(exp(x)*pow(x,3)+6*exp(x)*pow(x,2)+6*exp(x)*x)*cos(3*PI*x);
}

double halfDiv (double a, double b) {
    double x = (a + b) / 2;
    while (abs(b - a) > 0.00001) {
        if (formula(b)*formula(x)<0) a = x;
        else b = x;
        x = (a + b)/2;
    }
    return x;
}

double horda(double a, double b){
    double c;
    while (abs(formula(b) - formula(a)) > 0.00001)
    {
        c = (formula(b)*a - formula(a)*b)/(formula(b)-formula(a));
        if ((formula(a)*formula(c))>0) a=c;
        else b = c;
    }
    return b;
}

double touch (double a, double b) {
    double c = (formula(a)*der2(a)>0) ? a : b;
    double fc;
    double fder2;
    double d = 0;
    do {
        d += c;
        fc = formula(c);
        fder2 = der2(c);
        c -= fc/fder2;
        d -= c;
        d = abs(d);
    } while (d > 0.00001);
    return c;
}

int main()
{
    double x1, x2;
    setlocale(LC_ALL, "rus");
    printf("Введите через пробел концы отрезка (a и b соответственно): ");
    scanf("%lf %lf", &x1, &x2);
    if (formula(x1)*formula(x2)>0) printf("Невалидный интервал!");
    else printf("Решение методом деления пополам:\nx = %lf\nf(x) = %lf\n\nРешение методом хорд:\nx = %lf\nf(x) = %lf\n\nРешение методом касательных:\nx = %lf\nf(x) = %lf",halfDiv(x1, x2), formula(halfDiv(x1,x2)), horda(x1,x2), formula(horda(x1,x2)), touch(x1,x2), formula(touch(x1,x2)));
    return 0;
}
вот я написал код для решения нелинейных уравнений. решил для теста запустить в онлайн-компиляторе. но мне пишет, что не определены все эти математические функции. но ведь я подключил заголовок для них. в чем проблема?
Алексей9912 вне форума Ответить с цитированием
Старый 31.10.2018, 14:32   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Не знаю, где и что вы запускали, но оно компилируется https://ideone.com/WQ5MnA
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорение решения системы нелинейных уравнений в Mathcad Program92 Помощь студентам 1 05.08.2016 02:36
Численные методы решения уравнений- метод половинного деления cyx Общие вопросы Delphi 1 09.03.2015 19:50
3 метода решения нелинейных уравнений Delphi efgen Помощь студентам 7 11.04.2014 20:43
Алгоритмы решения систем нелинейных уравнений Fataller Помощь студентам 2 18.08.2010 02:52
Программа для решения ситем нелинейных уравнений Appolinaria Помощь студентам 1 09.03.2009 18:53