griddata:matlab中的插值命令解析 griddata.doc

上传人:laozhun 文档编号:2387962 上传时间:2023-02-17 格式:DOC 页数:15 大小:33.50KB
返回 下载 相关 举报
griddata:matlab中的插值命令解析 griddata.doc_第1页
第1页 / 共15页
griddata:matlab中的插值命令解析 griddata.doc_第2页
第2页 / 共15页
griddata:matlab中的插值命令解析 griddata.doc_第3页
第3页 / 共15页
griddata:matlab中的插值命令解析 griddata.doc_第4页
第4页 / 共15页
griddata:matlab中的插值命令解析 griddata.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《griddata:matlab中的插值命令解析 griddata.doc》由会员分享,可在线阅读,更多相关《griddata:matlab中的插值命令解析 griddata.doc(15页珍藏版)》请在三一办公上搜索。

1、griddata:matlab中的插值命令解析 griddata话题:griddata 使用方法 多项式matlab及其在理工课程中的应用指南第3版命令1 interp1功能 一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。x:原始数据点Y:原始数据点xi:插值点Yi:插值点格式(1)yi = interp1(x,Y,xi) 返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。若Y 为一矩阵,则按Y 的每列计算。yi 是阶数为length(xi)*size(Y,2)的

2、输出矩阵。(2)yi = interp1(Y,xi) 假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。(3)yi = interp1(x,Y,xi,method) 用指定的算法计算插值:nearest:最近邻点插值,直接完成计算;linear:线性插值(缺省方式),直接完成计算;spline:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值;pchip:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,

3、用于对向量x 与y 执行分段三次内插值。该方法保留单调性与数据的外形;cubic:与pchip操作相同;v5cubic:在MATLAB 5.0 中的三次插值。对于超出x 范围的xi 的分量,使用方法nearest、linear、v5cubic的插值算法,相应地将返回NaN。对其他的方法,interp1 将对超出的分量执行外插值算法。(4)yi = interp1(x,Y,xi,method,extrap) 对于超出x 范围的xi 中的分量将执行特殊的外插值法extrap。(5)yi = interp1(x,Y,xi,method,extrapval) 确定超出x 范围的xi 中的分量的外插值e

4、xtrapval,其值通常取NaN 或0。例1>>x = 0:10; y = x.*sin(x);>>xx = 0:.25:10; yy = interp1(x,y,xx);>>plot(x,y,kd,xx,yy)复制代码例2>> year = 1900:10:2010;>> product = 75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633 256.344 267.893 ;>>p1995 = interp1(ye

5、ar,product,1995)>>x = 1900:1:2010;>>y = interp1(year,product,x,pchip);>>plot(year,product,o,x,y)复制代码插值结果为:p1995 =252.9885复制代码命令2 interp2功能 二维数据内插值(表格查找)格式 (1)ZI = interp2(X,Y,Z,XI,YI) 返回矩阵ZI,其元素包含对应于参量XI 与YI(可以是向量、或同型矩阵) 的元素, 即Zi(i,j) Xi(i,j),yi(i,j)。用户可以输入行向量和列向量Xi 与Yi,此时,输出向量Zi 与

6、矩阵meshgrid(xi,yi)是同型的。同时取决于由输入矩阵X、Y 与Z 确定的二维函数Z=f(X,Y)。参量X 与Y 必须是单调的,且相同的划分格式,就像由命令meshgrid 生成的一样。若Xi与Yi 中有在X 与Y范围之外的点,则相应地返回nan(Not a Number)。(2)ZI = interp2(Z,XI,YI) 缺省地,X=1:n、Y=1:m,其中m,n=size(Z)。再按第一种情形进行计算。(3)ZI = interp2(Z,n) 作n 次递归计算,在Z 的每两个元素之间插入它们的二维插值,这样,Z 的阶数将不断增加。interp2(Z)等价于interp2(z,1)

7、。(4)ZI = interp2(X,Y,Z,XI,YI,method) 用指定的算法method 计算二维插值:linear:双线性插值算法(缺省算法);nearest:最临近插值;spline:三次样条插值;cubic:双三次插值。例3:>>X,Y = meshgrid(-3:.25:3);>>Z = peaks(X,Y);>>XI,YI = meshgrid(-3:.125:3);>>ZZ = interp2(X,Y,Z,XI,YI);>>surfl(X,Y,Z);hold on;>>surfl(XI,YI,ZZ+1

8、5)>>axis(-3 3 -3 3 -5 20);shading flat>>hold off复制代码例4:>>years = 1950:10:1990;>>service = 10:10:30;>>wage = 150.697 199.592 187.625 179.323 195.072 250.287 203.212 179.092 322.767 226.505 153.706 426.730 249.633 120.281 598.243;>>w = interp2(service,years,wage,15,

9、1975)复制代码插值结果为:w =190.6288复制代码命令3 interp3功能 三维数据插值(查表)格式 (1)VI = interp3(X,Y,Z,V,XI,YI,ZI) 找出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值。参量XI,YI,ZI 是同型阵列或向量。若向量参量XI,YI,ZI 是不同长度,不同方向(行或列)的向量,这时输出参量VI 与Y1,Y2,Y3 为同型矩阵。其中Y1,Y2,Y3 为用命令meshgrid(XI,YI,ZI)生成的同型阵列。若插值点(XI,YI,ZI)中有位于点(X,Y,Z)之外的点,则相应地返回特殊变量值NaN。(2

10、)VI = interp3(V,XI,YI,ZI) 缺省地, X=1:N ,Y=1:M, Z=1:P ,其中,M,N,P=size(V),再按上面的情形计算。(3)VI = interp3(V,n) 作n 次递归计算,在V 的每两个元素之间插入它们的三维插值。这样,V 的阶数将不断增加。interp3(V)等价于interp3(V,1)。(4)VI = interp3(.,method) %用指定的算法method 作插值计算:linear:线性插值(缺省算法);cubic:三次插值;spline:三次样条插值;nearest:最邻近插值。说明 在所有的算法中,都要求X,Y,Z 是单调且有相同

11、的格点形式。当X,Y,Z 是等距且单调时,用算法*linear,*cubic,*nearest,可得到快速插值。例5>>x,y,z,v = flow(20);>>xx,yy,zz = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3);>>vv = interp3(x,y,z,v,xx,yy,zz);>>slice(xx,yy,zz,vv,6 9.5,1 2,-2 .2); shading interp;colormap cool复制代码命令4 interpft功能 用快速Fourier 算法作一维插值格式 (1)y

12、= interpft(x,n) 返回包含周期函数x 在重采样的n 个等距的点的插值y。若length(x)=m,且x 有采样间隔dx,则新的y 的采样间隔dy=dx*m/n。注意的是必须nm。若x 为一矩阵,则按x 的列进行计算。返回的矩阵y 有与x 相同的列数,但有n 行。(2)y = interpft(x,n,dim) 沿着指定的方向dim 进行计算命令5 griddata功能 数据格点格式 (1)ZI = griddata(x,y,z,XI,YI) 用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z。griddata 将返回曲面z 在点(XI,YI)处的插值。曲面总是经过这

13、些数据点(x,y,z)的。输入参量(XI,YI)通常是规则的格点(像用命令meshgrid 生成的一样)。XI 可以是一行向量,这时XI 指定一有常数列向量的矩阵。类似地,YI 可以是一列向量,它指定一有常数行向量的矩阵。(2)XI,YI,ZI = griddata(x,y,z,xi,yi) 返回的矩阵ZI 含义同上,同时,返回的矩阵XI,YI 是由行向量xi 与列向量yi 用命令meshgrid 生成的。(3)XI,YI,ZI = griddata(.,method) 用指定的算法method 计算:linear:基于三角形的线性插值(缺省算法);cubic: 基于三角形的三次插值;near

14、est:最邻近插值法;v4:MATLAB 4 中的griddata 算法。命令6 spline功能 三次样条数据插值格式 (1)yy = spline(x,y,xx) 对于给定的离散的测量数据x,y(称为断点),要寻找一个三项多项式y = p(x) ,以逼近每对数据(x,y)点间的曲线。过两点(xi, yi) 和(xi+1, yi+1) 只能确定一条直线,而通过一点的三次多项式曲线有无穷多条。为使通过中间断点的三次多项式曲线具有唯一性,要增加两个条件(因为三次多项式有4 个系数):a三次多项式在点(xi, yi) 处有: p¢i(xi) = p¢i(xi)

15、;b三次多项式在点(xi+1, yi+1) 处有: p¢i(xi+1) = pi¢(xi+1) ;cp(x)在点(xi, yi) 处的斜率是连续的(为了使三次多项式具有良好的解析性,加上的条件);dp(x)在点(xi, yi) 处的曲率是连续的;对于第一个和最后一个多项式,人为地规定如下条件: p¢1¢(x) = p¢2¢(x) p¢n¢(x) = p¢n¢-1(x)上述两个条件称为非结点(not-a-knot)条件

16、。综合上述内容,可知对数据拟合的三次样条函数p(x)是一个分段的三次多项式:ï ïîï ï£ ££ ££ £=n n n+12 2 31 1 2p (x) x x xp (x) x x xp (x) x x xp(x)L L L L其中每段pi(x) 都是三次多项式。该命令用三次样条插值计算出由向量x 与y 确定的一元函数y=f(x)在点xx 处的值。若参量y 是一矩阵,则以y 的每一

17、列和x 配对,再分别计算由它们确定的函数在点xx 处的值。则yy 是一阶数为length(xx)*size(y,2)的矩阵。(2)pp = spline(x,y) 返回由向量x 与y 确定的分段样条多项式的系数矩阵pp,它可用于命令ppval、unmkpp 的计算。例6对离散地分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算:>>x = 0 2 4 5 8 12 12.8 17.2 19.9 20; y = exp(x).*sin(x);>>xx = 0:.25:20;>>yy = spline(x,y,xx);>>plot(

18、x,y,o,xx,yy)复制代码命令7 interpn功能 n 维数据插值(查表)格式 (1)VI = interpn(X1,X2,Xn,V,Y1,Y2,?,Yn) %返回由参量X1,X2,Xn,V 确定的n 元函数V=V(X1,X2,Xn)在点(Y1,Y2,Yn)处的插值。参量Y1,Y2,Yn 是同型的矩阵或向量。若Y1,Y2,Yn 是向量,则可以是不同长度,不同方向(行或列)的向量。它们将通过命令ndgrid生成同型的矩阵, 再作计算。若点(Y1,Y2,Yn) 中有位于点(X1,X2,Xn)之外的点,则相应地返回特殊变量NaN。VI = interpn(V,Y1,Y2,?,Yn) %缺省地

19、,X1=1:size(V,1),X2=1:size(V,2), ,Xn=1:size(V,n),再按上面的情形计算。VI = interpn(V,ntimes) %作ntimes 次递归计算,在V 的每两个元素之间插入它们的n 维插值。这样,V 的阶数将不断增加。interpn(V)等价于interpn(V, 1)。VI = interpn(?,method) %用指定的算法method 计算:linear:线性插值(缺省算法);cubic:三次插值;spline:三次样条插值法;nearest:最邻近插值算法。命令8 meshgrid功能 生成用于画三维图形的矩阵数据。格式 X,Y = me

20、shgrid(x,y) 将由向量x,y(可以是不同方向的)指定的区域min(x),max(x) , min(y) , max(y) 用直线x=x(i),y=y(j) ( i=1,2,length(x) ,j=1,2,length(y))进行划分。这样,得到了length(x)*length(y)个点,这些点的横坐标用矩阵X 表示,X 的每个行向量与向量x 相同;这些点的纵坐标用矩阵Y 表示,Y 的每个列向量与向量y 相同。其中X,Y可用于计算二元函数z=f(x,y)与三维图形中xy 平面矩形定义域的划分或曲面作图。X,Y = meshgrid(x) %等价于X,Y=meshgrid(x,x)。

21、X,Y,Z = meshgrid(x,y,z) %生成三维阵列X,Y,Z,用于计算三元函数v=f(x,y,z)或三维容积图。例7X,Y = meshgrid(1:3,10:14)复制代码计算结果为:X =1 2 31 2 31 2 31 2 31 2 3Y =10 10 1011 11 1112 12 1213 13 1314 14 14复制代码命令9 ndgrid功能 生成用于多维函数计算或多维插值用的阵列格式 X1,X2,Xn = ndgrid(x1,x2,xn) %把通过向量x1,x2,x3,xn 指定的区域转换为数组x1,x2,x3,xn 。这样, 得到了 length(x1)*len

22、gth(x2)*length(xn)个点,这些点的第一维坐标用矩阵X1 表示,X1 的每个第一维向量与向量x1 相同;这些点的第二维坐标用矩阵X2 表示,X2 的每个第二维向量与向量x2 相同;如此等等。其中X1,X2,Xn 可用于计算多元函数y=f(x1,x2,xn)以及多维插值命令用到的阵列。X1,X2,Xn = ndgrid(x) %等价于X1,X2,Xn = ndgrid(x,x,x)命令10 table1功能 一维查表格式 Y = table1(TAB,X0) %返回用表格矩阵TAB 中的行线性插值元素,对X0(TAB的第一列查找X0)进行线性插值得到的结果Y。矩阵TAB 是第一列包

23、含关键值,而其他列包含数据的矩阵。X0 中的每一元素将相应地返回一线性插值行向量。矩阵TAB 的第一列必须是单调的。例8>>tab = (1:4) hilb(4)>>y = table1(tab,1 2.3 3.6 4)复制代码查表结果为:>>tab = (1:4) hilb(4)>>y = table1(tab,1 2.3 3.6 4)复制代码 .1问题的提法一个多项式的幂级数形式可表示为:p(x)= a0xn + a1xn-1 + + an-1x + an在MATLAB中,多项式用行向量表示,其元素为多项式的系数,且从左到右按降幂排列。如多项

24、式p(x)= ax+ ax+ + ax + a在MATLAB 中被表示为p= aaaaroots命令:多项式的根可用roots命令求解,如x=roots(p).polyval命令:可以用此命令计算多项式的值。如p(2.5)可用y=polyval(p,2.5)计算。多项式运算命令:设分别有m,n次多项式p(x),p(x)p(x)=ax+ ax+ + ax + ap(x)=bx+ bx+ + bx + b假设它们的系数向量分别为a和b,则命令 c=conv(a,b)用来计算两多项式的乘积m+n次多项式。4.1.1泰勒级数及泰勒插值定理4.1.1设函数f Ca,b,xa,b,则当xa,b时,成立f(

25、x)=p(x)+r(x)(1)其中 p(x)=(x-x0)为泰勒多项式,r(x)= (x-x0)为误差项,其中a,b。例4.1.1求f(x)=在x= 100的一次和二次泰勒多项式,并利用它们计算的近似值并估计误差。推论1若 p(x)为定理4.1.1给出的n次泰勒多项式,则(x)= f(x) ,k=0,1,2,n。4.1.2拉格朗日插值问题1: 求一个n 次多项式p(x), 使得p(x)=y,i=0,1,2,n(2)这就是所谓的拉格朗日插值。两两不同的点x称插值节点。拉格朗日插值的几何解释为:通过曲线y=f(x)上给定的n+1点 (x,y),i=0,1,2,n,求作一条n次代数曲线y= p(x)

26、作为y=f(x)的近似。设所求插值多项式为p(x)= ax+ ax+ + ax + a(3)则拉格朗日插值的插值条件就是关于系数的线性方程组:ax+ ax+ + ax+ a=yax+ ax+ + ax+ a=y(4)ax+ ax+ + ax+ a=y其系数行列式就是Vandermonde行列式:V=由于这n+1 个节点两两不同,故V不等于0,因此上述插值问题的解是存在且唯一的。4.2拉格朗日插值的插值公式4.2.1线性插值线性插值是许多数值方法的基础,例如对线性插值进行积分可以导出数值积分的梯形法,而线性插值的斜率可以作被插函数的一阶导数的近似。因此我们首先考察线性插值的情形。问题2: 求一个

27、一次多项式p(x), 使得p(x)=y,i=0,1(6)由于p(x)表示通过两点(x,y),(x,y)的直线,所以我们称这样的插值为线性插值。这事实上是拉格朗日插值n=1的情形。上述问题的解为p(x)=y+(x-x)= y+ y若记l(x)= ,l(x)= ,则有 p(x)=yl(x)+yl(x)(7)我们称l(x), l(x)为线性插值的基函数,这两个函数显然可认为是满足条件l(x)=1,l(x)=0;l(x)=0,l(x)=1的插值多项式。例4.2.1已知=10, =11,求y=。公式(7)表明,插值问题2的解可以通过插值基函数的线性组合得出,且组合的系数恰好就是已知数据y,y。在MATL

28、AB中,有一条命令可以做(分段)线性插值:命令interp1通过对函数表进行线性插值,确定横坐标为xi的指定点的函数值。它的调用格式为yi=interp1(x,y,xi)其中x是表示数据横坐标值的列数组,y是表示数据纵坐标值的列数组。x必须是单调的,列数组x和y的长度必须相同,但y可以包含多列。xi是一个标量或数组,其对应的y值通过线性插值算出。例4.2.2下面表格给出了二氧化碳气体的两种物性:TBetaAlpha3003.33e30.2128e44002.50e30.3605e45002.00e30.5324e46001.67e30.7190e4用MATLAB分别计算T321,440和571

29、时二氧化碳的两种物性。求此问题的命令文件如下: lineinterp.mT=300:100:600;Beta=1000*3.33,2.50,2.00,1.67;Alpha=10000*0.2128,0.3605,0.5324,0.7190;Ti=321,440,571 ;Property=interp1(T,Beta,Alpha,Ti)Ti,Property4.2.2抛物(二次)插值线性插值仅仅利用了两个节点的数据信息,因此逼近度自然不高。为此我们考察二次插值即抛物插值的情形。问题3: 求一个二次多项式p(x), 使得p(x)=y, i=0,1,2(8)由于p(x)表示通过三点(x,y),(x

30、,y),(x,y)的抛物线,所以我们称这样的插值为抛物插值。这事实上是拉格朗日插值n=2的情形。为了得出和类似于线性插值(7)一样的公式,我们首先求解下列二次插值问题:求作一个二次多项式l(x), 使得l(x)=1, l(x)= 0, l(x)=0,求出的解为:l(x)= 类似地人们可求出满足:l(x)=0, l(x)= 1, l(x)=0,l(x)=0, l(x)= 0, l(x)=1,的二次多项式l(x)= , l(x)= 这样构造出来的l(x), l(x), l(x)称为问题3的插值基函数,因此问题3的解可表示为:p(x)=yl(x)+yl(x)+ yl(x)。例4.2.3利用100,1

31、21,144的开方值求。4.2.3一般情形问题1:设插值节点x(i=0,1,2,n)两两不同,求一个n 次多项式p(x), 使得p(x)=y,i=0,1,2,n(2)这样的n 次多项式p(x)称为是n 次拉格朗日插值多项式。仿照线性插值和二次插值的情形,我们先求n 次拉格朗日插值基函数l(x)(k=0,1,2,n)。即l(x)是n 次多项式且满足l(x)=,i=0,1,2,n求得l(x)=,k=0,1,2,n.利用插值基函数可得出问题的解p(x)=yl(x) 例4.2.4给出f(x)=lnx的数值表,用Lagrange插值计算ln(0.54)的近似值。x0.40.50.60.70.8ln(x)

32、-0.916291-0.6931470.510826-0.357765-0.223144 调用格式:>>x=0.4:0.1:0.8;>>y=-0.916291-0.6931470.510826-0.357765-0.223144 ;>>xi=0.54;>>y1=Lagrangeinterp(x,y,xi); 4.3插值余项由于插值函数p(x)只是近似地刻划了原来的函数f(x)(事实上只是在插值节点上两个函数的值才相符),因此在插值点x处计算p(x)作为f(x)的函数值,一般总有误差。我们定义R (x)f(x)p(x)为插值函数的截断误差,或称插值

