Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: 克鲁德007

[已解决]求将三列插值成二维表的VBA代码

[复制链接]
 楼主| 发表于 2015-8-20 08:33 | 显示全部楼层
爱疯 发表于 2015-8-19 22:28
1)没理解步长,围观来学习。
2)可以上传7楼图片2的excel文件吗?为了看下图2的图表

1.步长:个人认为是一个初始值与第二个值的距离。百度的解释:程序语言中的名词,让一个数值在每次运算中加上某个数(此即步长)重复执行此项运算。例如对参数N的某项运算,假设步长为M,对N做一次运算,然后将N+M赋值给N,再用新的N值(上一步运算中的N+M)进行一次运算,如此重复。
2、7楼的图二我用Microsoft的Mathematics画的微软系统自带,原始数据就是三列数。
3、求版主帮忙。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2015-8-20 11:01 | 显示全部楼层
克鲁德007 发表于 2015-8-19 22:08
谢谢了!确实有点不清楚。我想做的是有发动机的万有特性数据转速,扭矩,比油耗(三列数)原始数据,现有不 ...

好题目!

问一下,楼主需要的是线性插值吗?
即,假设两点之间以近似直线变化来拟合,得到中间位置的插值。

或者,应该按2次曲线y=ax^2+bx+c来进行拟合、插值?
每次需要通过计算相邻3个点来进行拟合计算、插值。


回复

使用道具 举报

发表于 2015-8-20 11:07 | 显示全部楼层
克鲁德007 发表于 2015-8-20 08:33
1.步长:个人认为是一个初始值与第二个值的距离。百度的解释:程序语言中的名词,让一个数值在每次运算中加 ...

建议楼主认真回复群子老师的回复,就好了

她是这种问题的专家。



回复

使用道具 举报

发表于 2015-8-20 13:43 | 显示全部楼层    本楼为最佳答案   
按近似区域直线拟合计算的代码,结果如下:

算法原理如下:
① 原始数据排序
② 依照每一个列标值,计算对应二维表指定步长范围行值对应的直线拟合值。
  具体的步骤是:
  ③ 查找最接近指定行标值对应的2个实际行值i1、i2
  ④ 计算y=kx+b 其中k、b由i1、i2对应的第2列值为x、第3列值为y
   ⑤ 以上全部该列标值对应的指定行标值计算完成后,进入下一个列标值。
⑥ 全部列标值计算完成后,依次检查指定步长的标准列标值范围,
  按几乎同样的原理,计算列标值对应的数据,填入二维表。

具体步骤略。

最后输出结果到工作表。

f_Line.zip

26.01 KB, 下载次数: 16

回复

使用道具 举报

发表于 2015-8-20 13:52 | 显示全部楼层
也就是说,第一步先计算得到中间插值表(B列行标已经一一对应,A列的列表按原始数据分类)

结果如下:
 
27
35
42
50
58.3
66
73.5
81
89
96
100
5
95.201
86.578
87.806
91.213
91.78
85.725
87.49
92.291
97.172
105.69
110.65
10
76.97
73.296
75.322
79.23
81.368
77.885
79.328
83.278
87.351
93.755
97.254
15
58.74
60.014
62.838
67.247
70.956
70.044
71.165
74.265
77.529
81.823
83.855
20
54.062
53.669
53.989
54.566
60.544
62.204
56.41
58.644
61.941
69.89
70.456
25
52.281
51.317
50.159
52.202
50.132
54.363
54.84
56.841
59.552
57.958
61.563
30
51.017
49.907
50.445
51.433
52.417
51.997
52.83
47.225
48.064
57.969
59.417
35
50.17
48.5
49.335
45.723
52.472
49.119
51.689
50.725
52.042
54.748
56.295
40
49.41
48.104
49.149
49.387
49.093
50.069
49.767
51.434
52.384
54.028
55.124
45
48.834
49.241
48.877
49.127
48.039
49.105
49.407
49.631
49.994
52.946
54.066
50
50.09
49.459
48.478
48.358
47.325
48.696
49.012
49.491
50.146
52.529
53.293
55
50.527
50.187
47.34
48.207
47.454
47.461
48.371
49.107
49.602
52.252
53.02
60
51.379
50.749
48.452
47.814
47.064
47.429
48.187
48.478
49.308
51.888
51.965
65
52.211
52.297
49.622
47.689
47.771
46.701
47.771
48.277
48.718
51.698
52.475
70
53.043
53.846
49.819
48.77
47.843
47.367
47.819
48.076
49.101
51.421
52.576
75
53.875
55.394
50.016
49.703
47.919
47.335
47.635
47.875
49.192
51.463
52.908
80
54.707
56.943
50.213
50.636
47.486
47.273
47.431
48.102
49.411
51.897
53.358
85
55.539
58.492
50.41
51.57
48.253
47.753
47.112
48.034
49.408
52.387
51.679
90
56.371
60.04
50.607
52.503
49.17
47.826
47.295
48.27
49.755
53.567
50
95
57.203
61.589
50.804
53.436
45.711
47.753
47.478
48.723
51.166
54.402
48.321
100
58.034
63.137
51.001
54.37
36.403
47.753
47.662
49.068
52.045
55.238
46.642
回复

使用道具 举报

 楼主| 发表于 2015-8-20 14:37 | 显示全部楼层
香川群子 发表于 2015-8-20 11:01
好题目!

问一下,楼主需要的是线性插值吗?

先谢谢了。感觉这个问题不是线性插值,更想曲面插值。原始数据转速,扭矩,比油耗都有重复的值但组成的三维空间上的散点是不重复的。
回复

使用道具 举报

 楼主| 发表于 2015-8-20 14:50 | 显示全部楼层
香川群子 发表于 2015-8-20 13:52
也就是说,第一步先计算得到中间插值表(B列行标已经一一对应,A列的列表按原始数据分类)

结果如下:

谢谢了!太感动了


回复

使用道具 举报

发表于 2015-8-20 16:34 | 显示全部楼层
增加了一个根据二维插值表结果,对C列原始数据进行逆计算验证的自定义函数。

验证结果比较理想,平均误差率=-0.01%
最大误差范围: -4.55% 到 9.00%
误差中位值: -0.03%
误差的标准方差=0.01389283
3西格玛范围: -4.18% 到 4.16%

f_Line.zip

29.63 KB, 下载次数: 22

回复

使用道具 举报

发表于 2021-12-4 19:35 | 显示全部楼层
香川群子 发表于 2015-8-20 16:34
增加了一个根据二维插值表结果,对C列原始数据进行逆计算验证的自定义函数。

验证结果比较理想,平均误 ...

大神太厉害了,还在学习中,
请教下验证用的自定义函数是不是行列反了,楼主实例行列数据范围基本一致,影响不大
  1. Function f(a, b, c As Range)
  2.     For j = 3 To c.<font color="#ff0000">Rows</font>.Count
  3.         If a <= c(1, j) Then Exit For
  4.     Next
  5. For i = 3 To c.<font color="#ff0000">Columns</font>.Count
  6.         If b <= c(i, 1) Then Exit For
  7.     Next
  8.     y1 = f_Line(b, c(i - 1, 1), c(i - 1, j - 1), c(i, 1), c(i, j - 1))
  9.     y2 = f_Line(b, c(i - 1, 1), c(i - 1, j), c(i, 1), c(i, j))
  10.     f = f_Line(a, c(1, j - 1), y1, c(1, j), y2)
  11. End Function
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 04:06 , Processed in 0.298879 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表