Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/91: Рейтинг темы: голосов - 91, средняя оценка - 4.89
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 19:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от vittiv Посмотреть сообщение
Я знаю, что это примитивно, но я так делаю поскольку я четко вижу динамику
В том то и дело, что истинную ошибку не видно. Её можно только оценить. Использование норм позволяет оценить верхнюю границу ошибки, больше которой она быть никак не может, хотя меньше - вполне. Никто ничего другого не придумал. Единственное, что можно выбрать - это саму норму. Вместо евклидовой нормы, которая используется в алгоритме, можно взять максимальную. Тогда будет найдена максимальная ошибка, которую не сможет превзойти ни один коэффициент уравнения.

Ну и по поводу регуляризации, которая может понадобиться в случае вырожденной или плохообусловленной матрицы. Идея этого метода основа на том, что иногда выгодно изменить систему так, чтобы обусловленность матрицы улучшилась, пусть даже за счёт увеличения невязки. Ведь ошибка решения определяется произведением числа обусловленности матрицы и нормы невязки. Поэтому, если невязка увеличиться в 10 раз, а число обусловленности уменьшится в 1000, то как не парадоксально, точность решения повысится в 100 раз. Но этого будет невидно, т.к. увеличение наблюдаемой невязки воспринимается как потеря точности.
Чаще всего используется L2 регуляризация. Реализовать её очень просто. Для этого, к диагонали ковариационной матрицы нужно добавить небольшую постоянную, например так:
Matlab M
1
[x, err]=Iter_Solve(A+1e-6*eye(size(A,1), b, x, 100);
эту постоянную нужно подобрать так, чтобы результирующая ошибка err была минимальной. В таком виде алгоритм будет сходится обязательно.

Добавлено через 3 часа 20 минут
Исправлено
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2020, 19:53
Ответы с готовыми решениями:

точность возвращения функции long double
есть число a long double надо написать чтобы фунция возвращала число до 25 знака после запятой то есть return a.%25; (как...

Как обойтись без float, double, long double?
К примеру мне надо в программе использовать что-то вроде -0,00000000000003626686812 и 0,00000000000002072392464. Притом чтобы считалось...

Чем различаются long long и long double?
long long или long double

156
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 22:00
Цитата Сообщение от Alexis333 Посмотреть сообщение
Вот алгоритм, который не требует диагонального преобладания матрицы системы.
Результат такой решение СЛАУ методами с двойной точностью, чертверной точностью и методом итераций дают абсолютно одинаковую ошибку.

во время выполнения итерация err = 1e10 это много?

Добавлено через 17 минут
В качестве начального приближения я взял результат решения СЛАУ с двойной точностью.

Получается немного не то, что ожидалось: с ростом длины полинома ошибка веса монома увеличивается сильнее, чем растет ошибка масштабирования. Т.е. хоть матрица и плохо обусловлена ошибка результата решения СЛАУ не так сильно сказывается на ошибку масштабирования.
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 22:14
А какая в итоге получается
Matlab M
1
norm(S*x-K(:,j))
Добавлено через 1 минуту
Цитата Сообщение от vittiv Посмотреть сообщение
err = 1e10 это много?
вообще то, она должна быть меньше единицы

Добавлено через 3 минуты
vittiv, у Вас там вычисляется число w, посчитайте
Matlab M
1
norm(w,inf)
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 22:25
Цитата Сообщение от Alexis333 Посмотреть сообщение
norm(S*x-K(:,j))
от 0.0001 до 0.001
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 22:33
Лучше, конечно было написать через запятую inf чтобы посмотреть бесконечную норму. Но даже с этим результатом, норма невязки 1E-4, число обусловленности 1E17. Получается, норма ошибки вектора x где то 1E13. У Вас 30 тыс. коэффициентов, делим на корень из этого числа, и как раз получает 1E10. Это значит, что ошибки Вашего решения могу на 10 порядков превышать вычисленные значения. Т.е. очень странно, как у Вас вообще, что то работает.

Попробуйте регуляризованное решение.

Цитата Сообщение от Alexis333 Посмотреть сообщение
Для этого, к диагонали ковариационной матрицы нужно добавить небольшую постоянную, например так:
Matlab M
Выделить код

Matlab M
1
[x, err]=Iter_Solve(A+1e-6*eye(size(A,1), b, x, 100);
По идее, ошибка должна резко уменьшиться.
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 22:37
Цитата Сообщение от Alexis333 Посмотреть сообщение
norm(w,inf)
2.704991493374109e-04

Добавлено через 1 минуту
Цитата Сообщение от Alexis333 Посмотреть сообщение
Попробуйте регуляризованное решение.
при 1e-6 ничего не изменилось

сейчас пробую 1е-3
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 22:41
Ну всё равно, ошибка очень большая. Это даже и решением назвать нельзя. 2.704991493374109e-04 это не ошибка решения x, а невязка, при переходе к x она увеличивается в 1E17 раз, благодаря очень прлохообусловленной матрице. Но, по идее, в арифметике повышенной точности norm(w,inf) должна стать намного меньше, тогда, возможно, ошибка сильно уменьшится.
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 22:44
Цитата Сообщение от Alexis333 Посмотреть сообщение
Вас вообще, что то работает
веса при этом меняются в 7ом знаке после запятой

Добавлено через 1 минуту
Цитата Сообщение от Alexis333 Посмотреть сообщение
в арифметике повышенной точности
разница в весах в 5ом порядке после запятой. На ошибку это не влияет.

Добавлено через 1 минуту
Цитата Сообщение от vittiv Посмотреть сообщение
сейчас пробую 1е-3
теперь norm(S*x-K(:,j)) = 1е12
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 22:48
Цитата Сообщение от vittiv Посмотреть сообщение
разница в весах в 5ом порядке после запятой. На ошибку это не влияет
Уточните, это в итеративном алгоритме, или при вычислении прямым методом?
И сколько Вы выполняете итераций? возможно нужно продолжить, до тех пор, пока ошибка не перестанет уменьшаться

Добавлено через 58 секунд
Цитата Сообщение от vittiv Посмотреть сообщение
теперь norm(S*x-K(:,j)) = 1е12
Хорошо, а cond(S) сколько?

Добавлено через 1 минуту
Имеется в виду cond(S+1e-3*eye())
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 22:50
Цитата Сообщение от Alexis333 Посмотреть сообщение
Уточните, это в итеративном алгоритме, или при вычислении прямым методом?
при коэффициенте регуляризации = 1e-3 ошибка в весах все-равно в 7 знаке

В интерактивном. количество итераций 10. До этого было 100 - ничего не изменило это.
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 23:00
Цитата Сообщение от vittiv Посмотреть сообщение
веса при этом меняются в 7ом знаке после запятой
если старшие веса от итерации к итерации не меняются, это не значит что они верны,
это всего лишь значит, что они приняли установившиеся значения и дальше меняться не будут

Цитата Сообщение от Alexis333 Посмотреть сообщение
теперь norm(S*x-K(:,j)) = 1е12
это в любом случае много, нужно подобрять такуя константу, чтобы
Matlab M
1
norm((S+k*eye(size(S,1)))*x-K(:,j))*cond(S+k*eye(size(S,1)))
стало минимальным
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 23:14
Цитата Сообщение от Alexis333 Посмотреть сообщение
Но, по идее, в арифметике повышенной точности norm(w,inf) должна стать намного меньше
0.0002609853938398113897221272635331765

было

2.704991493374109e-04

т.е. стала меньше, но не намного.
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 23:19
Вот Вам и хвалёная арифметика. Вы же vittiv, понимаете, что невязка в ней должна уменьшиться на несколько порядков. А тут ничего практически не меняется. В чём же тогда эта точность проявляется?
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 23:20
Цитата Сообщение от Alexis333 Посмотреть сообщение
это в любом случае много, нужно подобрять такуя константу, чтобы
на ночь поставлю считать с маленьким шагом
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 23:20
А у Вас система то хоть совместная?
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 23:21
Цитата Сообщение от Alexis333 Посмотреть сообщение
В чём же тогда эта точность проявляется?
Да... или я получаю точный результат или что-то не то происходит....
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
04.09.2020, 23:40
Если система переопределённая, то у неё есть остаточная невязка. Возможно 2.704991493374109e-04 это она и есть. В таком случае её вообще ничем не уменьшить. Арифметика повышенной точности ничего не даст.

Добавлено через 14 минут
Цитата Сообщение от vittiv Посмотреть сообщение
Да... или я получаю точный результат или что-то не то происходит...
если результат точный, то K точно равно S*x, а cond(S)=1. В Вашем случае это далеко не так
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
04.09.2020, 23:49
Запустил перебор коэффициента регуляризации от 0.1 до 1е-6. Завтра отпишусь.

Цитата Сообщение от Alexis333 Посмотреть сообщение
если результат точный, то K точно равно S*x, а cond(S)=1. В Вашем случае это далеко не так
может это cond(S) находится с ошибкой ит S*x-K тоже? Уж как-то прилипли веса к своим значениям...

Цитата Сообщение от vittiv Посмотреть сообщение
Запустил перебор коэффициента регуляризации от 0.1 до 1е-6. Завтра отпишусь.
В результате оказалось, что коэффициент регуляризации должен быть очень большим. Я попробовал 1е8 и только тогда увидел эффект (снижении точности). Теперь между 1е8 и 1е1 надо найти оптимум (если он есть).

Также, оказалось, что методом QR разложения СЛАУ решается немного точнее. Чуть позже цифры дам.

Но тут есть проблема. Сейчас я матрицу S получаю методом накопления: S=S1+ S2 + ...S100 поскольку из-за 2х млн наблюдений я не могу сразу найти S, я разбиваю 2 млн по 20 тысяч и нахожу для каждого фрагмента свое Si и затем складываю их.

Как я понимаю, подобное сложение Q и R компонент для каждой маленькой выборки невозможно? Я планировал накапливать Qi и Ri. Т.е. для QR разложения мне все-таки надо сначала найти S и только потом зная S найти Q и R? Никак нельзя накапливать Qi и Ri?
0
495 / 542 / 131
Регистрация: 31.10.2016
Сообщений: 4,388
05.09.2020, 12:43
Цитата Сообщение от vittiv Посмотреть сообщение
Также, оказалось, что методом QR разложения СЛАУ решается немного точнее
Да, это самый точный среди прямых методов, но вместе с тем и самый трудоёмкий. Но мне казалось, при использовании "" matlab сам должен выбирать этот метод. Но итеративным методам в точности он всё же проигрывает. Где то была книга с оценками точности для разных методов решения СЛАУ, но к сожалению, пока никак её не найду.
0
9 / 1 / 0
Регистрация: 08.09.2019
Сообщений: 343
05.09.2020, 13:04
Никак не могу разобраться с lasso
Вот код из хелпа + моя добавка:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
load acetylene
X = [x1 x2 x3];
D = x2fx(X,'interaction');
B=lasso(D,y,'CV',10);
 
bo=D\y;
yo=D*bo;
 
yi=D*B
 
sum(abs(yo-y))
sum(abs(yi-y))'
yo=12.0471 в то время, как лучшее значение найденное lasso min(yi)=131.8

Получается, что прямое решение в 10 раз точнее lasso? Что не так?

Добавлено через 5 минут
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
load acetylene
X = [x1 x2 x3];
D = x2fx(X,'interaction');
B=lasso(D,y,'Alpha',0.01);
 
bo=D\y;
yo=D*bo;
 
yi=D*B
 
sum(abs(yo-y))
sum(abs(yi-y))'
Так в 5 раз точнее чем lasso...

yo=12.0471 в то время, как лучшее значение найденное lasso min(yi)=68.1924
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2020, 13:04

Как увеличить точность?
Подскажите, как в коде увеличить точность вычислений? Пробовал с помощью TOL, но не получилось Необходимая точность: 10^-6

Как увеличить точность вычисления
Всем добрый день) Как увеличить точность вычисления? к примеру матлаб считает что I= 6.7000e-007,а маткад I=8.39627912393174e-22 ...

Точность расчетов в Maple
Можно ли в Maple задать двойную точность расчетов ( аналог двойной точности в фортране)? Я так понимаю, что есть команда Digits и команда...

Повысить точность расчетов
Здравствуйте. Задача умозрительная, если мне нужно получить точность 40 и до неприличия разрядов после запятой, какой тип переменных...

Почему перестает работать программа при замене double на long double?
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете, запустил - все работает, но когда решил...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru