Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28

Определение коэффициентов полинома

15.04.2015, 13:06. Показов 2095. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача.
Написать определение коэффициентов полинома, заданного списком действительных корней.
Помогите пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.04.2015, 13:06
Ответы с готовыми решениями:

Определение коэффициентов полинома
Здравствуйте, подскажите пожалуйста с помощью какой функции можно определить коэффицикнты полинома в матлаб?:(

Задача на определение коэффициентов полинома
Здравствуйте, подскажите, как получить вектор содержащий коэффициенты полинома, заданного в виде символьного выражения. Дано, например...

Задача на определение коэффициентов полинома
Здравствуйте, помогите с задачкой, не знаю как по таким данным определить коэффициенты полинома...Текст задачи прилагаю, задача номер 2

12
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
15.04.2015, 14:16
Интересная задача. Если решать "в лоб", то как-то так:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
add_next_root(P, Z, PN) :-
    add_next_root_do(P, [0|P], Z, PN).
    
add_next_root_do([H1|T1], [H2|T2], Z, [H|T]) :-
    H is H1 - Z*H2,
    add_next_root_do(T1, T2, Z, T).
add_next_root_do([], [H2], Z, [H]) :-
    H is - Z*H2.
 
create_polynom([], [1]).
create_polynom([H|T], P) :-
    create_polynom(T, PT),
    add_next_root(PT, H, P).
Добавлено через 17 минут
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
?- create_polynom([1], P).
P = [1, -1].
 
?- create_polynom([1,1], P).
P = [1, -2, 1].
 
?- create_polynom([1,1,1], P).
P = [1, -3, 3, -1].
 
?- create_polynom([1,-1,1], P).
P = [1, -1, -1, 1].
 
?- create_polynom([1,2], P).
P = [1, -3, 2].
2
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28
15.04.2015, 21:27  [ТС]
Не могли бы вы описать вкратце каждый предикат?
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
16.04.2015, 01:27
Это решение "в лоб". Доумножение ранее полученного полинома на https://www.cyberforum.ru/cgi-bin/latex.cgi?(x-z_{i})
1
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28
20.04.2015, 21:50  [ТС]
Как изменить код, чтобы он по-прежнему работал, но create_polynom([], [1]) поменять на create_polynom([], [])? ведь это неверно, что пустому списку корней соответствует непустой полином
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
21.04.2015, 08:09
Цитата Сообщение от Judy Посмотреть сообщение
неверно, что пустому списку корней соответствует непустой полином
Вы не правы.
Пустому списку корней, соответствует полином нулевой степени, константно равный 1.
А как, простите, Вы себе представляете "пустой полином" ? Какой он степени?
0
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28
27.04.2015, 16:58  [ТС]
Прошу прощения, но преподаватель настаивает на том, что задача поиска корней уравнения 1=0 не имеет смысла. Так то оно так, но задачу не принимает. А я не могу понять как переписать ее в таком виде create_polynom([], []).
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
27.04.2015, 22:19
Цитата Сообщение от Judy Посмотреть сообщение
преподаватель настаивает..
Объясните преподавателю, что полином нулевой степени относительно x вполне существует, тождественно равен константе и имеет пустое множество корней. Интересно, он утверждает что не существует полиномов нулевой степени? Или что в определении корня полинома как-то упоминается ненулевая степень?
Цитата Сообщение от Judy Посмотреть сообщение
А я не могу понять как переписать
Добавьте еще один предикат:
Prolog
1
2
create_polynom_for_dummy([], []) :- !.
create_polynom_for_dummy(X, Y) :- create_polynom(X, Y).
Только назовите его как-нибудь более прилично
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
28.04.2015, 12:20
Имея предикат, вычисляющий произведение полиномов, построить полином по списку корней нетрудно:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
domains
int=integer
intl=int*
 
predicates
len(intl,int)
elt(intl,int,int)
pcoeff(intl,intl,int,int,int)
coeff(intl,intl,int,int,int)
poly_mult(intl,intl,int,intl)
polymult(intl,intl,intl)
poly_from_roots(intl,intl)
 
 
clauses
len([],0).
len([_|T],N) :- len(T,N1), N=N1+1.
 
elt([],_,0)    :- !.  
elt([X|_],0,X) :- !.
elt([_|T],N,X) :- N1=N-1, elt(T,N1,X).
 
pcoeff(PX,PY,I,J,Q) :- elt(PX,I,XX), elt(PY,J,YY), Q=XX*YY.
 
coeff(_,_,N,I,0)  :- I>N, !.
coeff(PX,PY,N,I,S)  :- J=N-I, pcoeff(PX,PY,I,J,Q), I1=I+1, coeff(PX,PY,N,I1,S1), S=S1+Q.
 
poly_mult(PX,PY,I,[])    :- len(PX,N1), len(PY,N2), N=N1+N2-2, I>N, !.
poly_mult(PX,PY,I,[Q|T]) :- coeff(PX,PY,I,0,Q), I1=I+1, poly_mult(PX,PY,I1,T). 
 
polymult(PX,PY,R) :- poly_mult(PX,PY,0,R).
 
poly_from_roots([X],[Y,1]) :- Y=-X.
poly_from_roots([X|T],Z) :- poly_from_roots(T,Q), X1=-X, polymult([X1,1],Q,Z).
poly_from_roots([1,2,3],Z)
Z=[-6,11,-6,1] что соответствует: https://www.cyberforum.ru/cgi-bin/latex.cgi?(x-1)(x-2)(x-3)={x}^{3}-6{x}^{2}+11x-6
0
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28
14.05.2015, 12:32  [ТС]
Цитата Сообщение от Black Fregat Посмотреть сообщение
Добавьте еще один предикат:
Код Prolog
1
2
create_polynom_for_dummy([], []) :- !.
create_polynom_for_dummy(X, Y) :- create_polynom(X, Y).
Получается что строчка №10 все также остается? Но мне нужно ее убрать, заменить на create_polynom([], []), но чтобы задача была также работоспособна. Простите за навязчивость.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
add_next_root(P, Z, PN) :-
    add_next_root_do(P, [0|P], Z, PN).
    
add_next_root_do([H1|T1], [H2|T2], Z, [H|T]) :-
    H is H1 - Z*H2,
    add_next_root_do(T1, T2, Z, T).
add_next_root_do([], [H2], Z, [H]) :-
    H is - Z*H2.
 
create_polynom([], [1]).
create_polynom([H|T], P) :-
    create_polynom(T, PT),
    add_next_root(PT, H, P).
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
15.05.2015, 03:10
Предикат create_polynom рекурсивный. Для того, чтобы получить правильный результат, нужна правильная база рекурсии. Строчка № 10 как раз эту базу и задаёт. Причём, правильно задаёт, поскольку рекурсия работает. Если Вы выбросите или измените строчку № 10, сломается всё. Может быть, Вы до конца не понимаете, но вычисление create_polynom для любого списка корней придёт к строчке № 10, чтобы к ее результату добавлять корни один за другим.

Я Вам показал путь для разрешения этого противоречия: обёртывающий предикат, который для пустого списка корней возвращает столь милый Вашему преподавателю "пустой полином". Он не пропустит Вас к строчке № 10. Но только для пустого списка корней. Все остальные списки корней будут передаваться в старый предикат и обрабатываться по-прежнему. С правильной строчкой № 10. Разумеется, этот путь предполагает, что вызывать Вы всегда будете именно обёртывающий предикат.

Напишите, пожалуйста. максимально подробно, чем именно Вас не устраивает наличие строчки № 10?

Добавлено через 6 минут
Вероятно, можно как-то извратиться и без строчки № 10. Например, дописать дополнительные строки в add_next_root, чтобы пустой полином воспринимался как единичный. Или сдвинуть базу рекурсии, явно выписав полином для одноэлементного списка корней.

Я просто не могу понять, зачем это нужно.
0
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 28
15.05.2015, 10:12  [ТС]
Не устраивает именно то, что нарушается логика задачи, т. е. получается что пустому списку корней соответствует непустой полином. Если идти в обходную как-то, добавляя create_polynom_for_dummy([], []), то проблема остается той же, то есть опять вопросы относительно логики create_polynom([], [1]). Не нравится человеку и все тут, просит "доработать". Я вас очень уважаю, спасибо, что пытаетесь помочь) но вот все не получается сдать эту задачу
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
15.05.2015, 20:42
Цитата Сообщение от Judy Посмотреть сообщение
Не устраивает именно то, что нарушается логика задачи, т. е. получается что пустому списку корней соответствует непустой полином
Логика задачи нарушается как раз Вашим требованием иметь "пустой" полином.
Вся Ваша трагедия в том, что Вы не можете понять алгебраическую сущность задачи и требуете странного.

