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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2013, 00:24   #1
RennarD
Новичок
Джуниор
 
Регистрация: 20.03.2013
Сообщений: 2
По умолчанию Метод итераций для развязывания нелинейного уравнения(C++)

- развязать заданое уравнение 0.6*x^4 + 3ln(x+3) - 3.7=0
с точностью е = е (i – 1) / 10^(-3), і = 1, 2, ..., 4; e0 = 0.01 методом итераций.
Прикинул немного,но расчет кривой получается.
Корни уравнения должны быть
{~(-2.999999683),~(-1.39681),~0.412779}
Буду очень благодарен,если кто-то ткнет мой глупый нос в мои глупые ошибки.

Код:
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
double derivative(double x)
   {
     x=(-3*log(x+3)-3.7)/(0.6*pow(x,3));
 
     return x;
   }
 
int main()
   {
     double a=-3.2, b=-2.85, eps=0.1;
     double x1,x0,q;
     printf("\n     eps   | k |        X    \n\n");
      double q1=-5/3*(3/(pow(a,3)*(a+3))-3*(log(a+3)+3.7)/pow(a,4));
      double q2=-5/3*(3/(pow(b,3)*(b+3))-3*(log(b+3)+3.7)/pow(b,4));
     if (fabs(q1) < fabs(q2))
          q=fabs(q1);
     else q=fabs(q2);
     for (int i=0; i<=6; i++)
        {
          x1=(a+b)/2;
          int k=0;
          do
             {
               x0=x1;
               x1=derivative(x0);
               k++;
             }
          while (fabs(x1-x0)>=eps*(1-q)/q);
          printf(" %0.7f  %d    %0.10e\n",eps,k,x1);
          eps/=10;
        }
 
     double x2=a;
     int k;
     printf("\n   X0        k    \n\n");
     eps=pow(10,-30);
     while (x2<=b)
        {
          x1=x2;
          k=0;
          do
             {
               x0=x1;
               x1=derivative(x0);
               k++;
             }
          while (fabs(x1-x0)>=eps*(1-q)/q);
          printf("  %0.2f       %d\n",x2,k);
          x2+=0.03;
        }
 
     getch();
   }
RennarD вне форума Ответить с цитированием
Старый 31.03.2013, 19:50   #2
RennarD
Новичок
Джуниор
 
Регистрация: 20.03.2013
Сообщений: 2
По умолчанию

Что,никто не знает?)Или у меня все так запущенно?)
RennarD вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать Модуль для решения уравнения методом итераций Константинн Паскаль, Turbo Pascal, PascalABC.NET 2 02.03.2011 18:45
Написать Модуль для решения уравнения методом итераций Константинн Помощь студентам 0 01.03.2011 20:50
текст программы для решения нелинейного уравнения методом простых итераций Dyst Помощь студентам 2 14.05.2008 22:00