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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 20:03   #1
masterlightsmoke
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 13
По умолчанию

Вот 8-ая лабораторная, не могу понять, что от меня вообще хотят)))

Написать программу поиска корня многочлена на интервале [a,b] с точночтью epsilon.

подскажите, что должна делать программа?
если не впадлу, то напишите код) буду очень благодарен)

не кто не знает?

Последний раз редактировалось Stilet; 18.12.2011 в 16:51.
masterlightsmoke вне форума Ответить с цитированием
Старый 17.12.2011, 23:49   #2
Maksimall89
Пользователь
 
Аватар для Maksimall89
 
Регистрация: 10.11.2010
Сообщений: 59
По умолчанию

Если я правильно понимаю тебе нужно реализовать какой-то из следующих методов: дихотомии, хорд, Ньютона (касательных), простых итераций
Maksimall89 вне форума Ответить с цитированием
Старый 18.12.2011, 00:05   #3
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию

Если я правильно понял:
Просто делаешь цикл, и подставляешь в многочлен числа от а до b с шагом epsilon, если многочлен обнуляется(или знаение лежит в диапозоне -epsilon +epslilon) то это корень.
litviak вне форума Ответить с цитированием
Старый 18.12.2011, 00:40   #4
Maksimall89
Пользователь
 
Аватар для Maksimall89
 
Регистрация: 10.11.2010
Сообщений: 59
По умолчанию

Вот по быстрому набросал метод дихотомии.
Код:
#include "stdafx.h"
#include <iostream> 
using namespace std;

double polinom(double z) // вычисление функции
{
	double result;
	result = z*z*z-3*z*z-2*z+5; // заданный полином/многочлен
	return(result);
} 

int main()
{	
	setlocale(LC_ALL, "russian_russia.1251"); // русский текст
	double epsilon = 0.001; // точность
	double x; // твой корень
	//количество итераций
	int iter = 0;
	//пределы
	double a = 0.5;
	double b = 1.5;
// 
	while (abs(b-a)>epsilon)
	{
		x=(a+b)/2;
		if ((polinom(a)*polinom(x))<0)
		{
			b=x;
		}
		else
		{
			a=x;
		}
	iter++;
	}

		cout<<"Корень = "<<x<<endl;
		cout<<"Итераций = "<<iter<<endl;

   return 0;
}
Maksimall89 вне форума Ответить с цитированием
Старый 18.12.2011, 00:52   #5
Maksimall89
Пользователь
 
Аватар для Maksimall89
 
Регистрация: 10.11.2010
Сообщений: 59
По умолчанию

litviak
Цитата:
Если я правильно понял:
Просто делаешь цикл, и подставляешь в многочлен числа от а до b с шагом epsilon, если многочлен обнуляется(или знаение лежит в диапозоне -epsilon +epslilon) то это корень.
А если точность 10^(-10) и интервал [-100,100], вы себе представляете как всё это будет работать?) Это же всё встанет колом.
Вот для этих целей и были придуманы методы о которых я написал вые.
Maksimall89 вне форума Ответить с цитированием
Старый 18.12.2011, 01:15   #6
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию

Суть такая же как в бинарном поиске, если я правильно понял, но у многочлена на заданом интервале может быть несколько корней.
litviak вне форума Ответить с цитированием
Старый 18.12.2011, 01:46   #7
Maksimall89
Пользователь
 
Аватар для Maksimall89
 
Регистрация: 10.11.2010
Сообщений: 59
По умолчанию

litviak
Цитата:
Суть такая же как в бинарном поиске, если я правильно понял, но у многочлена на заданом интервале может быть несколько корней.
Тогда нет ничего сложного чуток их модифицировать
Maksimall89 вне форума Ответить с цитированием
Старый 18.12.2011, 01:58   #8
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию

Ок, на интервале от a до (a+b)/2 находятся 2 корня, тогда мы их сразу пропускаем.
И кстати, если корней вообще нет, тогда x приближенно примет b.

Последний раз редактировалось litviak; 18.12.2011 в 02:07.
litviak вне форума Ответить с цитированием
Старый 18.12.2011, 13:29   #9
Maksimall89
Пользователь
 
Аватар для Maksimall89
 
Регистрация: 10.11.2010
Сообщений: 59
По умолчанию

Цитата:
Сообщение от litviak Посмотреть сообщение
Ок, на интервале от a до (a+b)/2 находятся 2 корня, тогда мы их сразу пропускаем.
И кстати, если корней вообще нет, тогда x приближенно примет b.
Я же написал выше, что на вход подавать интервал с одним корнем
Данные алгоритмы "заточены под это".
Maksimall89 вне форума Ответить с цитированием
Старый 18.12.2011, 15:48   #10
masterlightsmoke
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 13
По умолчанию

Всем большое спасибо)
masterlightsmoke вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
НЕ могу разобраться Smagulov85 БД в Delphi 9 29.09.2010 16:13
не могу разобраться в условии Brabus Помощь студентам 1 29.06.2010 21:26
не могу разобраться Var17 Общие вопросы Delphi 6 27.03.2010 01:21
excel изменение цвета при условии. не могу разобраться. PRO100 BIN Microsoft Office Excel 9 20.03.2010 00:12
Не могу разобраться, 2 задачи в паскале Волчица Помощь студентам 4 23.03.2009 18:25