Это примерно как требовать, чтобы произведение пустого списка было равно нулю.
Вроде как с житейской точки зрения логично, а вот с точки зрения математики логичной будет как раз единица.
А потом начинается - напишите мне такой факториал, чтобы для всех чисел был нормальный факториал, а в нуле был нуль.
И наступаем ровно на те же грабли: факториал любого числа при рекурсивном вычислении начинается от факториала нуля.

Добавлено через 4 минуты
Цитата Сообщение от Judy Посмотреть сообщение
все не получается сдать эту задачу
Вероятно, Вы просто не можете объяснить преподавателю, что строчка № 10 необходима для правильной работы рекурсии?

Хорошо, Вас устроит ранее предложенное?
Цитата Сообщение от Black Fregat Посмотреть сообщение
Вероятно, можно как-то извратиться и без строчки № 10. Например, дописать дополнительные строки в add_next_root, чтобы пустой полином воспринимался как единичный. Или сдвинуть базу рекурсии, явно выписав полином для одноэлементного списка корней.
Или опять начнётся
Цитата Сообщение от Judy Посмотреть сообщение
Не нравится человеку и все тут, просит "доработать".
?

Добавлено через 19 минут
Цитата Сообщение от Black Fregat Посмотреть сообщение
сдвинуть базу рекурсии,
Prolog
1
2
3
4
5
6
7
create_polynom([], []).
create_polynom([X], [1, Y]) :-
    !,
    Y is -X.
