大家好,欢迎来到IT知识分享网。
你们的每个赞都能让我开心好几天✿✿ヽ(°▽°)ノ✿
Wolfram语言与系统参考资料中心
详细资料见官方文档
插值与拟合在Mathematica中的操作也是相当方便(相对于Python而言),但是有个致命的缺点就是,当数据很大很多的时候,数据的导入、导出、使用令初学者并不是很舒服,一个很大的原因是因为对语言的不熟悉。我后面还会写的。
2、3是我在解决实际问题中的例子,同时还会对比插值阶数
目录
2.根据较少海底水深数据画出海底区域的地形和等高线图(二维散乱点插值)
(1)导入数据,插值,并选择内插阶数1,InterpolationOrder -> 1
(4)导入数据,插值,并选择内插阶数All,InterpolationOrder -> All
3.根据平面的高程数据表绘制三维表面图与等高线图(二维网格点插值)
一、Interpolation 插值
基本用法:
二维、三维都可以插值,但是要注意格式
1.基本范例:
(1)构建一个插值数据的近似函数
f = Interpolation[{1, 2, 3, 5, 8, 5}]
(2)应用函数,求插值
f[2.5]
结果:2.4375
(3)绘制插值函数
Plot[f[x], {x, 1, 6}]
结果:
(4)和原数据的比较
Plot[f[x], {x, 1, 6}]; Show[%, ListPlot[{1, 2, 3, 5, 8, 5}]]
结果:
(5)即刻找出插值数值
Plot[f[x], {x, 1, 6}]; Show[%, ListPlot[{1, 2, 3, 5, 8, 5}]]
结果:2.4375
2.根据较少海底水深数据画出海底区域的地形和等高线图(二维散乱点插值)
海底水深数据
x | 129 | 140 | 103.5 | 88 | 185.5 | 195 | 105 | 157.5 | 107.5 | 77 | 81 | 162 | 162 | 117.5 |
y | 7.5 | 141.5 | 23 | 147 | 22.5 | 137.5 | 85.5 | -6.5 | -81 | 3 | 56.5 | -66.5 | 84 | -33.5 |
z | 4 | 8 | 6 | 8 | 6 | 8 | 8 | 9 | 9 | 8 | 8 | 9 | 4 | 9 |
(1)导入数据,插值,并选择内插阶数1,InterpolationOrder -> 1
(注:我这里把z都改为了负号,是因为海底的话理解为往下的高度)
(2)绘制三维图形,并选择黑色为轴
Plot3D[fa[x, y], {x, 80, 200}, {y, -70, 150}];
Show[%32, AxesStyle -> Black]
结果:
(3)绘制等高线图并显示标签与对标注
结果:
(4)导入数据,插值,并选择内插阶数All,InterpolationOrder -> All
注意内插阶数不一定越高越好,只是在这里看上去效果比较平滑
(5)绘制三维图形,并选择黑色为轴
Plot3D[fb[x, y], {x, 80, 200}, {y, -70, 150}];
Show[%37, AxesStyle -> Black]
结果:
(6)绘制等高线图并显示标签与对标注
结果:
可以根据图像与数据分析:由于数据点过少,因此一阶插值看起来效果并不好;但是对于All插值,虽然看起来平滑,但是当插值阶数达到很高时误差会更大,z全是负的,但是插值出来的结果却有正的,因此只能选择一阶插值
3.根据平面的高程数据表绘制三维表面图与等高线图(二维网格点插值)
高程数据表
y\x | 0 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 | 1100 | 1200 | 1300 | 1400 |
1200 | 1350 | 1370 | 1390 | 1400 | 1410 | 960 | 940 | 880 | 800 | 690 | 570 | 430 | 290 | 210 | 150 |
1100 | 1370 | 1390 | 1410 | 1430 | 1440 | 1140 | 1110 | 1050 | 950 | 820 | 690 | 540 | 380 | 300 | 210 |
1000 | 1380 | 1410 | 1430 | 1450 | 1470 | 1320 | 1280 | 1200 | 1080 | 940 | 780 | 620 | 460 | 370 | 350 |
900 | 1420 | 1430 | 1450 | 1480 | 1500 | 1550 | 1510 | 1430 | 1300 | 1200 | 980 | 850 | 750 | 550 | 500 |
800 | 1430 | 1450 | 1460 | 1500 | 1550 | 1600 | 1550 | 1600 | 1600 | 1600 | 1550 | 1500 | 1500 | 1550 | 1550 |
700 | 950 | 1190 | 1370 | 1500 | 1200 | 1100 | 1550 | 1600 | 1550 | 1380 | 1070 | 900 | 1050 | 1150 | 1200 |
600 | 910 | 1090 | 1270 | 1500 | 1200 | 1100 | 1350 | 1450 | 1200 | 1150 | 1010 | 880 | 1000 | 1050 | 1100 |
500 | 880 | 1060 | 1230 | 1390 | 1500 | 1500 | 1400 | 900 | 1100 | 1060 | 950 | 870 | 900 | 936 | 950 |
400 | 830 | 980 | 1180 | 1320 | 1450 | 1420 | 400 | 1300 | 700 | 900 | 850 | 810 | 380 | 780 | 750 |
300 | 740 | 880 | 1080 | 1130 | 1250 | 1280 | 1230 | 1040 | 900 | 500 | 700 | 780 | 750 | 650 | 550 |
200 | 650 | 760 | 880 | 970 | 1020 | 1050 | 1020 | 830 | 800 | 700 | 300 | 500 | 550 | 480 | 350 |
100 | 510 | 620 | 730 | 800 | 850 | 870 | 850 | 780 | 720 | 650 | 500 | 200 | 300 | 350 | 320 |
0 | 370 | 470 | 550 | 600 | 670 | 690 | 670 | 620 | 580 | 450 | 400 | 300 | 100 | 150 | 250 |
(1)数据的导入
对于如此庞大数据,是不可能一个一个输入的,非常麻烦。关于数据的导入,我将在后几篇文章述说,这里就直接复制粘贴
(2)插值,并选择内插阶数3
f = Interpolation[dataInterp, InterpolationOrder -> 3]
(3)绘制三维图
Plot3D[f[x, y], {x, 0, 1400}, {y, 0, 1200}, AxesStyle -> Bold]
结果:
(4)绘制等高线图
结果:
你们的每个赞都能让我开心好几天✿✿ヽ(°▽°)ノ✿
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128875.html