【数学建模之Mathematica】4.插值_若oo尘的博客-程序员秘密

技术标签: 数学建模之Mathematica  

你们的每个赞都能让我开心好几天✿✿ヽ(°▽°)ノ✿

Wolfram语言与系统参考资料中心

详细资料见官方文档

插值与拟合在Mathematica中的操作也是相当方便(相对于Python而言),但是有个致命的缺点就是,当数据很大很多的时候,数据的导入、导出、使用令初学者并不是很舒服,一个很大的原因是因为对语言的不熟悉。我后面还会写的。

2、3是我在解决实际问题中的例子,同时还会对比插值阶数

目录

一、Interpolation        插值

1.基本范例:

(1)构建一个插值数据的近似函数

(2)应用函数,求插值

(3)绘制插值函数

(4)和原数据的比较

(5)即刻找出插值数值

 2.根据较少海底水深数据画出海底区域的地形和等高线图(二维散乱点插值)

(1)导入数据,插值,并选择内插阶数1,InterpolationOrder -> 1

(2)绘制三维图形,并选择黑色为轴

(3)绘制等高线图并显示标签与对标注

(4)导入数据,插值,并选择内插阶数All,InterpolationOrder -> All

(5)绘制三维图形,并选择黑色为轴

 (6)绘制等高线图并显示标签与对标注

 3.根据平面的高程数据表绘制三维表面图与等高线图(二维网格点插值)

(1)数据的导入

(2)插值,并选择内插阶数3

(3)绘制三维图

 (4)绘制等高线图


一、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都改为了负号,是因为海底的话理解为往下的高度)

fa = Interpolation[{ { {129, 7.5}, -4}, { {140, 141.5}, -8}, { {103.5,
     23}, -6}, { {88, 147}, -8}, { {185.5, 22.5}, -6}, { {195,
     137.5}, -8}, { {105,
     85.5}, -8}, { {157.5, -6.5}, -9}, { {107.5, -81}, -9}, { {77,
     3}, -8}, { {81, 56.5}, -8}, { {162, -66.5}, -9}, { {162,
     84}, -4}, { {117.5, -33.5}, -9}}, InterpolationOrder -> 1]

(2)绘制三维图形,并选择黑色为轴

Plot3D[fa[x, y], {x, 80, 200}, {y, -70, 150}];

Show[%32, AxesStyle -> Black]

 结果:

(3)绘制等高线图并显示标签与对标注

ContourPlot[fa[x, y], {x, 80, 200}, {y, -70, 150},
 ContourLabels -> True, PlotLegends -> Automatic]

结果:

(4)导入数据,插值,并选择内插阶数All,InterpolationOrder -> All

 注意内插阶数不一定越高越好,只是在这里看上去效果比较平滑

fb = Interpolation[{ { {129, 7.5}, -4}, { {140, 141.5}, -8}, { {103.5,
     23}, -6}, { {88, 147}, -8}, { {185.5, 22.5}, -6}, { {195,
     137.5}, -8}, { {105,
     85.5}, -8}, { {157.5, -6.5}, -9}, { {107.5, -81}, -9}, { {77,
     3}, -8}, { {81, 56.5}, -8}, { {162, -66.5}, -9}, { {162,
     84}, -4}, { {117.5, -33.5}, -9}}, InterpolationOrder -> All]

(5)绘制三维图形,并选择黑色为轴

Plot3D[fb[x, y], {x, 80, 200}, {y, -70, 150}];

Show[%37, AxesStyle -> Black]

结果:

 (6)绘制等高线图并显示标签与对标注

ContourPlot[fb[x, y], {x, 80, 200}, {y, -70, 150},
 ContourLabels -> True, PlotLegends -> Automatic]

 结果:

 可以根据图像与数据分析:由于数据点过少,因此一阶插值看起来效果并不好;但是对于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)数据的导入

对于如此庞大数据,是不可能一个一个输入的,非常麻烦。关于数据的导入,我将在后几篇文章述说,这里就直接复制粘贴

dataInterp={ { {0, 1200}, 1350}, { {100, 1200}, 1370}, { {200, 1200},
  1390}, { {300, 1200}, 1400}, { {400, 1200}, 1410}, { {500, 1200},
  960}, { {600, 1200}, 940}, { {700, 1200}, 880}, { {800, 1200},
  800}, { {900, 1200}, 690}, { {1000, 1200}, 570}, { {1100, 1200},
  430}, { {1200, 1200}, 290}, { {1300, 1200}, 210}, { {1400, 1200},
  150}, { {0, 1100}, 1370}, { {100, 1100}, 1390}, { {200, 1100},
  1410}, { {300, 1100}, 1430}, { {400, 1100}, 1440}, { {500, 1100},
  1140}, { {600, 1100}, 1110}, { {700, 1100}, 1050}, { {800, 1100},
  950}, { {900, 1100}, 820}, { {1000, 1100}, 690}, { {1100, 1100},
  540}, { {1200, 1100}, 380}, { {1300, 1100}, 300}, { {1400, 1100},
  210}, { {0, 1000}, 1380}, { {100, 1000}, 1410}, { {200, 1000},
  1430}, { {300, 1000}, 1450}, { {400, 1000}, 1470}, { {500, 1000},
  1320}, { {600, 1000}, 1280}, { {700, 1000}, 1200}, { {800, 1000},
  1080}, { {900, 1000}, 940}, { {1000, 1000}, 780}, { {1100, 1000},
  620}, { {1200, 1000}, 460}, { {1300, 1000}, 370}, { {1400, 1000},
  350}, { {0, 900}, 1420}, { {100, 900}, 1430}, { {200, 900},
  1450}, { {300, 900}, 1480}, { {400, 900}, 1500}, { {500, 900},
  1550}, { {600, 900}, 1510}, { {700, 900}, 1430}, { {800, 900},
  1300}, { {900, 900}, 1200}, { {1000, 900}, 980}, { {1100, 900},
  850}, { {1200, 900}, 750}, { {1300, 900}, 550}, { {1400, 900},
  500}, { {0, 800}, 1430}, { {100, 800}, 1450}, { {200, 800},
  1460}, { {300, 800}, 1500}, { {400, 800}, 1550}, { {500, 800},
  1600}, { {600, 800}, 1550}, { {700, 800}, 1600}, { {800, 800},
  1600}, { {900, 800}, 1600}, { {1000, 800}, 1550}, { {1100, 800},
  1500}, { {1200, 800}, 1500}, { {1300, 800}, 1550}, { {1400, 800},
  1550}, { {0, 700}, 950}, { {100, 700}, 1190}, { {200, 700},
  1370}, { {300, 700}, 1500}, { {400, 700}, 1200}, { {500, 700},
  1100}, { {600, 700}, 1550}, { {700, 700}, 1600}, { {800, 700},
  1550}, { {900, 700}, 1380}, { {1000, 700}, 1070}, { {1100, 700},
  900}, { {1200, 700}, 1050}, { {1300, 700}, 1150}, { {1400, 700},
  1200}, { {0, 600}, 910}, { {100, 600}, 1090}, { {200, 600},
  1270}, { {300, 600}, 1500}, { {400, 600}, 1200}, { {500, 600},
  1100}, { {600, 600}, 1350}, { {700, 600}, 1450}, { {800, 600},
  1200}, { {900, 600}, 1150}, { {1000, 600}, 1010}, { {1100, 600},
  880}, { {1200, 600}, 1000}, { {1300, 600}, 1050}, { {1400, 600},
  1100}, { {0, 500}, 880}, { {100, 500}, 1060}, { {200, 500},
  1230}, { {300, 500}, 1390}, { {400, 500}, 1500}, { {500, 500},
  1500}, { {600, 500}, 1400}, { {700, 500}, 900}, { {800, 500},
  1100}, { {900, 500}, 1060}, { {1000, 500}, 950}, { {1100, 500},
  870}, { {1200, 500}, 900}, { {1300, 500}, 936}, { {1400, 500},
  950}, { {0, 400}, 830}, { {100, 400}, 980}, { {200, 400},
  1180}, { {300, 400}, 1320}, { {400, 400}, 1450}, { {500, 400},
  1420}, { {600, 400}, 400}, { {700, 400}, 1300}, { {800, 400},
  700}, { {900, 400}, 900}, { {1000, 400}, 850}, { {1100, 400},
  810}, { {1200, 400}, 380}, { {1300, 400}, 780}, { {1400, 400},
  750}, { {0, 300}, 740}, { {100, 300}, 880}, { {200, 300},
  1080}, { {300, 300}, 1130}, { {400, 300}, 1250}, { {500, 300},
  1280}, { {600, 300}, 1230}, { {700, 300}, 1040}, { {800, 300},
  900}, { {900, 300}, 500}, { {1000, 300}, 700}, { {1100, 300},
  780}, { {1200, 300}, 750}, { {1300, 300}, 650}, { {1400, 300},
  550}, { {0, 200}, 650}, { {100, 200}, 760}, { {200, 200},
  880}, { {300, 200}, 970}, { {400, 200}, 1020}, { {500, 200},
  1050}, { {600, 200}, 1020}, { {700, 200}, 830}, { {800, 200},
  800}, { {900, 200}, 700}, { {1000, 200}, 300}, { {1100, 200},
  500}, { {1200, 200}, 550}, { {1300, 200}, 480}, { {1400, 200},
  350}, { {0, 100}, 510}, { {100, 100}, 620}, { {200, 100},
  730}, { {300, 100}, 800}, { {400, 100}, 850}, { {500, 100},
  870}, { {600, 100}, 850}, { {700, 100}, 780}, { {800, 100},
  720}, { {900, 100}, 650}, { {1000, 100}, 500}, { {1100, 100},
  200}, { {1200, 100}, 300}, { {1300, 100}, 350}, { {1400, 100},
  320}, { {0, 0}, 370}, { {100, 0}, 470}, { {200, 0}, 550}, { {300, 0},
  600}, { {400, 0}, 670}, { {500, 0}, 690}, { {600, 0}, 670}, { {700, 0},
  620}, { {800, 0}, 580}, { {900, 0}, 450}, { {1000, 0},
  400}, { {1100, 0}, 300}, { {1200, 0}, 100}, { {1300, 0},
  150}, { {1400, 0}, 250}}

(2)插值,并选择内插阶数3

f = Interpolation[dataInterp, InterpolationOrder -> 3]

(3)绘制三维图

Plot3D[f[x, y], {x, 0, 1400}, {y, 0, 1200}, AxesStyle -> Bold]

结果:

 

 (4)绘制等高线图

ContourPlot[f[x, y], {x, 0, 1400}, {y, 0, 1200},
 ContourLabels -> True, PlotLegends -> Automatic]

结果:

你们的每个赞都能让我开心好几天✿✿ヽ(°▽°)ノ✿

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_53392188/article/details/119457290

智能推荐

JAVA时间类及java8新时间类_jssd的博客-程序员秘密

java.util.Date时区GMT(Greenwich Mean Time)代表格林尼治标准时间,这个大家都知道。而CST却同时可以代表如下 4 个不同的时区:Central Standard Time (USA) UT-6:00Central Standard Time (Australia) UT+9:30China Standard Time UT+8:00Cuba ...

IE中调试javascript的方法_jcwKyl的博客-程序员秘密

<br />原文链接:http://blogs.msdn.com/b/ie/archive/2004/10/26/247912.aspx<br />I thought I’d take a couple minutes to talk about Script Debugging and Internet Explorer.<br /><br />Script debugging is turned off by default you can enable it by going to:<br /

springboot整合thymeleaf访问静态页面_Casey.zhang的博客-程序员秘密

1.导入。。。。。。。。。。。&lt;java.version&gt;1.8&lt;/java.version&gt;&lt;thymeleaf.version&gt;3.0.11.RELEASE&lt;/thymeleaf.version&gt;&lt;thymeleaf-layout-dialect.version&gt;2.4.1&lt;/thymeleaf-layout-dial...

数组指针 指针数组_zjy1364503349的博客-程序员秘密

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;    

poj1065-Wooden Sticks_dengtan9179的博客-程序员秘密

题目有很多小木棍需要机器处理。每个小木棍有重量和长度两个属性。不断把小木棍放入机器中,如果小木棍\(a\)放完后放入小木棍\(b\),那么如果\(a.weight&lt;=b.weight\ and\ a.length&lt;=b.length\),机器就可以以0的时间处理完这根木棍,否则需要花1的时间初始化。最开始也需要一次初始化。给出所有小木棍的信息,求一共需要多久处理完所有的小木...

随便推点

idea点击js文件路径报错:Cannot resolve directory 'js'_"couldn't resolve the js file \"../../../utils/upf_幻0觉的博客-程序员秘密

背景:新导入了一个项目,发现在jsp中无法通过点击js路径跳转到js,很不方便解决方法:setting中WebContexts设置webapp路径为/即可

libv4l 库_捷杰耶夫的博客-程序员秘密

作者:emouse 思·睿转自:http://www.cnblogs.com/emouse/archive/2013/03/05/2944522.htmlV4L2摸索了两天还是一头雾水,今天调试一个程序发现两个头文件:#include "libv4l2.h" #include "libv4lconvert.h"没有找到,网上搜索了下,发现这是在一个库libv4l

金税四期全电发票带来新挑战?百望云助力企业破解发票风险管理难题!_中国财经信息网的博客-程序员秘密

8月30日,国家税务总局发布《征管改革不停步 科技强税提质效——党的十八大以来税务部门持续推进税收征管改革综述》,提到:以金税四期建设为主要内容的智慧税务建设正式启航,推动税收征管方式从“收税”到“报税”再到“算税”,税收征管流程从“上机”到“上网”再到“上云”,税收征管效能从“经验管税”到“以票控税”再到“以数治税”。

pg中多值列_postgresql (PG) 字段用逗号 “,”隔开 判断是否含有某个值_weixin_39681171的博客-程序员秘密

如有一个student 学生表student表中有字段 课程字段 分别用 1,2,3,4,5,6,7 表示不通的7门课程CREATE TABLE student(name varchar(255),course varchar(255))insert intostudent (name ,course)values (‘张三‘,‘1,2,5,7‘);问题一、判断 张三 是否选择了 课程 2sel...

SVN服务备份操作步骤(拿走不谢)_svn许可密匙_HgH3223273424的博客-程序员秘密

SVN服务备份操作步骤1、准备源服务器和目标服务器源服务器:192.168.1.250目标服务器:192.168.1.251 root/rootroot 2、对目标服务器(251)装SVN服务器, 脚本如下:yum install subversion  3、创建一个新的仓库 (svnadmin create 路径),脚本如下:1svnadmin create ~/svn-storage-bak ...

推荐文章

热门文章

相关标签