【数学和算法】加权平均法

article/2025/8/27 10:17:38
加权法衡量差异

加权平均法的概念直接看这篇博客加权平均法就明白了。

在每一个数的权数相同的情况下,加权平均值就等于算数平均值。

以正常视力的人眼为例:
  • 距离人越近的位置,视野越清晰,可信度更高,所以分配的权重更大;
  • 距离人越远的位置,视野越模糊,可信度越低,所以分配的权重更小;

上面博客中的加权平均法用来一个事物衡量平均水平,还可以衡量两个事物的差异。


下面的例子是衡量两条线的差异程度:

本例中,加权平均法会根据不同位置来分配不同权重。

就是 动态权重,根据某点原点的距离,越远越不可靠,权重越低。

例:有两条线,线上的点距离原点越远,可信度越低。现在需要评估两条线的相似程度,就是量化distance,可以分别选取两条线上的三个点,对三对点分别计算距离,然后分配不同权重,进行加权平均,就得到了两条线的差异:
在这里插入图片描述

有两条线L1,L2有一系列点(已知每个点的坐标xy值,注意图中xy方向与上学时课本上的不一样)
L1: 起点A1,终点B1
L2: 起点A2,终点B2

  • 1.先找出L1,L2x方向公共部分,得到公共部分在x方向距离原点的距离startend;

  • 2.然后根据startend求出中间点:
    mid=(end - start)/2;

  • 3.然后再从L1,L2中分别找出x方向距离最接近startmidend的点,得到首中尾三对点:

    • start点对:start_point_1对应图中L1中的A1start_point_2对应图L2A2'
    • mid 点对: mid_point_1mid_point_2
    • end 点对:end_point_1对应图L1B1'end_point_2对应图L2B2

    其中:

    • start_point_1,mid_point_1,end_point_1L1上的点,start_point_1.x < mid_point_1.x < end_point_1.x
    • start_point_2,mid_point_2,end_point_2L2上的点, start_point_2.x < mid_point_2.x < end_point_2.x

    注意:startmidend是长度是距离,不是点,start_point_1,mid_point_1,end_point_1start_point_2,mid_point_2,end_point_2是点,不要混淆了。

  • 4.得到首中尾三个点后,根据三个点离原点的距离设置权重:


代码如下:

// 计算两个start点的距离,两个mid点的距离,两个end点的距离
float start_dist = std::sqrt(std::pow(start_point_1.x - start_point_2.x, 2) + std::pow(start_point_1.y - start_point_2.y, 2));float mid_dist = std::sqrt(std::pow(mid_point_1.x - mid_point_2.x, 2)+ std::pow(mid_point_1.y - mid_point_2.y, 2));float end_dist = std::sqrt(std::pow(end_point_1.x - end_point_2.x, 2) + std::pow(end_point_1.y - end_point_2.y, 2));//加权法求各个权重,权重是根据距离来定的
float wSigma = 1.0 / (std::abs(start) + std::abs(mid) + std::abs(end));
float wStart  = 0.5 * wSigma * (std::abs(mid) + std::abs(end));
float wMid = 0.5 * wSigma * (std::abs(start) + std::abs(end));
float wEnd    = 0.5 * wSigma * (std::abs(start) + std::abs(middle));// 则两条线的距离可以通过三对点的距离,使用加权法近似表示为
float distance = wStart * start_dist + wMid * mid_dist + wEnd * end_dist;

从上面代码最后一句可以看出,如果distance==0,那么两条线L1L2重合。
不要简单理解为计算两条线的距离,要注意到里面的限定条件是线上的点距离原点越远,可信度越低,所以才使用了加权法。

如果两条线上所有点可信度一样,即权重一样,那么计算的这两条线的距离,可以直接使用wStart = wMid = wEnd =1/3,然后1/3*(起点之间距离 + 中间点之间距离 + 终点之间距离)


http://chatgpt.dhexx.cn/article/wvJtScT1.shtml

相关文章

几何平均详解,及其与算术平均、调和平均、均方根的关系

2. 几何平均与算术平均的转换关系&#xff08;附&#xff09;&#xff1a; 3.2 几何平均数适用于求连乘样本的均值&#xff0c;它是变化的中心&#xff0c;代表平均变化率&#xff1b;算术平均数适用于求连加样本的均值&#xff0c;它是数值的中心&#xff0c;代表平均数量&am…

加权平均数以及方差

加权平均值即将各数值乘以相应的 权数&#xff0c;然后加总求和得到总体值&#xff0c;再除以总的单位数。 平均数的大小不仅取决于总体中各单位的标志值&#xff08;变量值&#xff09;的大小&#xff0c;而且取决于各标志值出现的次数&#xff08; 频数&#xff09;&#xff…

各种平均值:算术平均值,几何平均值,调和平均值等

平均值概述 平均数反映了一组数据的一般水平&#xff0c;最常见的平均数是算术平均数&#xff0c;除了算数平均数外&#xff0c;还有几何平均数&#xff0c;调和平均数&#xff0c;加权平均数等。 算术平均值&#xff08;Arithmetic Mean&#xff09; 公式解读&#xff1a;表…

加权几何平均数

&#xfeff;&#xfeff; 加权几何平均数的概述 根据统计资料的不同&#xff0c;几何平均数也有简单几何平均数和加权几何平均数之分。 加权几何平均数&#xff0c;是统计学中的一种动态平均指标&#xff0c;多是指社会经济现象的同质总体在时间上变动速度的平均数。加权几何…

算数平均数与几何平均数

算数平均数与几何平均数 文章目录 算数平均数与几何平均数 一、算数平均数二、几何平均数1.定义2.几何意义 三、二者关系 一、算数平均数 算数平均数分为简单算数平均数与加权算术平均数。 简单算术平均&#xff1a;主要用于未分组的原始数据。设一组数据为 x 1 x_1 x1​、 x …

