问题描述

给定几个数xix_ixi​确定凸组合系数λi\lambda_iλi​,组成一个给定的数xxx。
∑λixi=x\sum \lambda_ix_i=x∑λi​xi​=x
s.t.∑λi=1s.t. \sum\lambda_i=1s.t.∑λi​=1
0≤λi≤10\le\lambda_i\le10≤λi​≤1

例如:给定{1,2,3,4},现在给定2.5,现在要由这4个数凸组合成2.5,求出凸组合系数,如果不唯一,给出一个就好了。

比如上面可以是0*1+0.5*2+0.5*3+0*4=2.5,由于是凸组合所以还要满足系数在[0,1]之间,而且和为1。

程序实现

一个简单版的实现如下:

import numpy as np
def convex(lis,x):minl=np.min(lis)maxl=np.max(lis)if(x<minl or x >maxl):print("error,cant express x")return 0lisl=np.sort(lis)f=(maxl-x)/(maxl-minl)return [f,1-f]


即1/3 * 1 + 2/3 *4=3。

不过,上面那个过于简单,就是利用首尾最大值和最小值来凸组合,一下子就求出来了。中间的值没有理会。

下面我们为了让效果好一些,也利用上中间的数。

初步想法是将两端的数都减少,分给中间。

def convex(lis,x):minl=np.min(lis)maxl=np.max(lis)if(x<minl or x >maxl):print("error,cant express x")return 0lisl=np.sort(lis)f1=(maxl-x)/(maxl-minl)max2l=lisl[len(lisl)-2]min2l=lisl[0+1]#我们发现3在这个之间,所以可以再来一次。f2=(max2l-x)/(max2l-min2l)return [f1/2,f2/2,(1-f2)/2,(1-f1)/2]

即1/6 * 1 + 0 * 2+ 0.5 * 3 + 2/6 * 4=3。

完美。


当然啦,如果站在解方程组的角度当然求解这个问题更加全面,可以求得所有凸组合系数。但是复杂度比较高,有的时候,我们只是需要一个解而已,没必要调用求解线性方程组的函数来。

∑λixi=x\sum \lambda_ix_i=x∑λi​xi​=x
s.t.∑λi=1s.t. \sum\lambda_i=1s.t.∑λi​=1
0≤λi≤10\le\lambda_i\le10≤λi​≤1

程序实现:由给定几个数确定凸组合系数,组成一个给定的数相关推荐

  1. 关于计算方差的c语言程序,C语言:计算并输出给定10个数的方差。

    //计算并输出给定10个数的方差. 1 #include 2 #include 3 double fun(double x[10]) 4 { 5     double p = 0.0,f=0.0,g= ...

  2. 给定一个数t,以及n个整数,在这n个数中找到加和为t的所有组合

    [题目]给定一个数t,以及n个整数,在这n个数中找到加和为t的所有组合,例如t = 4, n = 6,这6个数为 [4, 3, 2, 2, 1, 1],这样输出就有4个不同的组合它们的加和为4: 4, ...

  3. 给定两个数r和n_输出r的n次方 java_滴滴出行2018编程题

    [编程题] CIDR去重 时间限制:1秒 空间限制:65536K 无类别域间路由(CIDR)是一个用于对IPV4地址进行分类表述的方法.CIDR 路由描述的IP地址组的子网mask长度是可变长度, 例 ...

  4. Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开

    6.26(回文素数)回文素数是指一个数同时为素数和回文数.编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开 题目描述与运行示例 代码 题目描述与运行示例 6.26(回文素数) ...

  5. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  6. 判断一个整数是否为素数。本题要求编写程序,判断一个给定的整数是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

    #include <stdio.h> #include <stdlib.h> #include <stdio.h> /* 本题要求编写程序,判断一个给定的整数是否为 ...

  7. 322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每

    零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 你可以认为每种硬币的数量 ...

  8. 完全平方数:若一个整数n能表示成某个整数m的平方的形式,则称这个数为完全平方数。写一个程序判断输入的整数是不是完全平方数。

    标题 完全平方数 类别 基本计算 时间限制 1S 内存限制 256Kb 问题描述 若一个整数n能表示成某个整数m的平方的形式,则称这个数为完全平方数.写一个程序判断输入的整数是不是完全平方数. 输入说 ...

  9. 【c语言作业-二维数组】编写程序,求一个给定的n阶方阵的鞍点。

    [问题描述] 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点. [输入形式] 输入第一行给出一个正整数n(1≤ ...

最新文章

  1. 计算机合并键功能,Word组合(功能键与Ctrl等组合) -电脑资料
  2. linux命令行输入下一行但不运行命令
  3. MATLAB数据分析3
  4. Andorid Binder进程间通信---总结
  5. 关于vue父子组件之间事件触发及数据传递问题
  6. CPU性能参数的含义
  7. ubuntu 修改默认用户名_Tars框架在Ubuntu上的部署小结
  8. LabView常用快捷键
  9. cad四级计算机考试,国家CAD等级考试(AutoCAD_II).doc
  10. javascript代码混淆的原理
  11. c语言 格雷码构造问题,格雷码剖析
  12. 如何实现单行/多行文本溢出的省略样式?
  13. linux 中gnu的含义是,GNU是什么意思
  14. tv端h5_最新版H5双端影视APP源码
  15. 图片择优算法(模糊图片筛选出最清楚的图片) 没有使用第三方库
  16. teredo实现ipv4公网环境下接入ipv6
  17. DevExpress中动态设置主题、皮肤
  18. 阿里出品,Excel 操作利器:easy-excel
  19. 【元宇宙欧米说】三维视觉艺术:未来元宇宙设计的表现形式
  20. 数据库综合实验——网上书店管理系统

热门文章

  1. 智源研究院发布“智能信息检索与挖掘”重大方向,打造北京学派,联合攻关“个人智能信息助手”关键科学问题...
  2. 他十年前的书在前端圈人手一本,豆瓣评分9.1。现在,王者归来了!
  3. 这几本豆瓣高分设计好书,人人都应该读!
  4. 寻找优秀的程序员之实战指南-1
  5. matplotlib命令与格式:图像(figure)与子区域(axes)布局与规划
  6. 用深度学习就不怕买到山寨奢侈品?LeCun投了这样一家公司
  7. 赠书 | 元宇宙:开启未来世界的六大趋势
  8. 把握数据,驱动未来 | 清华大学大数据研究中心2020年RONG奖学金答辩会成功举办...
  9. Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来!(附代码)...
  10. 数据科学研究院第四届“院长接待日”成功举办