create_polynom([H|T], P) :-
    create_polynom(T, PT),
    add_next_root(PT, H, P).
Добавлено через 2 минуты
Цитата Сообщение от Black Fregat Посмотреть сообщение
дописать дополнительные строки в add_next_root
Prolog
1
2
3
4
5
add_next_root([], Z, [1, Y]) :-
    !,
    Y is -Z.
add_next_root(P, Z, PN) :-
    add_next_root_do(P, [0|P], Z, PN).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2015, 20:42
Помогаю со студенческими работами здесь

Значение коэффициентов полинома
Надо найти значение коэффициентов полинома, если использовать прямое произведение вектора коэффициентов на вектор x матлаб выдает одно...

Нахождение коэффициентов полинома
//Вычисляем коэффициенты полинома первой степени a= 1; a = -x; //цикл по числу полиномов for(int k=2;k<=n; k++) { //Вычисляем...

Расчет коэффициентов полинома
Добрый вечер. Буду благодарен если мне кто-то поможет. Подскажите пожалуйста как решить такую задачу: Расчет коэффициентов полинома ...

Расчет коэффициентов полинома(проверьте пожалуйста)
Добрый вечер. Помогите пожалуйста. Нужно решить такую задачу: Расчет коэффициентов полинома ...

Расчет коэффициентов полинома методом наименьших квадратов
Помогите, пожалуйста, с заданием. Рассчитать коэффициенты полинома y={a}_{m}{x}^{m}+{a}_{m-1}{x}^{m-1}+...+{a}_{1}x+{a}_{0} методом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru