Модераторы: Poseidon
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> реализация алгоритма метода ХОРД 
V
    Опции темы
max1978
Дата 15.4.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.4.2008

Репутация: нет
Всего: нет



Помогите выполнить на языке С++ решение нелинейного уравнения методом ХОРД
интервал на котором будет производиться вычисления корня должен вводиться в диалоговом режиме
5*X*ln (8x+2)-16=0 
PM MAIL   Вверх
RDC
Дата 15.4.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



Лови, делали 2 года назад с однокурсником на пару. Там сразу всеми методами решается. Если надо ты хорды вырежи.
Код

#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double a,b,E;
double func(double c){
  return c*c*c-2*c-0.3;
}
double func1(double c){
  return 3*c*c-2;
}
double func2(double c){
  return 6*c;
}
int proverka(double c,double d){
  if((func(c)*func(d))>0){
    printf("Ottdelennii otrezok ne imeet kornei!!");
    return 0;
  }
  else
    return 1;
}

int prov_hord(double c,double d){
   if((func1(c)*func1(d)<0)||(func2(c)*func2(d)<0))
     return 0;
   else
     return 1;
}
void enter(){
  clrscr();
  printf("Vvedite otrezok, kotorii.....:\n");
  scanf("%lf %lf",&a,&b);
  printf("\nVvedite Eps:\n");
  scanf("%lf",&E);
}
void m_scan(double c, double d){
  double x,t;
  t=c;
  while(c<b){
    t+=E;
    if((func(c)*func(t))<0){
      x=(c+t)/2;
      break;
    }
    c=t;
  }
  printf("\nMetod scanirovaniya: %lf",x);
}
void m_poldel(double c, double d){
  double x,zn;
  char i;
  i=0;
  printf("\n\n<<<Metod Polovinnogo deleniya>>>");
  while(1){
    i++;
    x=(c+d)/2;
    printf("\n %d %lf %.10lf %.10lf %.10lf %lf %lf ",i,c,func(c),(c+d)/2,func((c+d)/2),d,func(d));
    printf("\na-b=%lf",c-d);
    if (fabs(c-d)<=E){
      zn=(d+c)/2;
      break;
    }
    if (func(x)==0){
      zn=x;
      break;
    }
    if((func(c)*func(x))<0)
      d=x;
    else
      c=x;
  }
  printf("\n\nPriblizitelnii koren = %lf",zn);
}
void m_hord(double c,double d){
  double x,x1;
  char i=0;
  x1=0;
  printf("\n\n<<<Metod Hord>>>");
  while(1){
    i++;
    x=c+(func(c)*(d-c))/(func(c)-func(b));
    printf("\n %d %lf %lf %lf %lf",i,x,func(x),x-c,func(c)-func(x));
    printf("\n%lf",x1-x);
    if(fabs(x1-x)<=E){
      x=x;
      break;
    }
    if((func(x)*func2(x))>0)
      d=x;
    else
      c=x;
    x1=x;
  }
  printf("\n\nPriblizitelnii koren raven = %lf",x);
}
void m_kasat(double c,double d){
  double x,x1;
  int i=0;
  printf("\n\n<<<Metod Kasatelnih>>>");
  if(func(c)*func2(c)>0)
    x=c;
  else
    x=d;
  x1=0;
  while(1){
    i++;
    x=x-func(x)/func1(x);
    printf("\n %d %.5lf %.5lf %.5lf",i,x,func(x),func1(x));
    if(fabs(x1-x)<=E)
      break;
    if(func(x)==0)
      break;
    x1=x;
  }
  printf("\n\nPriblizitelnii koren = %lf",x);
}
void m_smesh(double c, double d){
  double x;
  int i=0;
  printf("\n\n<<<Metod Kompleksnii >>>");
  while(1){
    i++;
    if(func(c)*func2(c)>0){
      printf("\n %d %.6lf %.6lf %.6lf",i,c,func(c),func1(c));
      c=c-func(c)/func1(c);
      printf(" %.6lf",c);
      printf("\n %d %.6lf %.6lf %.6lf %.6lf",i,d,func(d),d-c,func(c)-func(d));
      d=c+func(c)*(d-c)/(func(c)-func(b));
      printf(" %.6lf %.6lf",d,c-d);
    }
    else{
      printf("\n %d %.6lf %.6lf %.6lf",i,c,func(c),func1(c));
      c=c-func(c)*(d-c)/(func(d)-func(c));
      printf(" %.6lf",c);
      printf("\n %d %.6lf %.6lf %.6lf %.6lf",i,d,func(d),d-c,func(c)-func(d));
      d=d-func(d)/func1(d);
      printf(" %.6lf %.6lf",d,c-d);
    }
    if(func(c)==0){
      x=c;
      break;
    }
    if(func(d)==0){
      x=d;
      break;
    }
    if(fabs(c-d)<=E){
      x=(c+d)/2;
      break;
    }
  }
  printf("\n\nPriblizitelnii koren raven = %lf",x);
}
void main(void){
  while(1){
    enter();
    if(proverka(a,b)){
      m_scan(a,b);
      m_poldel(a,b);
    }
    else{
      printf("\n\n<<<Press anu key for input again>>>>");
      if(getch()=='q')
    break;
      else
    continue;
    }
    if(prov_hord(a,b)){
      //m_hord(a,b);
      m_kasat(a,b);
      m_smesh(a,b);
    }
    else
      printf("\nK dannomu promezutku ne primenim metod hord i kasatelnih!!!");
    getch();
    break;
  }
}


--------------------
Живопись
PM MAIL   Вверх
max1978
Дата 16.4.2008, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.4.2008

Репутация: нет
Всего: нет



Спасибо огромное!
PM MAIL   Вверх
Lapsha
Дата 23.5.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.5.2008

Репутация: нет
Всего: нет



А можно тоже самое только в Builder
PM MAIL   Вверх
Rodman
Дата 23.5.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122



Создайте свою тему!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.