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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2015, 18:13   #1
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Вот есть код..

Дано:

an - коэффициент при старшем члене полинома

n - степень полинома;

x - массив корней полинома (x[0], x[1], …x[n]) ;

Вычислить:

массив a - массив коэффициентов полинома (a[0], a[1], …a[n]).

Код:
//Вычисляем коэффициенты полинома первой степени
a[1]= 1;    a[0] = -x[0];
//цикл по числу полиномов
for(int k=2;k<n; k++)
{
    //Вычисляем коэффициенты полинома степени k
    //Вначале старший коэффициент
    a[k]= a[k-1];
    //затем остальные коэффициенты, кроме последнего
    for(int i=k-1;i>0; i--)
    {
  a[i] = a[i-1]- a[i]*x[k-1];
    }
    //теперь младший коэффициент
    a[0]= -a[0]*x[k-1];
}
//Последний этап - умножение коэффициентов на an
for(int i=0; i<n; i++)
    a[i] = a[i]*an;
...

И вот например дан полином
3(x-2)(x+2)(x-1)(x+1)=3*x^4-15*x^2+12

Как видно степень полинома = 4, старший коэффициент = 3, корни полинома = 2, -2, 1, -1

И в ответе он выводит, что коэффициенты равны = 3, -3, -12, 12

А надо чтоб выводило 3, 0, -15, 12

В принципе выводит по сути правильно... Но надо чтоб выводило правильный коэффициент по каждой степени...

Помогите, пожалуйста!

Или может по другому выводить?

Или может тупо выводить нужные коэффициенты?

Последний раз редактировалось Stilet; 05.12.2015 в 09:32.
manchester_alan вне форума Ответить с цитированием
Старый 04.12.2015, 23:36   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

может это от того, что ты их неправильно считашь?

a[n-1] = a[n] * Sum(x[i])
a[n - 2] = a[n] * Sum(x[i]*x[j]) i != j
a[n - 3] = a[n] * Sum(x[i]*x[j]*x[k]) i != j != k
......
a[0] = a[n] * x[n]*x[n-1]* .. *x[0]
f.hump вне форума Ответить с цитированием
Старый 05.12.2015, 15:15   #3
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
может это от того, что ты их неправильно считашь?

a[n-1] = a[n] * Sum(x[i])
a[n - 2] = a[n] * Sum(x[i]*x[j]) i != j
a[n - 3] = a[n] * Sum(x[i]*x[j]*x[k]) i != j != k
......
a[0] = a[n] * x[n]*x[n-1]* .. *x[0]
Ну может и так) а как правильно написать будет?
manchester_alan вне форума Ответить с цитированием
Старый 05.12.2015, 17:37   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

как-то так

Код:
int x[8], a[8], t[8], n(4);


	x[0] = 1;
	x[1] = -1;
	x[2] = 2;
	x[3] = -2;


	a[n] = 3;



	a[n - 1] = 0;
	for (int j(0);j<n;j++) {
		t[j] = x[j];
		a[n - 1] += t[j];		
	}

	for (int i(n-2);i>=0;i--) {
		a[i] = 0;

		for (int j(0);j<n;j++) {
			t[j] = x[j]*(a[i + 1] - t[j]);
			a[i] += t[j];
		}

		a[i] /= (n - i);
	}

	for (int i(0);i<n;i++) a[i] *= a[n];
f.hump вне форума Ответить с цитированием
Старый 05.12.2015, 23:04   #5
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
как-то так

Код:
int x[8], a[8], t[8], n(4);


	x[0] = 1;
	x[1] = -1;
	x[2] = 2;
	x[3] = -2;


	a[n] = 3;



	a[n - 1] = 0;
	for (int j(0);j<n;j++) {
		t[j] = x[j];
		a[n - 1] += t[j];		
	}

	for (int i(n-2);i>=0;i--) {
		a[i] = 0;

		for (int j(0);j<n;j++) {
			t[j] = x[j]*(a[i + 1] - t[j]);
			a[i] += t[j];
		}

		a[i] /= (n - i);
	}

	for (int i(0);i<n;i++) a[i] *= a[n];
нули выводятся((( а так спасибо..)
manchester_alan вне форума Ответить с цитированием
Старый 05.12.2015, 23:14   #6
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

поменял
Код:
a[n - 1] = 0;
на
Код:
a[n - 1] = 1;
и теперь выводит
3 6 -6 0
manchester_alan вне форума Ответить с цитированием
Старый 06.12.2015, 20:56   #7
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Цитата:
f.hump
как-нибудь по другому нельзя сделать?(
manchester_alan вне форума Ответить с цитированием
Старый 06.12.2015, 21:17   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

наверно можно.
на данном этапе советую выполнить пошаговый трейс программы, мне всегда помогает.
f.hump вне форума Ответить с цитированием
Старый 24.12.2015, 17:42   #9
kaiwa
Новичок
Джуниор
 
Регистрация: 02.07.2013
Сообщений: 1
По умолчанию

не нашли правильное решение? тоже такая задача, запарился уже
kaiwa вне форума Ответить с цитированием
Старый 19.11.2020, 00:42   #10
SourceRaR
Новичок
Джуниор
 
Регистрация: 19.11.2020
Сообщений: 1
По умолчанию

Вот работающий корректно код:
Код:
// Массив корней
	double* x = new double[n];
	for (int i = 0; i < n; i++)
		x[i] = 0;

    // Массив коэффициентов
	double* a = new double[n + 1];
	for (int i = 0; i < n; i++)
		a[i] = 0;

    // {Вводим данные}

    // Старший коэффициент
    double an;

    // Первый и последний коэффициенты
	a[0] = - x[0];
	a[n] = 1;

    // Все остальные
	for (int i = 1; i < n; i++)
	{
		//Коэффициент высшей степени
               a[i] = a[i - 1] - x[i];

		for (int j = i - 1; j > 0; j--)
			a[j] = a[j - 1] - a[j] * x[i];

                // Коэффициент низшей степени    
		a[0] = - a[0] * x[i];
	}

    // Умножаем все не старший коэффициент
    for (int i = 0; i <= n; i++)
        a[i] = a[i] * an;
SourceRaR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таблица биномиальных коэффициентов andrewllp1610 Помощь студентам 0 07.01.2014 14:59
Ввод коэффициентов функции Katerina3262 Помощь студентам 6 12.05.2012 21:08
Подсчёт коэффициентов [Паскаль] Pirotexnik Помощь студентам 6 11.12.2010 22:03
Расчет коэффициентов экспоненты metrim Microsoft Office Excel 4 01.09.2009 17:32