当前位置:首页 » 编程语言 » c语言曲面拟合

c语言曲面拟合

发布时间: 2022-08-12 22:57:34

❶ matlab 散点拟合三维曲面写出曲面表达式

为了直观表达我们所求的结果,我们喜欢用图像来表达。对于图像来说分类很多,如散点图,连续图,等高图等等。往往我们习惯把理论图像和模拟图像画在同一个图像,用来区分理论和模拟的吻合程度。

开启分步阅读模式
工具材料:
matlab

操作方法
01
scatter(X,Y,S,C),这是matlab画散点图的命令;这里X,Y是画散点图的数据。 其中S为大小,系统默认大小为50,C表示所画图的颜色。

02
x=1:0.05:10;
.
scatter(x,sin(x),100,'r')
.
.
.
这里通过散点画的是一个sinx 的图像,这里100表示所画图像点的大小,r代表标记散点的颜色。

03
scatter(X,Y)这个是默认画散点图的方法,一切设置按系统默认!X,Y表示散点图的X,Y坐标。下图的命令。
x=1:0.05:10;
scatter(x,cos(x))

04
scatter(X,Y,S) 这里所画的散点图,可以调节对应的大小。也就是说可以通过S这个参数调节标记点的大小。下图是我们将S=1000设置为1000的图像。scatter(...,M)更改标记的图形,默认是圆圈标记。如果需要用其他符号标记可以在这里修改。
scatter(...,'s') ;通过方形标记。
注意别忘了添加单引号。

02
scatter(...,'filled') 通过实心图像来标记。 前面的介绍中,一直是空心符号标记的。

03
scatter3: 立体散点图的画法,具体命令如下。
[x,y,z] = sphere(16);
X = [x(:)*.5 x(:)*.75 x(:)];
Y = [y(:)*.5 y(:)*.75 y(:)];
Z = [z(:)*.5 z(:)*.75 z(:)];
S = repmat([1 .75 .5]*10,numel(x),1);
C = repmat([1 2 3],numel(x),1);
scatter3(X(:),Y(:),Z(:),S(:),C(:),'filled'), view(-60,60)

❷ 如何用matlab进行多元非线性拟合

matlab拟合工具箱cftool
%拟合数据曲线;线性最小二乘法是解决曲线拟合的最常用的方法,
%1、多项式拟合函数;p=polyfit(x,y,n);求p拟合函数在xi处的近似值pi=polyval(p,xi);
%2、利用常用矩阵的除法解决复杂函数的拟合;
%3、利用lsqcurvefit函数和lsqnonlin函数拟合;
%4、利用cftool工具箱,自定义编写函数再通过M文件导出的形式

http://phylab.fudan.e.cn/doku.php?id=howtos:matlab:mt1-5

http://hi..com/zzz700/blog/item/f313a3f5869659b5a40f52d7.html英文参考

一、 单一变量的曲线逼近
Matlab有一个功能强大的曲线拟合工具箱 cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的 Matlab R2007b 来简单介绍如何使用这个工具箱。

假设我们要拟合的函数形式是 y=A*x*x + B*x, 且A>0,B>0。

1、在命令行输入数据:
》x=[110.3323 148.7328 178.064 202.8258033 224.7105 244.5711 262.908 280.0447 296.204 311.5475];
》y=[5 10 15 20 25 30 35 40 45 50];

2、启动曲线拟合工具箱
》cftool

3、进入曲线拟合工具箱界面“Curve Fitting tool”
(1)点击“Data”按钮,弹出“Data”窗口;
(2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图;
(3)点击“Fitting”按钮,弹出“Fitting”窗口;
(4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类型有:
Custom Equations:用户自定义的函数类型
Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving
Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
Power:幂逼近,有2种类型,a*x^b 、a*x^b + c
Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型
Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思)
Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)

选择好所需的拟合曲线类型及其子类型,并进行相关设置:
——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改待估计参数的上下限等参数;
——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations线性等式”和“General Equations构造等式”两种标签。

在本例中选Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函数类型y=a*x*x + b*x,设置参数a、b的上下限,然后点击OK。

(5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例:
general model:
f(x) = a*x*x+b*x

Coefficients (with 95% confidence bounds):
a = 0.009194 (0.009019, 0.00937)
b = 1.78e-011 (fixed at bound)

Goodness of fit:
SSE: 6.146
R-square: 0.997
Adjusted R-square: 0.997
RMSE: 0.8263

同时,也会在工具箱窗口中显示拟合曲线。

这样,就完成一次曲线拟合啦,十分方便快捷。当然,如果你觉得拟合效果不好,还可以在“Fitting”窗口点击“New fit”按钮,按照步骤(4)~(5)进行一次新的拟合。

不过,需要注意的是,cftool 工具箱只能进行单个变量的曲线拟合,即待拟合的公式中,变量只能有一个。对于混合型的曲线,例如 y = a*x + b/x ,工具箱的拟合效果并不好。下一篇文章我介绍帮同学做的一个非线性函数的曲线拟合。
上边对cftool工具箱做了很详尽的说明,但并没有对各种曲线拟合的性能做点评,在单变量曲线拟合中,如何选取一种最优化的拟合方式是非常重要的,我们在采用CFTOOL拟合后,会有一些性能说明,如:
Goodness of fit:
SSE: 6.146
R-square: 0.997
Adjusted R-square: 0.997
RMSE: 0.8263

官方的解释:
Results -- Displays detailed results for the current fit including the fit type (model, spline, or interpolant), the fitted coefficients and 95% confidence bounds for parametric fits, and these goodness of fit statistics:

SSE -- The sum of squares e to error. This statistic measures the deviation of the responses from the fitted values of the responses. A value closer to 0 indicates a better fit.

R-square -- The coefficient of multiple determination. This statistic measures how successful the fit is in explaining the variation of the data. A value closer to 1 indicates a better fit.

Adjusted R-square -- The degree of freedom adjusted R-square. A value closer to 1 indicates a better fit. It is generally the best indicator of the fit quality when you add additional coefficients to your model.

RMSE -- The root mean squared error. A value closer to 0 indicates a better fit.

Matlab曲面拟合和插值 AAAAAAAAAAA风云博客
http://xiaoqiang851224.blog.163.com/blog/#m=0&t=1&c=fks_
http://suhao198706.blog.163.com/blog/static/62173403201121095512602/?fromdm&fromSearch&isFromSearchEngine=yes

Matlab曲线拟合
http://xiaoqiang851224.blog.163.com/blog/static/30247003201153083539419/?fromdm&fromSearch&isFromSearchEngine=yes

多项式拟合函数polyfit之C语言的源码

http://xiaoqiang851224.blog.163.com/blog/static/30247003201010251055758/

matlab二元函数拟合;

http://..com/question/141374449.html?fr=qrl&cid=93&index=2

matlab非线性拟合1(指数函数)

http://apps.hi..com/share/detail/43922314

❸ origin曲面拟合哪个精确

origin曲面拟合表格精确。

将数据粘贴至origin的表格处。虽然两个软件的拟合原理一样,但迭代次数的不同,需要达到的结果精度要求不同等均会导致结果的差异。若拟合的各种参数设定均一致,则结果必定相同。两个软件没什么优劣之分,结果都可选用。

界面:

Origin是一个具有电子数据表前端的图形化用户界面软件。与常用的电子制表软件不同,如Excel。Origin的工作表是以列为对象的,每一列具有相应的属性,例如名称,数量单位,以及其他用户自定义标识。Origin以列计算式取代数据单元计算式进行计算。

Origin可使用自身的脚本语言(LabTalk)去控制软件,该语言可使用Origin C进行扩展。Origin C是内置的基于C/C++的编译语言。

值得注意的是,Origin可以作为一个COM服务器,通过VB.NET,C#,LabVIEW等程序进行调用。

❹ C语言算法速查手册的目录

第1章绪论1
1.1程序设计语言概述1
1.1.1机器语言1
1.1.2汇编语言2
1.1.3高级语言2
1.1.4C语言3
1.2C语言的优点和缺点4
1.2.1C语言的优点4
1.2.2C语言的缺点6
1.3算法概述7
1.3.1算法的基本特征7
1.3.2算法的复杂度8
1.3.3算法的准确性10
1.3.4算法的稳定性14
第2章复数运算18
2.1复数的四则运算18
2.1.1[算法1]复数乘法18
2.1.2[算法2]复数除法20
2.1.3【实例5】 复数的四则运算22
2.2复数的常用函数运算23
2.2.1[算法3]复数的乘幂23
2.2.2[算法4]复数的n次方根25
2.2.3[算法5]复数指数27
2.2.4[算法6]复数对数29
2.2.5[算法7]复数正弦30
2.2.6[算法8]复数余弦32
2.2.7【实例6】 复数的函数运算34
第3章多项式计算37
3.1多项式的表示方法37
3.1.1系数表示法37
3.1.2点表示法38
3.1.3[算法9]系数表示转化为点表示38
3.1.4[算法10]点表示转化为系数表示42
3.1.5【实例7】系数表示法与点表示法的转化46
3.2多项式运算47
3.2.1[算法11]复系数多项式相乘47
3.2.2[算法12]实系数多项式相乘50
3.2.3[算法13]复系数多项式相除52
3.2.4[算法14]实系数多项式相除54
3.2.5【实例8】复系数多项式的乘除法56
3.2.6【实例9】实系数多项式的乘除法57
3.3多项式的求值59
3.3.1[算法15]一元多项式求值59
3.3.2[算法16]一元多项式多组求值60
3.3.3[算法17]二元多项式求值63
3.3.4【实例10】一元多项式求值65
3.3.5【实例11】二元多项式求值66
第4章矩阵计算68
4.1矩阵相乘68
4.1.1[算法18]实矩阵相乘68
4.1.2[算法19]复矩阵相乘70
4.1.3【实例12】 实矩阵与复矩阵的乘法72
4.2矩阵的秩与行列式值73
4.2.1[算法20]求矩阵的秩73
4.2.2[算法21]求一般矩阵的行列式值76
4.2.3[算法22]求对称正定矩阵的行列式值80
4.2.4【实例13】 求矩阵的秩和行列式值82
4.3矩阵求逆84
4.3.1[算法23]求一般复矩阵的逆84
4.3.2[算法24]求对称正定矩阵的逆90
4.3.3[算法25]求托伯利兹矩阵逆的Trench方法92
4.3.4【实例14】 验证矩阵求逆算法97
4.3.5【实例15】 验证T矩阵求逆算法99
4.4矩阵分解与相似变换102
4.4.1[算法26]实对称矩阵的LDL分解102
4.4.2[算法27]对称正定实矩阵的Cholesky分解104
4.4.3[算法28]一般实矩阵的全选主元LU分解107
4.4.4[算法29]一般实矩阵的QR分解112
4.4.5[算法30]对称实矩阵相似变换为对称三对角阵116
4.4.6[算法31]一般实矩阵相似变换为上Hessen-Burg矩阵121
4.4.7【实例16】 对一般实矩阵进行QR分解126
4.4.8【实例17】 对称矩阵的相似变换127
4.4.9【实例18】 一般实矩阵相似变换129
4.5矩阵特征值的计算130
4.5.1[算法32]求上Hessen-Burg矩阵全部特征值的QR方法130
4.5.2[算法33]求对称三对角阵的全部特征值137
4.5.3[算法34]求对称矩阵特征值的雅可比法143
4.5.4[算法35]求对称矩阵特征值的雅可比过关法147
4.5.5【实例19】 求上Hessen-Burg矩阵特征值151
4.5.6【实例20】 分别用两种雅克比法求对称矩阵特征值152
第5章线性代数方程组的求解154
5.1高斯消去法154
5.1.1[算法36]求解复系数方程组的全选主元高斯消去法155
5.1.2[算法37]求解实系数方程组的全选主元高斯消去法160
5.1.3[算法38]求解复系数方程组的全选主元高斯-约当消去法163
5.1.4[算法39]求解实系数方程组的全选主元高斯-约当消去法168
5.1.5[算法40]求解大型稀疏系数矩阵方程组的高斯-约当消去法171
5.1.6[算法41]求解三对角线方程组的追赶法174
5.1.7[算法42]求解带型方程组的方法176
5.1.8【实例21】 解线性实系数方程组179
5.1.9【实例22】 解线性复系数方程组180
5.1.10【实例23】 解三对角线方程组182
5.2矩阵分解法184
5.2.1[算法43]求解对称方程组的LDL分解法184
5.2.2[算法44]求解对称正定方程组的Cholesky分解法186
5.2.3[算法45]求解线性最小二乘问题的QR分解法188
5.2.4【实例24】 求解对称正定方程组191
5.2.5【实例25】 求解线性最小二乘问题192
5.3迭代方法193
5.3.1[算法46]病态方程组的求解193
5.3.2[算法47]雅克比迭代法197
5.3.3[算法48]高斯-塞德尔迭代法200
5.3.4[算法49]超松弛方法203
5.3.5[算法50]求解对称正定方程组的共轭梯度方法205
5.3.6[算法51]求解托伯利兹方程组的列文逊方法209
5.3.7【实例26】 解病态方程组214
5.3.8【实例27】 用迭代法解方程组215
5.3.9【实例28】 求解托伯利兹方程组217
第6章非线性方程与方程组的求解219
6.1非线性方程求根的基本过程219
6.1.1确定非线性方程实根的初始近似值或根的所在区间219
6.1.2求非线性方程根的精确解221
6.2求非线性方程一个实根的方法221
6.2.1[算法52]对分法221
6.2.2[算法53]牛顿法223
6.2.3[算法54]插值法226
6.2.4[算法55]埃特金迭代法229
6.2.5【实例29】 用对分法求非线性方程组的实根232
6.2.6【实例30】 用牛顿法求非线性方程组的实根233
6.2.7【实例31】 用插值法求非线性方程组的实根235
6.2.8【实例32】 用埃特金迭代法求非线性方程组的实根237
6.3求实系数多项式方程全部根的方法238
6.3.1[算法56]QR方法238
6.3.2【实例33】用QR方法求解多项式的全部根240
6.4求非线性方程组一组实根的方法241
6.4.1[算法57]梯度法241
6.4.2[算法58]拟牛顿法244
6.4.3【实例34】 用梯度法计算非线性方程组的一组实根250
6.4.4【实例35】 用拟牛顿法计算非线性方程组的一组实根252
第7章代数插值法254
7.1拉格朗日插值法254
7.1.1[算法59]线性插值255
7.1.2[算法60]二次抛物线插值256
7.1.3[算法61]全区间插值259
7.1.4【实例36】 拉格朗日插值262
7.2埃尔米特插值263
7.2.1[算法62]埃尔米特不等距插值263
7.2.2[算法63]埃尔米特等距插值267
7.2.3【实例37】 埃尔米特插值法270
7.3埃特金逐步插值271
7.3.1[算法64]埃特金不等距插值272
7.3.2[算法65]埃特金等距插值275
7.3.3【实例38】 埃特金插值278
7.4光滑插值279
7.4.1[算法66]光滑不等距插值279
7.4.2[算法67]光滑等距插值283
7.4.3【实例39】 光滑插值286
7.5三次样条插值287
7.5.1[算法68]第一类边界条件的三次样条函数插值287
7.5.2[算法69]第二类边界条件的三次样条函数插值292
7.5.3[算法70]第三类边界条件的三次样条函数插值296
7.5.4【实例40】 样条插值法301
7.6连分式插值303
7.6.1[算法71]连分式插值304
7.6.2【实例41】 验证连分式插值的函数308
第8章数值积分法309
8.1变步长求积法310
8.1.1[算法72]变步长梯形求积法310
8.1.2[算法73]自适应梯形求积法313
8.1.3[算法74]变步长辛卜生求积法316
8.1.4[算法75]变步长辛卜生二重积分方法318
8.1.5[算法76]龙贝格积分322
8.1.6【实例42】 变步长积分法进行一重积分325
8.1.7【实例43】 变步长辛卜生积分法进行二重积分326
8.2高斯求积法328
8.2.1[算法77]勒让德-高斯求积法328
8.2.2[算法78]切比雪夫求积法331
8.2.3[算法79]拉盖尔-高斯求积法334
8.2.4[算法80]埃尔米特-高斯求积法336
8.2.5[算法81]自适应高斯求积方法337
8.2.6【实例44】 有限区间高斯求积法342
8.2.7【实例45】 半无限区间内高斯求积法343
8.2.8【实例46】 无限区间内高斯求积法345
8.3连分式法346
8.3.1[算法82]计算一重积分的连分式方法346
8.3.2[算法83]计算二重积分的连分式方法350
8.3.3【实例47】 连分式法进行一重积分354
8.3.4【实例48】 连分式法进行二重积分355
8.4蒙特卡洛法356
8.4.1[算法84]蒙特卡洛法进行一重积分356
8.4.2[算法85]蒙特卡洛法进行二重积分358
8.4.3【实例49】 一重积分的蒙特卡洛法360
8.4.4【实例50】 二重积分的蒙特卡洛法361
第9章常微分方程(组)初值问题的求解363
9.1欧拉方法364
9.1.1[算法86]定步长欧拉方法364
9.1.2[算法87]变步长欧拉方法366
9.1.3[算法88]改进的欧拉方法370
9.1.4【实例51】 欧拉方法求常微分方程数值解372
9.2龙格-库塔方法376
9.2.1[算法89]定步长龙格-库塔方法376
9.2.2[算法90]变步长龙格-库塔方法379
9.2.3[算法91]变步长基尔方法383
9.2.4【实例52】 龙格-库塔方法求常微分方程的初值问题386
9.3线性多步法390
9.3.1[算法92]阿当姆斯预报校正法390
9.3.2[算法93]哈明方法394
9.3.3[算法94]全区间积分的双边法399
9.3.4【实例53】 线性多步法求常微分方程组初值问题401
第10章拟合与逼近405
10.1一元多项式拟合405
10.1.1[算法95]最小二乘拟合405
10.1.2[算法96]最佳一致逼近的里米兹方法412
10.1.3【实例54】 一元多项式拟合417
10.2矩形区域曲面拟合419
10.2.1[算法97]矩形区域最小二乘曲面拟合419
10.2.2【实例55】 二元多项式拟合428
第11章特殊函数430
11.1连分式级数和指数积分430
11.1.1[算法98]连分式级数求值430
11.1.2[算法99]指数积分433
11.1.3【实例56】 连分式级数求值436
11.1.4【实例57】 指数积分求值438
11.2伽马函数439
11.2.1[算法100]伽马函数439
11.2.2[算法101]贝塔函数441
11.2.3[算法102]阶乘442
11.2.4【实例58】伽马函数和贝塔函数求值443
11.2.5【实例59】阶乘求值444
11.3不完全伽马函数445
11.3.1[算法103]不完全伽马函数445
11.3.2[算法104]误差函数448
11.3.3[算法105]卡方分布函数450
11.3.4【实例60】不完全伽马函数求值451
11.3.5【实例61】误差函数求值452
11.3.6【实例62】卡方分布函数求值453
11.4不完全贝塔函数454
11.4.1[算法106]不完全贝塔函数454
11.4.2[算法107]学生分布函数457
11.4.3[算法108]累积二项式分布函数458
11.4.4【实例63】不完全贝塔函数求值459
11.5贝塞尔函数461
11.5.1[算法109]第一类整数阶贝塞尔函数461
11.5.2[算法110]第二类整数阶贝塞尔函数466
11.5.3[算法111]变型第一类整数阶贝塞尔函数469
11.5.4[算法112]变型第二类整数阶贝塞尔函数473
11.5.5【实例64】贝塞尔函数求值476
11.5.6【实例65】变型贝塞尔函数求值477
11.6Carlson椭圆积分479
11.6.1[算法113]第一类椭圆积分479
11.6.2[算法114]第一类椭圆积分的退化形式481
11.6.3[算法115]第二类椭圆积分483
11.6.4[算法116]第三类椭圆积分486
11.6.5【实例66】第一类勒让德椭圆函数积分求值490
11.6.6【实例67】第二类勒让德椭圆函数积分求值492
第12章极值问题494
12.1一维极值求解方法494
12.1.1[算法117]确定极小值点所在的区间494
12.1.2[算法118]一维黄金分割搜索499
12.1.3[算法119]一维Brent方法502
12.1.4[算法120]使用一阶导数的Brent方法506
12.1.5【实例68】使用黄金分割搜索法求极值511
12.1.6【实例69】使用Brent法求极值513
12.1.7【实例70】使用带导数的Brent法求极值515
12.2多元函数求极值517
12.2.1[算法121]不需要导数的一维搜索517
12.2.2[算法122]需要导数的一维搜索519
12.2.3[算法123]Powell方法522
12.2.4[算法124]共轭梯度法525
12.2.5[算法125]准牛顿法531
12.2.6【实例71】验证不使用导数的一维搜索536
12.2.7【实例72】用Powell算法求极值537
12.2.8【实例73】用共轭梯度法求极值539
12.2.9【实例74】用准牛顿法求极值540
12.3单纯形法542
12.3.1[算法126]求无约束条件下n维极值的单纯形法542
12.3.2[算法127]求有约束条件下n维极值的单纯形法548
12.3.3[算法128]解线性规划问题的单纯形法556
12.3.4【实例75】用单纯形法求无约束条件下N维的极值568
12.3.5【实例76】用单纯形法求有约束条件下N维的极值569
12.3.6【实例77】求解线性规划问题571
第13章随机数产生与统计描述574
13.1均匀分布随机序列574
13.1.1[算法129]产生0到1之间均匀分布的一个随机数574
13.1.2[算法130]产生0到1之间均匀分布的随机数序列576
13.1.3[算法131]产生任意区间内均匀分布的一个随机整数577
13.1.4[算法132]产生任意区间内均匀分布的随机整数序列578
13.1.5【实例78】产生0到1之间均匀分布的随机数序列580
13.1.6【实例79】产生任意区间内均匀分布的随机整数序列581
13.2正态分布随机序列582
13.2.1[算法133]产生任意均值与方差的正态分布的一个随机数582
13.2.2[算法134]产生任意均值与方差的正态分布的随机数序列585
13.2.3【实例80】产生任意均值与方差的正态分布的一个随机数587
13.2.4【实例81】产生任意均值与方差的正态分布的随机数序列588
13.3统计描述589
13.3.1[算法135]分布的矩589
13.3.2[算法136]方差相同时的t分布检验591
13.3.3[算法137]方差不同时的t分布检验594
13.3.4[算法138]方差的F检验596
13.3.5[算法139]卡方检验599
13.3.6【实例82】计算随机样本的矩601
13.3.7【实例83】t分布检验602
13.3.8【实例84】F分布检验605
13.3.9【实例85】检验卡方检验的算法607
第14章查找609
14.1基本查找609
14.1.1[算法140]有序数组的二分查找609
14.1.2[算法141]无序数组同时查找最大和最小的元素611
14.1.3[算法142]无序数组查找第M小的元素613
14.1.4【实例86】基本查找615
14.2结构体和磁盘文件的查找617
14.2.1[算法143]无序结构体数组的顺序查找617
14.2.2[算法144]磁盘文件中记录的顺序查找618
14.2.3【实例87】结构体数组和文件中的查找619
14.3哈希查找622
14.3.1[算法145]字符串哈希函数622
14.3.2[算法146]哈希函数626
14.3.3[算法147]向哈希表中插入元素628
14.3.4[算法148]在哈希表中查找元素629
14.3.5[算法149]在哈希表中删除元素631
14.3.6【实例88】构造哈希表并进行查找632
第15章排序636
15.1插入排序636
15.1.1[算法150]直接插入排序636
15.1.2[算法151]希尔排序637
15.1.3【实例89】插入排序639
15.2交换排序641
15.2.1[算法152]气泡排序641
15.2.2[算法153]快速排序642
15.2.3【实例90】交换排序644
15.3选择排序646
15.3.1[算法154]直接选择排序646
15.3.2[算法155]堆排序647
15.3.3【实例91】选择排序650
15.4线性时间排序651
15.4.1[算法156]计数排序651
15.4.2[算法157]基数排序653
15.4.3【实例92】线性时间排序656
15.5归并排序657
15.5.1[算法158]二路归并排序658
15.5.2【实例93】二路归并排序660
第16章数学变换与滤波662
16.1快速傅里叶变换662
16.1.1[算法159]复数据快速傅里叶变换662
16.1.2[算法160]复数据快速傅里叶逆变换666
16.1.3[算法161]实数据快速傅里叶变换669
16.1.4【实例94】验证傅里叶变换的函数671
16.2其他常用变换674
16.2.1[算法162]快速沃尔什变换674
16.2.2[算法163]快速哈达玛变换678
16.2.3[算法164]快速余弦变换682
16.2.4【实例95】验证沃尔什变换和哈达玛的函数684
16.2.5【实例96】验证离散余弦变换的函数687
16.3平滑和滤波688
16.3.1[算法165]五点三次平滑689
16.3.2[算法166]α-β-γ滤波690
16.3.3【实例97】验证五点三次平滑692
16.3.4【实例98】验证α-β-γ滤波算法693

❺ 数控机床上加工未知曲面

在机械设计时,利用三维设计软件进行实体造型,比如UG、PRO/E等等,并且利用软件自带的CAM包自动生成NC程序,加工是无需曲面参数
三坐标测量仪是通过测定曲面上的点集,通过三维设计软件,近似画出全面,可以通过测量--造型--加工--再测量--再造型--在加工的不断修正得到所需要的曲面
CAXA实体设计是国产的三维设计软件,在功能上无法与国外一流的软件相比

❻ 如何将一个工作表里的数据做曲面拟合求具体的MATLAB程序

如:2.xls里的工作表数据格式为,A单元格为x值,B单元格为y值,C单元格为z值,则
A=xlsread('2.xls'); %读数据
x=A(:,1)
y=A(:,2)
z=A(:,3)
X=(x,y)
func=inline('a(1).*X(:,1).^2+a(2).*X(:,2).^2+a(3)','a','X'); %自定义函数
a0=[a10 a20 a30] %函数系数的初值,为具体的数值
[a,r,J] = nlinfit(x,y,func,a0);
%方程z=a*x²+b*y²+c

c=a(3),b=a(2),a=a(1) %函数的系数值

❼ C++或Basic编程

1)数据数据的概念十分广泛,它通常是对客观事物的数量、特征、性质的描述。对计算机而言,数据是计算机所能处理的一切数值、字符、图形或其他特定符号的总称,是计算机加工处理的“原料”和它所生产的“产品”(计算的结果)。2)数据元素数据元素是数据的基本单位,也称作结点和记录。在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。3)数据对象数据对象是具有相同性质的数据元素的集合,是数据的子集。 1、 数据结构(Data Structure)

