- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有常数 A、B、C 和 N,我想弄清楚如何“混合”A、B 和 C 的数量以创建 N 的平均值。
在公式中,它看起来像这样:
(xA + yB + zC)/(x+y+z) = N
我如何计算出 x、y、z 的值?
编辑:我不是在寻找一个有限的解决方案,我在寻找一个最适合的算法,它将返回 x、y 和 z 之和的最低值。
最佳答案
我觉得你的问题很有道理。处理此类问题的一种方法是寻找最小长度的解决方案(p1,p2,p3)
。这样做有一个明确的程序,它会给出一个明确的、单一的结果。假设我们的系统是
|A B C| |p1| |N|
|1 1 1| |p2| = |1|
|p3|
其中p1, p2, p3
是混合中A, B, C
的三个权重。我们可以将这三个矩阵命名如下
|A B C| |p1| |N|
M = |1 1 1|, x = |p2|, y = |1|
|p3|
然后构造M的伪逆,求解方程如下:
x = M^T (M M^T)^{-1} y
向量 x
然后求解系统,并且是求解该方程组的最小长度向量。上面的方程可以通过拉格朗日乘数计算得到,但你不需要知道它就可以使用它。
在你的情况下,我手工计算了一点难度,并得到了解决方案
p1 = ( (3*A-S)*N - A*S+T ) / ( (A-B)^2 + (B-C)^2 + (C-A)^2 )
p2 = ( (3*B-S)*N - B*S+T ) / ( (A-B)^2 + (B-C)^2 + (C-A)^2 )
p3 = ( (3*C-S)*N - C*S+T ) / ( (A-B)^2 + (B-C)^2 + (C-A)^2 )
其中 S=A+B+C
和 T=A^2+B^2+C^2
。您可以检查它是否满足您问题的所有要求,并且可以与其他解决方案进行比较以了解我的解决方案是最小的。请参阅下面的 Java 实现,它在命令行上获取 A、B、C 和 N,并以百分比形式打印出最佳混合物的权重。请注意,接近极端(当 N
接近 min(A,B,C)
或 max(A,B,C)
时)伪逆法给出负权重。在这种情况下,您应该将相应的权重设置为 0,并使用标准线性代数技术计算其他两个变量。如果 N
超出从 min(A,B,C)
到 max(A,B,C)
的区间,则不可能得到一个非负的混合,所以实现打印出一个负权重的答案。
一般来说,如果您有矩阵库,计算会快速而直接。有关更多信息,请搜索伪逆或伪逆。
public class Mixture {
public static void main(String[] args) {
// calculate an optimal mixture of A, B, C to make N
double A = Double.parseDouble(args[0]);
double B = Double.parseDouble(args[1]);
double C = Double.parseDouble(args[2]);
double N = Double.parseDouble(args[3]);
// these formulas were derived from calculations of the pseudo-inverse
// of the matrix {{A,B,C},{1,1,1}}
double S = A + B + C;
double T = A*A + B*B + C*C;
double D = (A-B)*(A-B) + (B-C)*(B-C) + (C-A)*(C-A);
double p1 = ( (3*A-S)*N + (-A*S+T)) / D;
double p2 = ( (3*B-S)*N + (-B*S+T)) / D;
double p3 = ( (3*C-S)*N + (-C*S+T)) / D;
// if pseudo-inverse calculation gives a negative weight, set weight to 0
// and calculate exact solution
if (p1<0) { p1 = 0; p2 = (N-C)/(B-C); p3 = (B-N)/(B-C); }
if (p2<0) { p2 = 0; p1 = (N-C)/(A-C); p3 = (A-N)/(A-C); }
if (p3<0) { p3 = 0; p1 = (N-B)/(A-B); p2 = (A-N)/(A-B); }
p1 = Math.round(p1*1000)/10.0;
p2 = Math.round(p2*1000)/10.0;
p3 = Math.round(p3*1000)/10.0;
System.out.println("Mixture weights: " + p1 + "%, " + p2 + "%, " + p3 + "%");
System.out.println("Check p1*A+p2*B+p3*C = " + ((p1*A+p2*B+p3*C)/100));
System.out.println("Check p1 + p2 + p3 = " + (p1+p2+p3) + "%");
}
}
关于algorithm - 确定比率以达到 3 个值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29685316/
我有一个大小为 320x320 像素的阈值图像。我通过设置 ROI 以 20x20 像素的 block 循环遍历整个图像。我需要找到每个 block 的平均值。所以我将这些图像 block 传递给函数
我正在尝试学习 Javascript。我已经构建了以下代码来从一组数字中找到平均值。它有效除了最后返回的值总是 NaN。我不知道为什么。如果我将这 block 移到 block 外,它似乎完全忘记了变
假设我的数据已经分组,我该如何计算中位数和其他统计数据? Index Value Count 0 6 2 1 2 3 2 9 8 在上面
我试图计算的有趣情况。基本上在一行中,我有产品名称,其右侧的行是自首次收到产品以来经过的天数。 为 ex 计算的天数是 =TODAY()-BB2 我现在要做的是识别让我们说产品词“卡车”,然后计算卡车
我想知道如何计算某些数字的累积平均值。我将举一个简单的例子来描述我在寻找什么。 我有以下号码 vec 1) 为您的向量(或列表、一维数组或您如何称呼它)的每个元素评估此表达式,您将获得累积平均值。
我正在尝试对数据库表中的每一行进行平均。但它不能正常工作我想忽略该值,如果为空,它不会计算为零。使用我的代码,它将空值计算为零我想这样做 MS Excel 如果行/单元格为空,它将忽略。 Contro
我有以下信息(按 View 返回): DateTime ItemID UserTyp Seconds 2012-01-01 10 S 12 2012-01-01
我正在使用excel的average函数来获取欧洲各个城市一系列酒店价格的平均值。 =average(21,42,63,84,105) 我希望能够计算每个平均函数中的变量数量(例如,在上面的示例中有
我有一长串列,我想一次性计算非零中位数、平均值和标准差。我不能只删除基于 1 列的 0 行,因为同一列中另一列的值可能不是 0。 下面是我目前的代码,用于计算中位数、平均值等,包括零。 agg
这是我的问题: 我有一张这样的 table : Table Log int id; int time; timestamp DATE; int sid (FK to table Site);
JSON: [{"id":"1","user":"001","answer":"1,1,3,2,2,1,3,2"}, {"id":"2","user":"002","answer":"2,3,3,2,
有个问题: 使用适当的列名称,显示 obs 类型“CONT”的允许 ID 和平均 obs 值,其中 CONT 的平均 obs 值 >= 40。 假设承认是表1,观察是表2,但具有相同的主键Admit_
我有一个记录传感器数据的应用程序,我希望能够从多个传感器生成平均值,可以是一个、两个、三个或很多... 编辑:这些是温度传感器,因此 0 是传感器可能作为值存储在数据库中的值。 我最初的出发点是这个
我有这样一个数据框 id power flag 0 20 0 1 25 0 2 26 1 3 30 1 4 18 0 5
我想计算所有事件 blob 的平均位置。为此,首先我需要所有 X 和 Y 位置的总和。在这种情况下我该怎么做? contourFinder.findContours(grayImg, minB
我是一个十足的 Java 新手。上周一开始,之前从未用任何语言进行过任何编程。因此,如果我发现简单的事情变得复杂,请耐心等待。 我收到了一个文本文件。如下图: 第一个数据是时间(午夜过后的秒数),第二
我正在尝试为 Audacity 编写一个简单的测量插件,它就像用石头砸我的头骨一样有趣。我想要做的就是获取一段音频并找到所有样本的平均值(该 block 的 DC offset ),这样我就可以将它作
我正在尝试计算给定多边形内的值: 实际上我正在使用这个管道: 'aggregation': { 'pipeline': [ { "$match" : {
我有一个 pandas DataFrame,其中包含包含列表的列。我正在尝试获取此专栏中列表的方法。 这是我的 DataFrame 的示例: Loc Background 0
我尝试加速计算放置在数组中的4d向量的平均值。这是我的代码: #include #include #include #include #include #include typedef f
我是一名优秀的程序员,十分优秀!