社区
数据结构与算法
帖子详情
如何求解多个绝对值式子总和的最小值
dianyancao
2012-05-25 11:24:56
如上式,Xi,Yi,Zi为 n 组已知数据,
求解m1, m2, m3 可以将每个绝对值式子,根据|·| > 0,|·| < 0,|·| = 0三种情形分别处理
是否有更高效的方法,求解m1, m2, m3呢?
...全文
1359
11
打赏
收藏
如何求解多个绝对值式子总和的最小值
如上式,Xi,Yi,Zi为 n 组已知数据, 求解m1, m2, m3 可以将每个绝对值式子,根据|·| > 0,|·| < 0,|·| = 0三种情形分别处理 是否有更高效的方法,求解m1, m2, m3呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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模糊聚类算法进行图像分割的源程序
matlab模糊聚类算法进行图像分割的源程序,适合进行图像分割的学者
模糊聚类-matlab实现
利用matlab程序实现模糊聚类,有需要的朋友可以下载下来研究下,很不错哦。
数据挖掘学习之路四:Python去极值方法
1. MAD #MAD(mean absolute deviation)又称为
绝对值
差中位数法,是一种先需计算所有因子与平均值之间的距离
总和
来检测离群值的方法. #处理的逻辑: #第一步,找出所有因子的中位数 Xmedian #第二步:得到每个因子与中位数的绝对偏差值 Xi?Xmedian #第三步:得到绝对偏差值的中位数 MAD #第四步:确定参数 n,从而确定合理的范围为 [Xmedian?nMAD,Xmedian+nMAD],并针对超出合理范围的因子值做如下的调整 #超出最大值的用最大值代替,小于
最小值
的用
最小值
代替。 def filter_extreme_MAD(series,n):
python求列表最大值,
最小值
,和
问题描述 给出n个数,找出这n个数的最大值,
最小值
,和。 输入格式 第一行为整数n,表示数的个数。 第二行有n个数,为给定的n个数,每个数的
绝对值
都小于10000。 输出格式 输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的
最小值
,第三行表示这些数的和。 样例输入 5 1 3 -2 4 5 样例输出 5 -2 11 n = int(input()) x = list(map(int,input().split())) a = max(x) b =
给出n个数,找出这n个数的最大值,
最小值
,以及这些数字的和
问题描述给出n个数,找出这n个数的最大值,
最小值
,和。输入格式第一行为整数n,表示数的个数。第二行有n个数,为给定的n个数,每个数的
绝对值
都小于10000。输出格式输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的
最小值
,第三行表示这些数的和。 #include //求和函数 void he(int a[],int n) { int sum=0; int i; f
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章