数据结构是指同一数据对象中个数据元素之间存在的关系(相互间存在一种或多种特定关系的数据元素的集合)。

根据数据结构的形式定义,数据结构是一个二元组:

S(Data-Structure)=(D,R)

其中:D是数据元素的有限集,R是D上关系的有限集。

逻辑结构与物理结构

数据之间的相互关系称为逻辑结构。通常分为三类基本结构:

(一)集合:结构中的数据元素除了同属于一种类型外,别无其它关系。

(二)线性结构:结构中的数据元素之间存在一对一的关系。

(三)非线性结构:

树型结构——结构中的数据元素之间存在一对多的关系。

图状结构或网状结构——结构中的数据元素之间存在多对多的关系。

数据结构在计算机中的表示称为数据的物理结构,又称为存储结构。

(一般我们将数据的逻辑结构称为是数据结构,)

存储结构可分为:顺序存储与链式存储。

顺序存储结构——借助元素在存储器中的相对位置来表示数据元素间的逻辑关系;

链式存储结构——借助指示元素存储地址的指针表示数据元素间的逻辑关系。

数据的逻辑结构与存储结构密切相关。

2.1.2 线性表

1)线性表定义

线性表(Linear List) :由n(n≧)个数据元素(结点)a1,a2, …an组成的有限序列。其中数据元素的个数n定义为表的长度。当n=0时称为空表,常常将非空的线性表(n>0)记作:

L = (a1,a2,…an)

这里的数据元素ai(1≦i≦n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。

2)线性表特点

线性表的逻辑结构有以下特点:

在数据元素的非空有限集中

Ø 存在唯一的一个被称作“第一个”的数据元素

Ø 存在唯一的一个被称作“最后一个”的数据元素

Ø 除第一个外,集合中的每个数据元素均只有一个前驱

Ø 除最后一个外,集合中的每个数据元素均只有一个后继

3)线性表的基本运算

线性表的主要运算有:

插入:在两个确定元素之间插入一个新元素;

删除:删除线性表中的某个元素;

查找:按某种要求查找线性表中的一个元素,需要时还可以进行更新;

排序:按给定要求对表中元素重新排序;

还有初始化、求长度等。

在不同问题的线性表中,需要进行的运算也不相同,实际应用中还可能涉及建立线性表、修改表中元素数值(编辑)等运算,但是基本上可以由上述四种运算组成。

4)顺序存储线性表

(1)顺序存储结构

把线性表的数据元素,按顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表,也称为向量式存储结构。

假设线性表的每个元素需占用个存储单元,且线性表在内存中的首地址为,则线性表中第个数据元素的存储地址为:

则线性表中第个数据元素的存储位置和第个数据元素的存储位置之间满足下列关系:

这种存储结构只要知道数据元素序号,就很容易找到第个数据元素。它的主要特点有:一、各数据元素存储地址上相邻;二、无论序号为何值,找到第个元素的时间相同。

这种存储结构在高级语言中可以用一维数组的形式实现。

(2)顺序存储结构的优缺点

优点

Ø 逻辑相邻,物理相邻;

Ø 可随机存取任一元素;

Ø 存储空间使用紧凑。

缺点

Ø 插入、删除操作需要移动大量的元素;

Ø 预先分配空间需按最大空间分配,利用不充分;

Ø 表容量难以扩充。

5)线性链表

特点:

Ø 用一组任意的存储单元存储线性表的数据元素;

Ø 利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素;

Ø 每个数据元素,除存储本身信息外,还需存储其直接后继的信息。

数据元素由两部分组成:

Ø 数据域:存放元素本身信息;

Ø 指针域:指示直接后继的存储地址。

线性链表一般在第一个结点之前附加一个头结点:

2.1.3 栈与队

栈和队是两种特殊的线性表,它们的运算规则较一般线性表由更多的约束和限制,因此称作限定性数据结构。

1)栈的结构和运算

(1)栈的定义

栈(Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。

假设栈,则称为栈底元素,为栈顶元素。栈中元素按的次序进栈,的顺序退栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。因此,栈称为后进先出表(LIFO,last in first out)。

栈的存储结构也有顺序与链式两种,称为顺序栈与链栈。

(2)顺序栈

由于栈是运算受限的线性表,因此线性表的存储结构对栈也适应。

栈的顺序存储结构简称为顺序栈,它是运算受限的线性表。因此,可用数组来实现顺序栈。因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈操作而变化的,故需用一个整型变量top来指示栈顶位置。如果用m来表示栈的最大容量,则top=0表示栈空,此时出栈,则下溢(underflow);top=m表示栈满,此时入栈,则上溢(overflow)。

(3)栈的应用

表达式求值

表达式求值步骤:首先在OS栈中放入表达式结束符“;”,

l 若为操作数,将其压入NS栈;

l 若为运算符,比较当前OS栈的栈顶元素:

ü 若当前运算符的优先数大于OS栈顶的运算符,则将当前运算符压入OS栈;

ü 若当前运算符的优先数不大于OS栈顶运算符,则从NS栈中弹出两个操作数x,y,再从OS中弹出一个运算符,,并将结果T送入NS栈。

ü 若当前运算符为“;”,且OS栈顶也为“;”,则表示表达式处理结束,此时,NS栈顶元素即为此表达式值。

过程嵌套和递归调用

过程嵌套调用如图所示:

当调用子过程时,必须把断点的信息及地址保存起来,当子过程执行完毕,返回时,取用这些信息,找到返回地址,从此断点继续执行。当程序中出现多重嵌套调用时,必须开辟一个栈,将各层断点信息依次入栈,当各层子过程返回时,又以相反的次序从栈顶取出。

递归调用

函数直接或间接地调用自身叫递归调用,这主要时用递归工作栈来实现的。下面举一个简单的例子来说明递归调用。

例 一段递归调用的C语言程序如下:

void print(int w)

{

int I;

if (w!=0)

{

print (w-1);

for (I=1; I<=w; ++I)

printf(“%3d,”,w);

printf(“/n”);

}

}

在这段程序中,递归调用的执行过程如图所示:

2) 队的结构和运算

(1)队的定义

队是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。

队尾(rear)——允许插入的一端

队头(front)——允许删除的一端

队的特点是:先进先出(FIFO)

(2)顺序队

存在问题:

设数组维数为M,则:

当front=-1,rear=M-1时,再有元素入队发生溢出——真溢出

l当front¹-1,rear=M-1时,再有元素入队发生溢出——假溢出

解决方案:

l 队首固定,每次出队剩余元素向下移动——浪费时间

l 循环队列

Ø 基本思想:把队列设想成环形,让sq[0]接在sq[M-1]之后,若rear+1==M,则令rear=0;

Ø 实现:利用“模”运算

入队: rear=(rear+1)%M; sq[rear]=x;

出队: front=(front+1)%M; x=sq[front];

Ø 队满、队空判定条件

front=rear

解决方案:

n 另外设一个标志以区别队空、队满

n 少用一个元素空间:

队空:front==rear

队满:(rear+1)%M==front

2.1.4 数组

1)数组的定义

(1)定义

数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表。用线性表的一般表示形式定义二维数组为:

其中,K由个结点组成:

R由以下两种关系组成:

(2)数组特点

l 数组结构固定

l 数据元素同构

(3)数组运算

数组一旦被定义,它的维数和数据元素的个数就已经固定,不能插入和删除,所以数组运算只有:

l 给定一组下标,存取相应的数据元素

l 给定一组下标,修改数据元素的值

2)数组的顺序存储结构

由于计算机的内存结构是一维的,因此用一维内存来表示多维数组,就必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放在存储器中。

又由于对数组一般不做插入和删除操作,也就是说,数组一旦建立,结构中的元素个数和元素间的关系就不再发生变化。因此,一般都是采用顺序存储的方法来表示数组。

根据不同的存放形式,可以分为按行优先和按列优先顺序存放。

(1)按行优先顺序存放

按行优先顺序存放,对二维数组来说就是按行进行切分,如图所示:

假设每个数据元素只占一个单元地址,则元素的存放地址可以通过以下关系式计算:

(2)按列优先顺序存放

如果数组按列切分,就得到按列优先顺序存放方式。如图所示:

元素的存放地址可以通过以下关系式计算:

2.1.5 树与二叉树

1)树的定义及其存储结构

(1)树的定义和术语

定义:树(Tree)是n(n>=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:

(1)有且仅有一个特定的称为根(Root)的结点;

(2)其余的结点可分为m(m>=0)个互不相交的子集T1,T2,T3…Tm,其中每个子集又是一棵树,并称其为子树(Subtree)。

基本术语:

l 结点(node)——表示树中的元素,包括数据项及若干指向其子树的分支;

l 结点的度(degree)——结点拥有的子树数;

l 叶子(leaf)——度为0的结点;

l 孩子(child)——结点子树的根称为该结点的孩子;

l 双亲(parents)——孩子结点的上层结点叫该结点的双亲;

l 兄弟(sibling)——同一双亲的孩子;

l 树的度——一棵树中最大的结点度数;

l 结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层……;

l 深度(depth)——树中结点的最大层次数;

l 森林(forest)——m(m>=0)棵互不相交的树的集合;

(2)树的存储结构

树的存储结构有多种形式,这里只讨论链式存储结构。因为树是多分支非线性表,因此采用多重链表结构,即每个结点设有多个指针域,其中每个指针指向一棵子树的根结点。对于每一个结点的结构类型有两种形式:结点异构型、结点同构型。

结点异构型,是根据每个结点的子树数设置相应的指针域,由于每个结点的度数不同,则同一棵树中,结点形式也不同。这种结构形式虽然能节省存储空间,但运算不方便。

结点同构型,是每个结点的指针域个数均为树的度数。这种形式运算方便,但会使链表中出现很多空链域,浪费空间。

当树的度数k=2时,空链域的比例最低,这就是要介绍的二叉树。

2)二叉树及其性质

二叉树在树结构的应用中起着非常重要的作用,因为对二叉树的许多操作算法简单,而任何树都可以与二叉树 相互转换,这样就解决了树的存储结构及其运算中存在的复杂性。

(1)二叉树定义及其存储结构

定义:二叉树是由n(n>=0)个结点的有限集合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。

这也是一个递归定义。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。

二叉树结点的子树要区分左子树和右子树,即使只有一棵子树也要进行区分,说明它是左子树,还是右子树。这是二叉树与树的最主要的差别。

图2-8 二叉树

存储结构:通常用具有两个指针域的链表作为二叉树的存储结构,其中,每个结点由数据域(data)、左指针域(L child)和右指针域(R child)组成,如图所示:

图2-9 二叉链表

这就是二叉链表,还有三叉链表就是在这一基础上增加一个双亲结点指针。

(2)二叉树的基本性质

(1) 在二叉树的第层上,至多有个结点。

(2) 深度为h的二叉树中,至多含有个结点。

(3) 对任意一棵二叉树,若有个子结点,个度为2的结点,则必有。

(3)几种特殊形式的二叉树

l 满二叉树

一棵深度为h且有2h-1个结点的二叉树称为满二叉树。

l 完全二叉树

如果深度为h、有n个结点的二叉树中的结点能够与深度为h的顺序编号的满二叉树从1到n标号的结点相对应,则该树称为完全二叉树。

完全二叉树的特点是:

所有的叶结点都出现在第h层或h-1层。

错任一结点,如果其右子树的最大层次为1,则其左子树的最大层次为1或l+1。

满二叉树是完全二叉树的特例。

(1) 平衡二叉树

所有结点的平衡因子为-1、0、1。

(4)一般树转换为二叉树

为了使一般树也能象二叉树一样用二叉树链表表示,必须找出树与二叉树之间的对应关系。将一般树转换为二叉树的方法为:

(1) 在兄弟结点之间加一连线;

(2) 对每个结点,除了与它的第一个孩子保持联系外,去除与其它孩子的联系;

(3) 以树根为轴心将整棵树顺时针旋转45度。

任何一棵树转换为二叉树,其根结点的右子树必为空。

3)二叉树的遍历

遍历——按一定规律走遍树的各个结点,每一结点仅被访问一次,即找一个完整而有规律的走法,以得到树中所有结点的一个线性排列。

常用方法

先序遍历(DLR):先访问根结点,然后分别先序遍历左子树、右子树

中序遍历(LDR):先中序遍历左子树,然后访问根结点,最后中序遍历右子树

后序遍历(LRD):先后序遍历左、右子树,然后访问根结点

2.2 工程手册的数据处理

基本要求:

(1)熟悉工程手册的数据处理方法;(2)掌握数表的程序化方法;(3)了解线图的程序化方法;(4)掌握最小二乘法拟合方法及其应用;(4)能用高级程序设计语言(如C语言)编写前述相应数据处理方法的基本程序并上机通过。

教学内容:

(1)数表的程序化;(2)线图的程序化;(3)建立经验公式的方法。

重点与难点:

重点:(1)查表程序设计;(2)一元函数的插值;(3)最小二乘法拟合。

难点:(1)抛物线插值中结点的选取;(2)插值程序设计及上机调试;(3)最小二乘法拟合程序设计及上机调试。

学时安排:

讲课4学时,课外上机练习不少于2学时。

在机械设计过程中,往往需要从有关的工程手册或设计规范中查找各种设计数据(资料)。这些数据在手册或规范中一般是以数表和线图的形式存放(记录)的。在进行机械CAD时,首先要把这些数表、线图形式的数据计算机化,即把它们存入计算机外、内存储器中,并设计相应的自动检索程序。

从总体上说,这些设计资料的计算机处理有以下三种方法:

(1)程序化:在应用程序内部对这些数表和线图进行处理,包括数组法和拟合公式法。

(2)数据文件法:将数表或线图中得数据编成一个独立的数据文件,存入外存,供设计解题时调用。高级程序设计语言本身一般均具备相应的数据文件处理功能。

(3)数据库法:将数表或线图中的数据暗数据库中的规定进行文件结构化,即建成数据库。

本章重点讨论程序化方法,补充介绍有关数据文件法的基本内容,数据库存储方法在后面第5章中介绍。

2.2.1 数表的程序化

l 数表的形式:

从函数角度看有:

单变量表:e.g. T.3-1~T.3-3

双变量表:e.g. T.3-4~T.3-5 单值表:e.g. T.3-3~T.3-6

多变量表:e.g. T.3-6 多值表:e.g. T.3-1~T.3-2

无变量表:e.g. 齿轮标准模数(m)系列值。

l 数表数据的形成(来源)及处理原则:

(1)有些本来就有精确的计算公式,为了便于手工设计使用,才制成表格供设计时查用(如各种数学用表)——力求找到原来的理论计算公式或经验公式→编入应用程序。(最简单的方法)。

(2)对大多数数表而言,或本来就无法表达成公式,或一时难以找到原来公式——程序化处理。

l 数表程序化方法:

1) 数组法:适于只需要用数表中所列数据(离散点、型值点或结点数据),

2) 插值法(拟合公式法):对于需要用到数表中各离散点中间的数据。

1)数组法实例

本教材共介绍了六个实例,这里选取二个重点介绍,其余四个自己分析。

例1 平键和键槽的剖面尺寸,见图2-10和表2-1(摘引自GB/T 1095-1979)

它是单变量多值表。查表时,设计计算出的轴径dgiven→D(范围) →b,h,t,t1。可使用一维数组,D的范围可用其上限表示。变量及数组的定义:

int i;

float dgiven,b,h,t,t1;

float D[12]={10.0,12.0,…,85.0};

float kb[12]=…

.

.

.

float kt[12]=…

图2-10 平键和键槽的剖面图

表2-1 平键和键槽的尺寸表

图2-11平键和键槽的剖面尺寸查询流程

尺寸查取流程图见图2-11。

要求:用C(Turbo C or Visual C++等均可)语言编程实现该数表数据存储及查询。

例2 齿轮传动工况系数KA,见表2-2。

表2-2 齿轮传动工况系数KA

图2-12 齿轮传动工况系数KA查询流程

根据原动机机、工作机的工况→KA,使用二维数组:KK[i][j],i=0~2:表示原动机工况,j=0~2:表示工作机工况。

变量及数组定义:

float KA;

int i,j;

float;

KK[3][3]={{1.0,1.25,1.75},{1.25,1.5,2.0},{1.5,1.75,2.25}};

查表程序流程图见图2-12。

要求:用C(Turbo C or Visual C++等均可)语言编程实现该数表数据存储及查询。

例3 说明:多变量单值表

① P1值需用三维数组NN(4,4,14),可以将P1值→数据文件→NN数组。

② 降维处理:三维→二个二维。

2) 一元函数的插值

设有一用数据表格给出的列表函数y=f(x),如下表2-3:

表2-3 列表函数y=f(x)

表中只有几个离散点(或型值点、结点)的数据,当自变量为结点间的中间值时,就要用到插值法求取其函数值。

基本思想:在插值点附近选取几个合适的结点,过这些点构造一个简单函数g(x),在此小段上用g(x)代替原来函数f(x),这样插值点的函数值就用g(x)的值来代替,如图2-13。

图2-13 一元函数插值

插值的实质问题:如何构造一个既简单又具有足够精度的函数f(x)。

插值方法类型:线性插值、抛物线插值。

(1)线性插值

方法步骤:(1)选xi,xi+1,满足xi<x< xi+1;(2)过(xi,yi)及(xi+1,yi+1)两点构造直线g(x)→f(x)。

误差问题:存在误差,当自变量间隔较小,而插值精度不要很高时,可以满足要求。

x(n),y(n)——一维数值,n——结点数。C语言下标从0开始。xgiven,ygiven——已知的x 插入值及求出的函数值。

图2-14 线性插值流程

(2)抛物线插值

在f(x)上选取三点(xi-1,yi-1),(xi,yi),(xi+1,yi+1),构造抛物线g(x)→f(x)。比线性插值精度好。

关键问题:根据插值点x选取合适的三个点。选取方法归纳为(“靠近原则”):

设插值点为x,且xi-1<x≤xi,i=3,4,…,n-1,

(1)若|x-xi-1|≤|x-xi|,即x靠近xi-1点或居于xi-1与 xi之中点,则选xi-2,xi-1,xi三个点,上式中i=i-1;

(2)若|x-xi-1|>|x-xi|,即x靠近xi点,则选xi-1,xi,xi+1三个点,上式中i=I;

(3)若x1≤x≤x2,即x靠近表头,则选x1,x2,x3三个点,上式中i=2;

(4)若x n-1≤x≤xn,即x靠近表尾,则选xn-2,xn-1,xn三个点,上式中i=n-1。

程序流程图见下图2-15。

图2-15 抛物线插值流程

要求:将线性插值与抛物线插值统一编程。

3)二元函数的插值

有二元列表函数f(xi,yi),i=1,2,…,n,如下表2-4。

表2-4 二元列表函数

插值几何意义:在3D空间中选定几个点,通过这些点构造一块曲面g(x,y),用它近似地表示在这区间内原有的曲面f (x,y),从而得到插值后的函数值Zk=g(xk,yk) , 如图2-15所示。

插值方式类型,在一元函数插值方法的基础上延伸,有以下几种:

(1)直线-直线插值

最最基本、最简单、精度最低。

如图所示,g(x,y)形成:以AB、CD为导线,作//yoz平面的直母线(EF)直线的运动→柱状面。

插值步骤:

图2-15 二元函数插值

图2-16 抛物线插值流程

(a)根据k点的(xk,yk)→周围四点a,b,c,d,满足xa=xc,xb=xd,ya=yb,yc=yd,xa<xk<xb,ya<yk<yb;

(b)A,B,C,D,过A,B用线性插值→E,过C,D用线性插值→F;

(c)过E,F用线性插值→K点。

(2)抛物线-直线插值

将导线AB、CD→抛物线ABE,CDF。插值步骤:

(1)据k点的(xk,yk)→a,b,c,d+e,f;

(2)据a,b,c,d,e,f→A,B,C,D,E,F,过A,B,E 用抛物线插值→U点,过C,D,F用抛物线插值→V点;

(3)U,V用线性插值→K点。

(3)抛物线-抛物线插值

(1)据k点的(xk,yk)→a,b,c,d+e,f+r,s,t;

(2)据a,b,c,d, e,f,r,s,t→A,B,C,D,E,F,R,S,T,

过A,B,E用抛物线插值→U点,过C,D,F用抛物线插值→V点,过R,S,T用抛物线插值→W点;

(3) 过U,V,W用抛物线插值→K点。

上述三种插值方法统一的程序流程图见P44图3-10,三种方法由变量II控制。

要求:读懂该流程图,有余力的学生编程上机。

2.2.2 数表的公式拟合

工程实际中常需要用一定的数学方法将一系列测试数据或统计数据拟合成近似的经验公式——曲线拟合。

插值法的实质是在几何上用严格通过各结点的曲线或曲面来近似代替列表函数曲线或曲面。但通过试(实)验所得的数据离散性很大,误差比较大,因此,插值法建立的公式必然保留了所有误差,此外,要构造这样的函数的复杂度或难度比较大。有鉴于此,采用构造近似曲线、曲面,此曲线、曲面并不严格通过所有结点,而是尽可能反映所给数据的趋势,这种利用所给数据建立拟合或近似曲线或曲面经验公式的过程称为曲线、曲面拟合或公式拟合。

本节介绍最常用最基本的单变量曲线拟合方法——最小二乘法。(其他常用的还有Bezier法、三次参数样条法、B样条法等)。

1)最小二乘法拟合的基本思想

根据离散点的大致分布规律,先确定拟合函数的类型,如多项式函数、指数函数、对数函数等,计算出各数据点横坐标处的函数值与纵坐标之间的偏差的平方,求其和并使之为最小值,从而解出函数的待定系数。