33、余项。插值余项的大小比较好地刻划了用简单的插值函数替代原来很复杂的函数的有效程度。定理4.3.1(拉格朗日余项定理)设区间a,b 含有节点x,x,x,且函数f Ca,b,y=f(x)(i=0,1,n), 则当xa,b时,对n次拉格朗日插值函数p(x)成立f(x)p(x) (x-x)其中a,b,它是与x及x,x,x有关的点。拉格朗日余项定理在理论上很有价值。从余项可以得知,如果插值点离插值节点x,x,x较远,则插值效果可能不理想。通常称由插值节点x,x,x所界定的的范围x, x为插值区间。若插值点x位于此插值区间内,则称此插值过程为内插,否则称之为外推。另外从余项中可以得知,余项公式含有高阶导数

34、,这要求被插函数有较高的光滑性。因此,如果被插函数不具有较好的光滑性,则拉格朗日插值的效果不一定理想。例4.3.1证明:对f(x)的以x,x为节点的线性插值p(x),插值误差满足f(x)p(x)|(x)|,xxx 4.4牛顿插值公式从拉格朗日插值过程中可以看出,n次和n-1次拉格朗日插值多项式p(x) ,p(x)之间没有构造上的联系,每个多项式都要重新单独构造,没有任何继承性。为此我们采用一种新的方法来构造插值多项式,不同的插值多项式之间有一定的递推关系:p(x)=ap(x)=a+a(x-x)p(x)=a+a(x-x)+a(x-x)(x-x)p(x)=a+a(x-x)+a(x-x)(x-x)(

35、x-x)即有递推关系p(x)= p(x)+a(x-x)(x-x)(x-x)为此我们先定义差商及性质。4.4.1差商及其性质对于给定的函数f(x),设f(x,x,xn)表示关于节点x,x,xn的n阶差商。函数值f(x)为零阶差商。一阶差商定义为:f(x,x);二阶差商定义为一阶差商的差商:f(x,x,x);一般地n阶差商定义为n-1阶差商的差商:f(x,x,x)差商可用函数值表示:f(x,x)f(x,x,x)+f(x,x,xn)f(xk)(xkxj)差商有如下性质:差商的值与节点的排列顺序列无关,即f(x,x)f(x, x)f(x,x,x)f(x,x,x)f(x,x,x) f(x,x,x)f(x

36、, x,x)f(x, x,x)例4.4.1设f(x)x3 4 x,基于节点x1,x2,x6构造差商表。4.4.2牛顿插值多项式按差商定义,我们有f(x)= f(x)+ f(x,x)(x-x)f(x,x)= f(x,x)+ f(x,x,x)(x-x)f(x,x,x)= f(x,x,x)+ f(x,x,x,x)(x-x)f(x,x,x,x)= f(x,x,x,x)+ f(x,x,x,x,x)(x-x)记p(x)= f(x)+ f(x,x)(x-x)+ f(x,x,x)(x-x)(x-x)+ f(x,x,x,x)(x-x)(x-x)(x-x)则f(x)f(x)+ f(x,x)(x-x)+ f(x,x

37、,x) (x-x) ( x-x)+f(x,x,x,x,x)(x-x)(x-x)(x-x)+f(x,x1,x,x,x)(x-x)(x-x)(x-x)(x-x)p(x)r(x)其中余项r(x)= f(x,x,x,x,x) (x-x) (x-x)(x-x)(x-x)。 从上述公式中易知,牛顿插值多项式p(x)满足p(x)y(i=0,1,2,n),故由插值问题解的唯一性,牛顿插值多项式p(x)就是拉格朗日插值多项式。由此可从余项中可以得到:定理4.4.1在节点x,x,x所界定的范围x,x内存在一点,使成立f(x,x,x,x) 。例4.4.2设f(x)x4 x,基于节点x1,x2,x6,分别构造次数为1,2,3,4,5的牛顿插值多项式。调用格式:>>x=1:6;>>y=x.-4*x;>>c,D=newton2(x,y)www.iLoveM密码:iLoveMatlab

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号