2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10, 11  След.
 
 Re: Программирование для математиков: класс Polynomial
Сообщение19.11.2018, 19:23 
Экс-модератор
Аватара пользователя


23/12/05
10982
realeugene в сообщении #1354895 писал(а):
С пользой от Матлаба согласен. Но для некоторых он слишком дорог. Или рискован.

В большинстве случаев переносимо в Octave, хотя есть нюансы... Лично я Octave иногда использую, но не люблю.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение24.11.2018, 17:37 


24/08/18
29
Что-то Xaositect пропал. Господа знатоки и пропагандисты настоящего C++, огромная к вам просьба:
кто-нибудь напишите как_надо минимальный набор конструкторов, деструктор, operator= и operator* (можно привести в приличный вид один из моих алгоритмов). Хочу показать студентам... А самому изучать... уже плотно занят другими вещами. Можно прислать в ЛС только код. Уж комментарии, с точки зрения новичка, я как-то обеспечу. И помещу в документы архива, со ссылкой на автора, естественно.

Как пишут на форумах, зараннее благодарю.

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

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение24.11.2018, 17:50 
Заслуженный участник
Аватара пользователя


06/10/08
6119
VTsalyuk в сообщении #1356509 писал(а):
Что-то Xaositect пропал.
Извините, тогда работа затянулась, а потом нашлись другие занятия.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение26.11.2018, 17:05 
Экс-модератор
Аватара пользователя


23/12/05
10982
VTsalyuk в сообщении #1356509 писал(а):
Хочу показать студентам... А самому изучать... уже плотно занят другими вещами. Можно прислать в ЛС только код. Уж комментарии, с точки зрения новичка, я как-то обеспечу.

Зачем? Изучать сами вы не хотите, а писать для вас еще один вариант, который ничем принципиально (в плане прогресса вашего знания С++) не будет отличаться от того, что уже есть готовое, большого смысла нет. Ссылку на готовые решения вам давали выше. Выбирайте себе по вкусу и добавляйте комментарии.

PS Жаль студентов.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение30.01.2019, 13:29 


24/08/18
29
Принялся за изучение советов от photon'а.

Сейчас нет доступа к учебникам... Подскажите, пожалуйста.

Есть два vector<int> одинакового размера. Как осуществить их сложение с помощью std::transform()? Никак не найду, как объяснить компилятору, какую BinaryOperation bop надо применить.

Для результата есть третий vector<int>.

Cпасибо, кажется нашел у Того, Кто знает все.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение30.01.2019, 19:22 
Экс-модератор
Аватара пользователя


23/12/05
10982
Вот чуть-чуть более общий случай - для необязательно int.
Используется синтаксис C++
    using T1 = int;
    using T2 = float;
    std::vector<T1> v1{1, 2, 3, 4, 5};
    std::vector<T2> v2{1.f, 2.f, 4.f, 8.f, 16.f};
    std::vector<std::common_type<T1, T2>::type> result(v1.size());

    std::transform(v1.cbegin(), v1.cend(), v2.cbegin(), result.begin(), [](T1 const& item1, T2 const& item2) { return item1 + item2; });

    for (auto const& item : result)
    {
        std::cout << item << std::endl;
    }
 

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение02.04.2019, 11:00 


