2014 dxdy logo

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

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




На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 12  След.
 
 Re: Программирование для математиков: класс Polynomial
Сообщение19.11.2018, 19:23 
Аватара пользователя
realeugene в сообщении #1354895 писал(а):
С пользой от Матлаба согласен. Но для некоторых он слишком дорог. Или рискован.

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

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

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

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение24.11.2018, 17:50 
Аватара пользователя
VTsalyuk в сообщении #1356509 писал(а):
Что-то Xaositect пропал.
Извините, тогда работа затянулась, а потом нашлись другие занятия.

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

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

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение30.01.2019, 13:29 
Принялся за изучение советов от photon'а.

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

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

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

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение30.01.2019, 19:22 
Аватара пользователя
Вот чуть-чуть более общий случай - для необязательно 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 
Появилась новая версия 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 
Аватара пользователя
VTsalyuk в сообщении #1385460 писал(а):
К счастью, для однотипных слагаемых есть еще и std::plus<>()
Да, согласен, в данном конкретном случае сложения это хороший вариант, приведенный мной вариант - более общий, предполагающий возможные изменения.

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

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение02.04.2019, 16:52 
Аватара пользователя
VTsalyuk в сообщении #1385460 писал(а):
Я бы не стал грузить математика лямбда-функциями.

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение02.04.2019, 17:22 
Аватара пользователя
Munin в сообщении #1385529 писал(а):
Для математика-то лямбда-функции - это легко. Вот для программиста...
Почти всегда (в том числе в данном случае) под лямбда-функциями понимаются анонимные замыкания. С лямбда-исчислением они конечно связаны, но (особенно в императивных языках) весьма косвенно.

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 12:04 
Там же новая версия 19.04.03 архива. Просто поправлены тексты (документов, имею в виду :-).

-- 03.04.2019, 12:07 --

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 13:57 
Аватара пользователя
VTsalyuk в сообщении #1385697 писал(а):
Если Polynomial хранит коэффициенты в vector, то как с помощью transform осуществить сложение многочленов разной степени?

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 15:33 
photon в сообщении #1385721 писал(а):
Например, в результирующий вектор скопировать более длинный вектор, а затем трансформом добавить более короткий.
Наверное, наоборот? Скопировать более короткий, а затем добавить длинный.

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 15:37 
Аватара пользователя
warlock66613 в сообщении #1385743 писал(а):
Наверное, наоборот? Скопировать более короткий, а затем добавить длинный.

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

 
 
 
 Re: Программирование для математиков: класс Polynomial
Сообщение03.04.2019, 16:27 
Аватара пользователя
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 в данном случае)

 
 
 [ Сообщений: 168 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 12  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group