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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нахождение корня методом деления пополам 
:(
    Опции темы
Elfet
  Дата 3.5.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Вот сказали сделать smile (процедуру нахождение корня методом деления пополам)
Как это выглядит и работает на листке я понимаю smile а вот запрограмить - никак smile
Прошу помощи! smile
Вот полное задание:
Цитата
Построить процедуру нахождения в интервале [a,b] единственного корня уровнения вида f(x)=0, с точностью E (для значения функции в окресности корня) или N (для значения в корне) , применив метод деления пополам.


Вот то что у меня не работает smile
Код

#include <iostream>
#include <cmath>
using namespace std;

float found(float a, float b, float eps);
float f(float x);
float mod(float x){return sqrt(x*x);};

void main()
{
    int e;
    float a,b,eps;
    
    cout << "Found X." << __DATE__ << endl;
    cout << "Write 'a' and push Enter:" << endl;
    cin >> a;
    cout << "Write 'b' and push Enter:" << endl;
    cin >> b;
    cout << "Write 'eps' and push Enter:" << endl;
    cin >> eps;
    
    cout << endl << "f( " << found(a,b,eps) << " )=0";
    
    cin >> e;
}

float found(float a, float b, float eps)
{

    float x,y,z;
    z=f(a);
    do
    {
     x=(a+b)/2; y=f(x);
     if(y*z>0)
     { 
         a=x;
     }
     else 
     {
         b=x;
     }

    }while( (mod(y) < eps) && (mod(a-b) < eps) );

    return x;
}

float f(float x)
{
    return 3*x-2;
}



--------------------
PM MAIL WWW Skype   Вверх
Elfet
Дата 4.5.2005, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Нужна помощь! smile Зачёт в четверг! А у меня всё не выходит smile


--------------------
PM MAIL WWW Skype   Вверх
Pakshin A. S.
Дата 4.5.2005, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А можно объяснить сам метод нахождения?
PM   Вверх
Elfet
Дата 5.5.2005, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Всё разобрался!
Цитата(Elfet @ 3.5.2005, 21:08)
    }while( (mod(y) < eps) && (mod(a-b) < eps) );

на

Цитата(Elfet @ 3.5.2005, 21:08)
    }while( (mod(y) > eps) && (mod(a-b) > eps) );

smile smile smile

Сам метод очень прост:
Мы делем участок пополам и смотрим который ближе у ОХ, затем берём этот участок и также анализируем smile Пока не дойдём до точности вещественного нуля smile ну или до одной из границ smile


--------------------
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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