24/08/18
29
Появилась новая версия Polynomial.zip 19.04.02 (https://yadi.sk/d/ld3T0Fvv_Oz6-Q) Архив немного реорганизован. Класс немного доработан.

Я потратил много времени на изучение и анализ нескольких примеров разработок из GitHub.com... Я же не зря просил написать мне пример класса, хотя бы неполный, но правильно реализованный: безопасный и эффективный. Изученные мною примеры не являются ни безопасными, ни тем более эффективными. Отчет -- в новых документах CppVector.pdf (рассмотрены 3 примера нешаблонных классов) и CppTemplateA.pdf (5 примеров шаблонов). Сначала я планировал выпустить их в виде части отчета о собственной попытке написать классовый шаблон, но очень уж они разрослись, поэтому лучше их выпустить в виде самостоятельных документов.

А вот попыткой переписать класс в шаблонный занялся всерьез -- точнее, это будет наследственная иерархия шаблонов. По возможности, не повторяя глупостей рассмотренных примеров из GitHub, а придумывая свои собственные новые. Надеюсь, это будет полезный опыт для начинающих проектировщиков.

-- 02.04.2019, 11:12 --

photon
1. Я бы не стал грузить математика лямбда-функциями. Но тут могут быть разные мнения. К счастью, для однотипных слагаемых есть еще и std::plus<>()

2. Чисто для меня. А как продолжить вот это
Код:
    using T1 = int;
    std::vector<T1> v1{1, 2, 3, 4, 5};
    std::vector<T1> v2{1, 2, 4};


Если речь идет о чисто векторах, для математика это бессмыслица. Но если это коэффициенты многочленов, то вопрос актуален.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение02.04.2019, 14:52 
Экс-модератор
Аватара пользователя


23/12/05
10982
VTsalyuk в сообщении #1385460 писал(а):
К счастью, для однотипных слагаемых есть еще и std::plus<>()
Да, согласен, в данном конкретном случае сложения это хороший вариант, приведенный мной вариант - более общий, предполагающий возможные изменения.

VTsalyuk в сообщении #1385460 писал(а):
Я бы не стал грузить математика лямбда-функциями.
А вот с этим не согласен категорически. Сейчас, по роду моей деятельности, почти все кругом - профессиональные программисты, пишущие продакшн-код, и, по моей оценке, среди знакомых коллег примерно треть - выпускники мехматов разных вузов - больше чем тех, кого вроде бы как готовили изначально стать программистами, так что не стоит смотреть на математиков как на недопрограммистов - многие из них, вероятно, станут потом профессиональными программистами.

VTsalyuk в сообщении #1385460 писал(а):
2. Чисто для меня. А как продолжить вот это
Не совсем понимаю ваш вопрос. Тут я просто инициализировал векторы какими-то числами, чтобы было с чем делать transform. Как они будут заполняться в программе и какой в них заложен смысл - тут было неважно, идея была показать transform, о котором вы спросили.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение02.04.2019, 16:52 
Заслуженный участник
Аватара пользователя


30/01/06
68748
VTsalyuk в сообщении #1385460 писал(а):
Я бы не стал грузить математика лямбда-функциями.

Для математика-то лямбда-функции - это легко. Вот для программиста...

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение02.04.2019, 17:22 
Заслуженный участник
Аватара пользователя


16/07/14
3015
Москва
Munin в сообщении #1385529 писал(а):
Для математика-то лямбда-функции - это легко. Вот для программиста...
Почти всегда (в том числе в данном случае) под лямбда-функциями понимаются анонимные замыкания. С лямбда-исчислением они конечно связаны, но (особенно в императивных языках) весьма косвенно.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 12:04 


24/08/18
29
Там же новая версия 19.04.03 архива. Просто поправлены тексты (документов, имею в виду :-).

-- 03.04.2019, 12:07 --

photon
Это был уже следующий вопрос. Формулирую его четче. Если Polynomial хранит коэффициенты в vector, то как с помощью transform осуществить сложение многочленов разной степени?
(Я тут высказался в одном месте, но опасаюсь, что могу быть неправ, и есть неучтенные мной возможности.)

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 13:57 
Экс-модератор
Аватара пользователя


23/12/05
10982
VTsalyuk в сообщении #1385697 писал(а):
Если Polynomial хранит коэффициенты в vector, то как с помощью transform осуществить сложение многочленов разной степени?

Реализовать можно по-разному. Например, в результирующий вектор скопировать более длинный вектор, а затем трансформом добавить более короткий.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 15:33 
Заслуженный участник
Аватара пользователя


02/08/11
5492
photon в сообщении #1385721 писал(а):
Например, в результирующий вектор скопировать более длинный вектор, а затем трансформом добавить более короткий.
Наверное, наоборот? Скопировать более короткий, а затем добавить длинный.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 15:37 
Экс-модератор
Аватара пользователя


23/12/05
10982
warlock66613 в сообщении #1385743 писал(а):
Наверное, наоборот? Скопировать более короткий, а затем добавить длинный.

Нет. Длина результирующего вектора будет равна длине более длинного. Его копируем, а потом к соответствующим элементам добавляем элементы короткого.

 Профиль  
                  
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 16:27 
Заслуженный участник
Аватара пользователя


16/07/14
3015
Москва
photon в сообщении #1372968 писал(а):
Используется синтаксис C++
 std::vector<std::common_type<T1, T2>::type> result(v1.size());
std::transform(v1.cbegin(), v1.cend(), v2.cbegin(), result.begin(), [](T1 const& item1, T2 const& item2) { return item1 + item2; });

Тогда уж
Используется синтаксис C++
    std::vector<std::result_of<std::plus<void>(T1, T2)>::type> result(v1.size());
    std::transform(v1.cbegin(), v1.cend(), v2.cbegin(), result.begin(), std::plus<void>());

(правда я очень сомневаюсь в осмысленности transform в данном случае)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 161 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10, 11  След.

Модераторы: Karan, PAV, Toucan, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group