社区
数据结构与算法
帖子详情
如何求解多个绝对值式子总和的最小值
dianyancao
2012-05-25 11:24:56
如上式,Xi,Yi,Zi为 n 组已知数据,
求解m1, m2, m3 可以将每个绝对值式子,根据|·| > 0,|·| < 0,|·| = 0三种情形分别处理
是否有更高效的方法,求解m1, m2, m3呢?
...全文
1304
11
打赏
收藏
如何求解多个绝对值式子总和的最小值
如上式,Xi,Yi,Zi为 n 组已知数据, 求解m1, m2, m3 可以将每个绝对值式子,根据|·| > 0,|·| < 0,|·| = 0三种情形分别处理 是否有更高效的方法,求解m1, m2, m3呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dianyancao
2012-06-01
打赏
举报
回复
CSDN肿么了,回复不显示…
,还好结贴页面能显示回复
______________________________________________________________
FancyMouse ()发表于:2012-05-31 03:13:15 10 楼 得分:
这个函数是凸函数。凸函数有通用的求最值的算法,不用展开abs。
______________________________________________________________
如何不展开abs,求解最值呢,不知下面的方法是否可行?
6楼的不等式组是将绝对值式中的除m1的其余部分先当作常量,
提取出m[1]的系数得到形如:
|a[1]|*|x + r[1]| + |a[2]|*|x + r[2]| + ... + |a[i]|*|x + r[i]| + ... |a[n]|*|x + r[n]|
的式子,则只需要将-r[1] <= -r[2] <= ... <= -r[i] <= ... <= -r[n]从小到大排列,即可求解m[1]
接着将r[i]代换成b[i] * m[2] + c[i],
索引排序使得b[1] >= b[2] >= ... >= b[i] >= ... >= b[n],
索引排序将每一个(c[j] - c[i]) / (b[i] - b[j])从小到大建立 1 到 n*(n-1)/2 的 bc索引,(i < j <= n)
则每一个 bc索引 = h(i,j)对应唯一的i,j
其中bc[h(i,j)] = (c[j] - c[i]) / (b[i] - b[j])
当m[2] <= bc[h(i,j)],则r[i] <= r[j]
当m[2] >= bc[h(i,j)],则r[i] >= r[j]
接着将c[i]代换成d[i]+e[i],根据 bc索引 的数据生成 bcbc索引,(m < n <= n*(n-1)/2)
则每一个 bcbc索引 = g(m,n) 对应唯一的h(i,j)[m], h(i,j)[n]
令每一个 P[h(i,j)] = (d[j] - d[i]) / (b[i] - b[j])
索引排序使得P[h(i,j)[1]] >= P[h(i,j)[2]] >= ... >= P[h(i,j)[n*(n-1)/2]],
令每一个 Q[h(i,j)] = (e[j] - e[i]) / (b[i] - b[j])
令每一个 bcbc[g(m,n)] = (Q[h(i,j)[n]] - Q[h(i,j)[m]]) / (P[h(i,j)[m]] - P[h(i,j)[n]]) , (m < n <= n*(n-1)/2)
索引排序使得bcbc[1] <= bcbc[2] <= ... <= bcbc[n*(n-1)/2 * (n*(n-1)/2 - 1) / 2]
当m[3] <= bcbc[g(m,n)],则bc[m] <= bc[n]
当m[3] >= bcbc[g(m,n)],则bc[m] >= bc[n]
接下来就得到6楼的联动不等式组,只需要对m[3]取最多(n*(n-1)/2 * (n*(n-1)/2 - 1) / 2) + 1个区间,
即可经过递推,展开abs。
如何根据这种联动的不等式组,求得m[1],m[2],m[3]的取值区间,使得最小化Sum呢?
FancyMouse
2012-05-31
打赏
举报
回复
这个函数是凸函数。凸函数有通用的求最值的算法,不用展开abs。
FancyMouse
2012-05-31
打赏
举报
回复
这个函数是凸函数。凸函数有通用的求最值的算法,不用展开abs。
FancyMouse
2012-05-31
打赏
举报
回复
这个函数关于三个变量都是凸函数。凸函数求数值最值有通用办法的,不用展开abs。
dianyancao
2012-05-29
打赏
举报
回复
Sum = a*m1 + b*m2 + c*m3 + d
dianyancao
2012-05-29
打赏
举报
回复
hnu_0720
2012-05-28
打赏
举报
回复
不要意思,没看清楚题目。
hnu_0720
2012-05-28
打赏
举报
回复
求解m1, m2, m3 可以将每个绝对值式子,根据|·| > 0,|·| < 0,|·| = 0三种情形分别处理
第一 大于0 只要有一个绝对值不等于0就可以了。
第二 小于0 不可能发生
第三 等于0 每个绝对值都等于0才发生,解方程就可以了。
HUNTON
2012-05-28
打赏
举报
回复
应该要提供其他的条件才可能判别是否有更简便的方法吧,不然就只能根据式子的正负去展开了。
FancyMouse
2012-05-26
打赏
举报
回复
L2模算起来方便。L1模的话还是需要用到凸函数的性质去二分(有些地方似乎叫三分?)
turing-complete
2012-05-25
打赏
举报
回复
这种不等式的方程,恐怕只能采用穷举法去一一断言了,符合条件的就留下了,不过这其中可以加上一些合理的剪枝算法,能够是搜索解集的过程更快一些。
数据挖掘学习之路四:Python去极值方法
#MAD(mean absolute deviation)又称为
绝对值
差中位数法,是一种先需计算所有因子与平均值之间的距离
总和
来检测离群值的方法. #处理的逻辑: #第一步,找出所有因子的中位数 Xmedian #第二步:得到每个因子与中位数...
python求列表最大值,
最小值
,和
第二行有n个数,为给定的n个数,每个数的
绝对值
都小于10000。 输出格式 输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的
最小值
,第三行表示这些数的和。 样例输入 5 1 3 -2 4 5 ...
给出n个数,找出这n个数的最大值,
最小值
,和。
第二行有n个数,为给定的n个数,每个数的
绝对值
都小于10000。 输出格式 输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的
最小值
,第三行表示这些数的和。 样例输入 5 1 3 -2 4 5 ...
python求
绝对值
_python求
绝对值
广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!获取 python 版本的方法:linux shell$python -vpython 2. 7.11windows cmdd:> python -vpython 2. ...
sql 常用函数
总和
ABS(x) 返回x的
绝对值
BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e(自然对数的底)的x次方 FLOOR(x) 返回小于x的最大整数值 GREATEST...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章