已知由线图或实验所得m个点的值为:(x1,y1),(x1,y1),……,(xm,ym),设拟合函数公式为:y=f(x),则每一结点处的偏差为: (i=1,2,…,m),偏差的平方和为:

求 min 函数f(x)的待定系数→ f(x)

拟合函数的类型,常选取初等函数,如对数函数、指数函数、代数多项式等。一般是根据数据曲线形态判断所采用的函数类型。最常用的是代数多项式拟合。本节只讨论在选定函数类型的情况下如何确定各系数值的问题。

2)最小二乘法的(代数)多项式拟合

设拟合公式为: (n次多项式)

已知m个点的值(x1,y1),(x1,y1),……,(xm,ym),且m>>n,结点偏差的平方和为:

为使 j=0,1,2,…,n

其中:(k=1,2,…,2m+1)

这是一个关于的n+1个线性方程组,求解该方程组→→f(x)

常用二次三项式拟合公式:

例1 介绍

程序流程图,见P.44图3-13

要求:看懂该流程图,该流程图中采用了高斯消去法解联立方法(详见3.3.4节),有余力的学生编程上机。

❽ 什么叫UG程序

UG的开发始于1990年7月。如今大约十人正工作于核心功能之上。当前版本具有大约450,000行的C代码。

UG是一个在二和三维空间无结构网格上使用自适应多重网格方法开发的一个灵活的数值求解偏微分方程的软件工具。其设计思想足够灵活地支持多种离散方案。因此软件可对许多不同的应用再利用。

一个给定过程的有效模拟需要来自于应用领域 (自然科学或工程)、数学(分析和数值数学) 及计算机科学的知识。一些非常成功的解偏微分方程的技术,特别是自适应网格加密(adaptive mesh refinement)和多重网格方法在过去的十年中已被数学家研究。计算机技术的巨大进展,特别是大型并行计算机的开发带来了许多新的可能。

然而,所有这些技术在复杂应用中的使用并不是太容易。这是因为组合所有这些方法需要巨大的复杂性及交叉学科的知识。最终软件的实现变得越来越复杂,以致于超出了一个人能够管理的范围。

UG的目标是用最新的数学技术,即自适应局部网格加密、多重网格和并行计算,为复杂应用问题的求解提供一个灵活的可再使用的软件基础。

一般结构

一个如UG这样的大型软件系统通常需要有不同层次抽象的描述。UG具有三个设计层次,即结构设计(architectural design)、子系统设计(subsystem design)和组件设计(component design)。

至少在结构和子系统层次上,UG是用模块方法设计的并且信息隐藏原则被广泛地使用。所有陈述的信息被分布于各子系统之间。UG是用C语言来实现的。

图1给出了详细的结构设计,其构建模块是动态分布式数据库(DDD: Dynamic Distributed Data Library)、UG内核、问题类和应用。

图1:UG结构设计

DDD编程模式

提供了处理不规则数据结构和并行机上分布式对象的一种并行编程模式。它处理分布式对象的识别(创建)、分布式对象间的通讯及分布式对象的动态转移等基本任务。可提供本工具的一个独立的版本,移植性通过提供对Paragon NX、PARIX、T3D/T3E shared mem、MPI和PVM的接口来保证。

UG内核程序

UG内核程序意欲与待求解的偏微分方程是无关的。它提供几何和代数数据结构及许多网格处理选项、数值算法、可视化技术和用户界面。

当然,每个程序设计抽象都基于某种基本假设。网格管理子系统当前被编写得仅支持层次结构化网格。数据结构本身可支持更一般松耦合网格层次。并行化基于具有极小重叠的数据划分。

UG内核程序具有如下特征:

灵活的区域描述界面。由于UG可生成/修改网格,它需要区域边界的一个几何描述。当前支持两种格式,正在进行CAD界面的工作。

一种支持二和三维无结构网格的管理器,具有多种元类型,如三角形、四边形、四面体、棱柱、棱椎和六面体。为重新启动的完全网格结构及解的存储和加载。

局部、层次加密和粗化。在每个网格层提供一个相容且稳定的三角形剖分。

一个灵活的稀疏矩阵数据结构允许相应于网格的节点、边、面和元的自由度。在数据结构上已实现了一和二级BLAS类过程及迭代方法。

已经实现了问题无关的和面向对象框架的广泛的数值算法。包括BDF(1), BDF(2)时间步方案、(不精确) Newton方法、CG、CR、BiCGSTAB、乘法局部多重网格、不同类型的的网格转移算子、 ILU、Gauss-Seidel、Jacobi和SOR光滑器。这些算法可用于方程组及标量方程。它们可被任意地嵌套到简单的脚本命令中,例如,BDF(2)使用Newton法在每个时间步求解非线性问题,Newton法使用具有BiCGSTAB加速的多重网格,多重网格使用一个ILU光滑器和特殊的适合于跳跃系数的截断网格转移、粗层解法器使用一个ILU预条件的BiCGSTAB。

脚本语言解释程序和交互式图形工具提供了程序运行时的简单的可视化工具,进一步,例如,稀疏矩阵数据结构可用图形给出,这对调试是非常有用的。UG的设备驱动程序支持X11和Apple Macintosh。还提供对AVS、TECPLOT和GRAPE的图形输出。

此功能的数据并行实现基于DDD。

问题类层次

一个问题类使用UG内核程序来对一类特殊偏微分方程实现离散化、误差估计子和最终的一个非标准解法器。只有当不能用任何已提供的工具来实现时才需要提供解法器。离散化可由一些工具支持,这些工具允许元素类型和维数与有限元和有限体积法代码无关。

基于最新版UG内核程序的问题类包括:标量对流扩散、非线性扩散、线弹性、弹塑性、不可压缩、多孔渗流中密度驱动流和多相。所有这些问题类运行2D/3D且是并行的。

UG获得2001年最突出设计HLRS金穗奖

如何在UNIX环境中安装UG

许可协议

UG编程手册:progmanual.ps,431页,(771KB),1998.10

UG参考手册(第I部分):refmanualI.ps,431页,(918KB),1998.10

UG参考手册(第II部分):refmanualII.ps,637页,(1017KB),1998.10

UG应用现问题类文档:applmanual.ps,254页,(437KB),1998.10

热点内容
ftp服务器怎么访问 发布:2025-01-20 17:08:36 浏览:68
一台服务器多个同段地址怎么通讯 发布:2025-01-20 16:45:58 浏览:734
i7源码 发布:2025-01-20 16:40:48 浏览:983
抽签源码 发布:2025-01-20 16:38:35 浏览:62
密码箱怎么锁住 发布:2025-01-20 16:32:17 浏览:31
编译隔离 发布:2025-01-20 16:28:54 浏览:358
从哪里看自己的qq账号和密码 发布:2025-01-20 16:22:33 浏览:400
sql语句动态 发布:2025-01-20 16:18:22 浏览:298
sql表或的语句 发布:2025-01-20 16:00:49 浏览:163
西瓜视频怎么缓存不了电影了 发布:2025-01-20 16:00:45 浏览:890