各平均数介绍(算数平均数、几何平均数、加权算术平均数)

1.算数平均数 这是日常生活中用到最多的平均数&#xff0c;比如计算一个班的平均成绩&#xff0c;平均身高 2.加权算数平均数 加权算术平均数一般用于分组数据 。 其中X是每个组的组中值 3. 几何平均数 3.1 简单几何平均数 3.2 加权几何平均数 4.几何平均数和算数平均…

如何用c语言计算三角形面积

用C语言计算三角形面积 此处用到正余弦定理&#xff1b;先用三边求出某一角的余弦值&#xff0c;由cosAcosAsinAsinA1可求得sinA的值&#xff0c;然后由三角形面积公式求出&#xff1b; 源代码如下&#xff1a; int main() {//a&#xff0c;b&#xff0c;c分别为三角形三边长…

python计算三角形面积

海伦公式 假设在平面内&#xff0c;有一个三角形&#xff0c;边长分别为a&#xff0c;b&#xff0c;c&#xff0c;三角形的面积S可由以下公式求得: 而公式里的p为半周长 #&#xff08;1&#xff09;输入边长 a float(input(输入三角形第一边长: ))b float(input(输入三角…

java------三角形面积计算

类代码———————————— package mxdx; import java.lang.Math;//导入函数类public class sjx {private int a;//定义三角形的三条边private int b;private int c;public sjx() {}//无参构造方法public sjx(int a,int b,int c) {this.aa;this.bb;this.cc;}//get(),set…

【C语言】C语言程序-求三角形面积

欢迎来到南方有乔木的博客&#xff01;&#xff01;&#xff01; 博主主页&#xff1a;点击点击&#xff01;戳一戳&#xff01;&#xff01; 博主名:南方有乔木呀 博主简介&#xff1a; 一名在校大学生&#xff0c;正在努力学习Java语言编程。穷且意坚&#xff0c;不坠青云之志…

Python 三角形面积计算

# 计算三角形面积""" 介绍&#xff1a;已知三角形边长分别为x、y、z&#xff0c;可以计算三角形半周长q&#xff0c;然后根据海伦公式计算三角形面积S三角形半周长&#xff1a;q (x y z) / 2三角形面积&#xff1a;S (q * (q-x) * (q-y) * (q-z)) ** 0.5知识…

C++ 计算三角形面积

C编码实现计算三角形面积 1- 计算公式 方法一&#xff1a; S√[p(p-a)(p-b)(p-c)] &#xff0c;而公式里的p为半周长&#xff1a;p(abc)/2方法二&#xff1a; S&#xff1d;ah/2 方法三&#xff1a; 2- 思路&#xff1a; 模块化设计定义点数据结构。使用结构体定义点定义计算…

计算三角形面积

文章目录 计算三角形面积采用面向对象计算三角形面积 计算三角形面积 定义一个计算三角形面积的函数&#xff0c;输入a、b、c得到计算结果。编写代码 package po03.t01;import java.util.Scanner;/*** 功能&#xff1a;计算三角形面积* 作者&#xff1a;张惠清* 日期&#xf…

java计算三角形面积和周长

编写一个三角形类&#xff0c;要求能够计算三角形的面积和周长。要求定义3个边长作为三角形类的属性&#xff0c;并具有构造方法和相应的get、set方法。在main方法中&#xff0c;用3、4、5作为三个边长创建一个三角形&#xff0c;然后输出该三角形的面积和周长。 import java.…

python求三角形面积

运用Python求三角形面积&#xff0c;代码如下 在运行后&#xff0c;可得 输入三边长后通过三角形面积公式&#xff0c;可求得三角形的面积&#xff0c;其中需要得知三角形如何运用周长求面积&#xff0c;周长公式为s (a b c) / 2&#xff0c;后用面积公式area (s*(s-a)*(s-…

c++编程求三角形面积

边长为a,b,c得到三角形面积公式为其中 *注意&#xff1a;计算三角形的面积之前&#xff0c;需判断所输入的三边之和是否能构成三角形 #include<iostream> #include<cmath> using namespace std; int main() {float a,b,c,s,area;cout<<"请输入三角形三…

Java计算三角形的面积

Java计算三角形的面积 Java计算三角形的面积 package com.qingsu.basis;import java.util.Scanner; import java.lang.Math;public class Mod {static Scanner scanner new Scanner(System.in);public static void main(String[] args) { //调用无参无返回值triangleArea()…

C语言程序-计算三角形面积

一、问题描述 设三角形边长为a、b、c&#xff0c;计算其面积area。 二、问题分析 &#xff08;1&#xff09;面积area的计算公式如下&#xff1a; 其中&#xff1a; &#xff08;2&#xff09;该问题的输入量有三个&#xff0c;即a、b、c&#xff0c;输出量是area。 三、算法…

三角形面积

三角形面积的两种求法 1、已知三顶点坐标求三角形面积 对于两个列向量(x1&#xff0c; y1)和(x2&#xff0c; y2)&#xff0c;我们将上述两个向量合并形成一个2*2的矩阵&#xff0c;当前矩阵的行列式就等于这两台向量所围成的平行四边形的面积&#xff0c;三角形的面积就是当…

C语言程序——求三角形面积

文章目录 前言一、求三角形面积二、程序实例1.程序代码2.运行结果3.结果分析 三、拓展应用总结 前言 输入三角形的三个边&#xff0c;计算三角形的面积输出&#xff08;运用海伦公式计算&#xff09;。 一、求三角形面积 假设输入三角形的三条边是合法的三角形&#xff0c;则…