社区
数据结构与算法
帖子详情
如何求解多个绝对值式子总和的最小值
dianyancao
2012-05-25 11:24:56
如上式,Xi,Yi,Zi为 n 组已知数据,
求解m1, m2, m3 可以将每个绝对值式子,根据|·| > 0,|·| < 0,|·| = 0三种情形分别处理
是否有更高效的方法,求解m1, m2, m3呢?
...全文
1377
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
打赏
举报
回复
这种不等式的方程,恐怕只能采用穷举法去一一断言了,符合条件的就留下了,不过这其中可以加上一些合理的剪枝算法,能够是搜索解集的过程更快一些。
matlab模糊聚类算法进行图像分割的源程序
与传统的硬聚类不同,模糊聚类允许每个数据点属于
多个
簇,并且具有一个介于0到1之间的隶属度来表示该数据点对各个簇的归属程度。模糊C均值(FCM)是最常见的模糊聚类算法之一,在图像处理、医学诊断等
多个
领域有着...
模糊聚类-matlab实现
模糊聚类的优点在于它能够提供更灵活的数据分配,使得一个数据点可以同时属于
多个
类别,且在各个类别的归属程度不同。这在处理边界模糊、类间过渡区明显的问题时特别有用。在MATLAB中实现模糊聚类,可以充分利用其...
python求列表最大值,
最小值
,和
第二行有n个数,为给定的n个数,每个数的
绝对值
都小于10000。 输出格式 输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的
最小值
,第三行表示这些数的和。 样例输入 5 1 3 -2 4 5 ...
给出n个数,找出这n个数的最大值,
最小值
,以及这些数字的和
第二行有n个数,为给定的n个数,每个数的
绝对值
都小于10000。输出格式输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的
最小值
,第三行表示这些数的和。 #include //求和函数 void he...
给出n个数,找出这n个数的最大值,
最小值
,和。
第二行有n个数,为给定的n个数,每个数的
绝对值
都小于10000。 输出格式 输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的
最小值
,第三行表示这些数的和。 样例输入 5 1 3 -2 4 5 ...
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章