计算机在材料科学中的应用上机指导书文档格式.docx
- 文档编号:6544832
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:26
- 大小:105.55KB
计算机在材料科学中的应用上机指导书文档格式.docx
《计算机在材料科学中的应用上机指导书文档格式.docx》由会员分享,可在线阅读,更多相关《计算机在材料科学中的应用上机指导书文档格式.docx(26页珍藏版)》请在冰点文库上搜索。
x1=x0-
牛顿迭代法求根计算步骤:
1)输入已知条件x0、ε、N:
x0—初始迭代点,可判断其迭代收敛性;
ε――计算精度,一般取ε=0.00001
N――迭代预定最大次数,即当迭代次数超过N次之后,则主观认为迭代发散或失败,此时停止计算。
一般取N=1000
2)计算函数值f(x0)与导数值f’(x0)
3)迭代求解:
4)精度判断:
|x1-x0|<
=ε,条件成立时,则输出计算结果;
条件不成立,则x0=x1,k=k+1,返回第2步重新计算。
3、程序设计
1)读下面的程序,并改写采用二分法求解方程x3-x-1=0在区间[0,2]中的根(精度为e=10-6)
二分法求一元n次方程的近似根:
#include<
stdio.h>
#include<
math.h>
main()
{floatx0,x1,x2,fx0,fx1,fx2;
do
{printf("
Enterx1,x2:
"
);
scanf("
%f,%f"
&
x1,&
x2);
fx1=2*x1*x1*x1-4*x1*x1+3*x1-6;
fx2=2*x2*x2*x2-4*x2*x2+3*x2-6;
}while(fx1*fx2>
0);
/*判断x1,x2之间是否有根*/
{x0=(x1+x2)/2;
/*取中点*/
fx0=2*x0*x0*x0-4*x0*x0+3*x0-6;
if(fx0*fx1<
0)/*判断x1,x0之间是否有根*/
{x2=x0;
/*是的话用x0来替换x2*/
fx2=fx0;
}
else{x1=x0;
fx1=fx0;
/*否的话用x0来替换x1*/
}while(fabs((double)fx0)>
=1e-5);
printf("
%6.2f"
x0);
getch();
}
2)读懂下面的牛顿法求方程的跟的程序,并改写求x3+4x2-10=0的根。
给定条件:
x0=1.0,ε=0.00001,N=1000
计算结果:
x*=1.3652300
floatsolution(floatx)
{
floatx1,y,k;
do
k=6*x*x-8*x+3;
y=2*x*x*x-4*x*x+3*x-6;
x1=x-y/k;
x=x1;
while(fabs(y)<
0.001);
returnx;
voidmain()
floatx;
x=1.5;
x=solution(x);
printf("
%f\n"
x);
getch();
(二)线性方程组求解2学时
1、熟悉算法
1)雅可比迭代法算法设计
线性方程组的矩阵表达式为AX=b,其一般形式为:
Aijxj=bi(i=1,2,………,nj=1,2,………,n)
将此式改写为迭代格式:
(i=1,2,…….,n)
迭代展开式为:
x1=(b1-0-a12x2-a13x3-…-a1nxn)/a11
x2=(b2-a21x1-0-a23x3-…-a2nxn)/a22
x3=(b3-a31x1-a32x2-0-…-a1nxn)/a33
............
xn=(bn-an1x1-an2x2-an3x3-…-0)/ann
当给定一组x的初始迭代值时:
,
,……,
按给定迭代式反复进行迭代求解即可得:
…………
如果迭代求解过程是收敛的,
(i=1,2,………,n)
雅可比迭代计算公式:
(i=1,2,……,n),(k=0,1,2,……,∞)
迭代求解的终止条件,也就是迭代求解的精度判断条件,即是用相邻两次解之差来决定,其判断条件有两种形式:
1)取相邻两次解的每一个分量之差的绝对值|△xi|≤ε,即:
|
|≤ε(i=1,2,3,……,n)
2)取相邻两次解的每一个分量之差的绝对值中最大的一个|△xi|max≤ε,即:
|max≤ε(i=1,2,3,……,n)
2)追赶法求解三对角线方程组:
三对角线方程组的形式如下:
(1)追的过程即是消元过程:
“a变0,b变1,c、d变成u和y
即表示为:
计算公式推导过程如下:
第一式除b1得x1+u1x2=y1
其中u1=c1/b1y1=d1/b1
第二式第二式-a2×
第一式,得:
(b2-a2u1)x2+c2x3=d2-y1a2x2+u2x3=y2
其中:
u2=c2/(b2-a2u1)y2=(d2-y1a2)/(b2-a2u1)
第三式第三式-a3×
第二式,得:
(b3-a3u2)x3+c3x4=d3-a3y2
x3+u3x4=y3
其中u3=c3/(b3-a3u2)y3=(d3-a3y2)/(b3-a3u2)
………………………
第n式第n式-an×
第n-1式,得:
(bn-anun-1)xn=(dn-anyn-1)xn=yn
其中yn=(dn-anyn-1)/(bn-anun-1)
经整理可得到下列方程组:
u1=c1/b1,y1=d1/b1,ui=ci/(bi-aiui-1)(i=2,3,……,n-1)yi=(di-aiyi-1)/(bi-aiui-1)(i=2,3,......n)
通过计算u1,u2,......,un-1及y1,y2,......yn,即可得到每个方程只含两个未知量的式子,而最后一式只含一个未知量xn。
因此,采用回代的方法即可求得全部解。
由于计算出ui之后,ci就不再用了,因此,ui就用ci代替。
同理,计算出yi之后,di就不再用了,因此,yi就用di代替:
c1=c1/b1d1=d1/b1
t=bi-aici-1ci=ci/tdi=(di-aidi-1)/t(i=2,3,……,n-1)
dn=(dn-andn-1)/(bn-ancn-1)
(2)回代首先求xn=yn
在回代求xn-1=yn-1-un-1xn
xn-2=yn-2-un-2xn-1
x1=y1-u1x2
因此,可得回代通式:
xn=yn
xi=yi-uixi+1(i=n-1,n-2,……,1)
由于在回代过程中,求得xi之后,原来的yi不再用了,因此,xi可用yi代替。
在消元过程中yi用di代替,ui用ci代替,所以xi也就用di代替了。
这样,在全部计算公式中,ci代替了ui,di代替了yi、xi,因此,程序中仅只见到ci与di。
回代公式可改写为:
dn=dndi=di-cidi+1(i=n-1,n-2,......,1)。
作业2:
计算例题:
2、程序设计:
1)读下面的方程,改写程序并以雅可比法求下列方程组:
给定初始值x(0)=[0,0,0]T
选代求解为x*=[3,2,1]T
方程组:
5x1+2x2+x3=8
2x1+8x2-3x3=21
x1-3x2-6x3=1
malloc.h>
conio.h>
#defineEPS1e-6/*允许误差*/
#defineMAX100/*迭代次数的最大值*/
float*Jacobi(floata[3][4],intn);
main()
{
inti;
floata[3][4]={5,2,1,8,2,8,-3,21,1,-3,-6,1};
/*方程的系数*/
float*x;
x=(float*)malloc(3*sizeof(float));
/*动态申请内存,用于保存方程的解*/
x=Jacobi(a,3);
/*调用雅可比函数*/
for(i=0;
i<
3;
i++)/*输出方程的解*/
x[%d]=%f\t"
i,x[i]);
}
\n"
float*Jacobi(floata[3][4],intn)
float*x,*y;
floatepsilon,s;
inti,j,k=0;
x=(float*)malloc(n*sizeof(float));
y=(float*)malloc(n*sizeof(float));
n;
i++)
x[i]=0;
while
(1)
epsilon=0;
/*容允误差*/
k++;
/*迭代次数计数*/
s=0;
for(j=0;
j<
j++)
if(j==i)
continue;
s+=a[i][j]*x[j];
y[i]=(a[i][n]-s)/a[i][i];
/*计算"
x^(k+1)"
*/
epsilon+=(float)fabs(y[i]-x[i]);
if(epsilon<
EPS)
迭代次数为:
%d\n"
k);
/*返回方程的解*/
if(k>
=MAX)
方程不收敛\n"
returny;
x[i]=y[i];
2)读下面程序并分析:
/追赶法解三对角阵方程组Ax=b
//n---方程组的阶数。
//a1,a2,a3依次为三对角阵的三对角。
//成功返回1,失败返回0。
#include<
main()
inti,t;
intRunEq(intn,double*a1,double*a2,double*a3,double*b,double*x);
doublea1[5]={0,-1,-1,-1,-1};
doublea2[5]={4,4,4,4,4};
doublea3[5]={-1,-1,-1,-1};
doubleb[5]={100,200,200,200,100};
doublex[5];
t=RunEq(5,a1,a2,a3,b,x);
if(t=1)
for(i=0;
5;
i++)
x[%d]=%f\n"
intRunEq(intn,double*a1,double*a2,double*a3,double*b,double*x)
{
inti;
doublel;
for(i=1;
if(fabs(a2[i-1])<
0.00000000001)return0;
l=a1[i]/a2[i-1];
a2[i]-=a3[i-1]*l;
b[i]-=b[i-1]*l;
if(fabs(a2[n-1])<
x[n-1]=b[n-1]/a2[n-1];
for(i=n-2;
i>
=0;
i--)
x[i]=(b[i]-a3[i]*x[i+1])/a2[i];
return1;
}
注意:
a1的第一个元素需要空出来,因为矩阵第一行不含第一各对角的元素,同样a3的最后一个元素也要空出来。
(二)excel在求解线性方程组的应用1学时
1、熟悉excel操作,并学会用excel求线性方程组的解
1)方法1
x1+x2+2x3+3x4=1
3x1-x2-x3-2x4=-4
2x1+3x2-x3-x4=-6
x1+2x2+3x3-x4=-4
1.打开Excel。
2.由于在本方程组中未知数有4个,所以预留4个可变单元格的位置A1-A4。
3.将活动单元格移至B1处,从键盘键入:
=A1+A2+2*A3+3*A4;
然后回车。
4.在B2处从键盘键入:
=3*A1-A2-A3-2*A4;
然后回车。
5.在B3处从键盘键入:
=2*A1+3*A2-A3-A4;
6.在B4处从键盘键入:
=A1+2*A2+3*A3-A4。
7.点击工具--规划求解,出现规划求解参数对话框。
8.对话框中第一栏为:
设置目标单元格,在相应的框中填入$B$1。
9.对话框中第二栏为:
等于;
后有三个选项,依次为最大值,最小值,值为。
根据题意B1表示方程组中第一个方程等号左边的表达式,它的值应为1,因此点击值为前的圆圈,输入1。
10.对话框中第三栏为:
可变单元格;
我们预留的可变单元格为A1-A4,所以在可变单元格框内键入$A$1:
$A$4。
11.对话框中最后一栏为:
约束;
首先点击添加按钮,屏幕出现添加约束对话框。
12.在添加约束对话框的单元格引用位置键入:
$B$2;
在中间的下拉式菜单中选取=;
在约束值处键入:
-4;
然后按添加按钮,屏幕出现空白的添加约束对话框。
13.在添加约束对话框的单元格引用位置键入:
$B$3;
-6;
然后按添加按钮,出现空白的添加约束对话框。
14.在添加约束对话框的单元格引用位置键入:
$B$4;
然后按确定键,返回规划求解参数对话框。
15.按求解键,出现求解结果对话框。
此时在A1-A4的位置依次为:
-1,-1,0,1;
这就是说,原方程组的解为:
X1=-1,X2=-1,X3=0,X4=1。
这样我们就求出了方程组的解。
2)方法2
理论基础:
N阶线性方程组:
AX=B
其中,A=aij,i,j=1,2,……,n;
B=(b1,b2,⋯bn),为n维常数列向量。
求:
X=X1,X2,……,Xn;
若系数行列式|A|≠0,则方程组必有唯一的解:
X=A-1B。
2X1+3X2+2X3+3X4=0
3X1+2X2-2X3+3X4=3
3X1+3X2+3X3-4X4=14
2X1-2X2-3X3-3X4=7
1)在Excel中输入系数方阵,如输入A1:
D4。
2)判断线性方程组是否有解。
选择另外一个单元元格,如E1,单击“常用”具栏中“fx函数”按钮.在“函数分类”中选择“数学与三角数”类,然后选择“MDETERM”函数。
在“Array”输入框中输入域A1:
D4。
3)求系数矩阵的逆A-1
再选4行4列的一个区域F1:
I4,单击“常用”工具栏中“fx函数”按钮.在“函数分类”中选择“数学与三角函数”类,然后选择“MINVERSE”函数。
在“Array”输入框中输入区域A1:
D4并单击“确定”。
将光标定位在编辑栏中所输入公式的结尾处,然后同时按下Ctrl,Shift,Enter3个键,则在区域F1:
I4中显示出矩阵A的逆矩阵A-1的系数。
4)求线性方程组的解
再选定一个4行1列的区域如J1:
J4,将列向量B输入到该区域中去。
另外选择一个4行1列的区域如K1:
K4,单击“常用”工具栏中“fx函数”按钮,选择“MMULT”函数。
在“Array1”输入框中输入矩阵的逆A所在区域F1:
I4;
在“Array2”输入框中输入列向量所在的区域J1:
J4,然后单击“确定”。
将光标定位在编辑栏中所输入公式的结尾处,然后按下Ctrl,Shift,Enter3个键,则区域K1:
K4中显示出两个矩阵乘积结果,即方程的解。
实验二最小二乘法曲线拟合及回归分析4学时
1)熟悉最小二乘法曲线拟合算法设计;
2)熟悉该算法程序编写及调试方法。
1)熟悉一元及多元线性回归数值解法;
2)熟悉用excel及origin进行回归分析的基本方法。
1、一元线性回归
(1)某种铝合金的含铝量为x(%),其熔解温度为y(℃),由实验测得x与y地数据如下表所示。
试用最小二乘法建立x与y的经验公式。
2、多元线性回归
P17例2分析:
求y对x1,x2,x3的线性回归方程。
表2—2去碳量y与天然矿石和烧结矿石的加入量x1,x2及熔化时间x3实测数据n=49,
结合此题,写出多元线性拟合的基本步骤。
3、求一个经验函数y=aebx,a,b为常数,拟合以下数据:
x
1
2
3
4
5
6
7
8
y
15.3
20.5
27.4
36.6
49.1
65.6
87.8
117.6
采用excel进行曲线拟合。
4、根据长期试验总结和金属材料理论,提出了耐热钢断裂时间与温度、持久强度的回归模型如下:
其中y为断裂时间(h);
x为持久强度;
T为试验温度(K),R为气体常数。
为求出25Cr2Mo1V钢的该回归模型,进行了27次试验,见表1。
求该模型在给出条件下的系数,并对在工作温度为550℃和设计寿命为10万小时的条件下,此种耐热钢的持久强度做出估计。
表125Cr2Mo1V耐热钢持久强度试验数据
No
温度/K
持久强度/MPa
断裂时间/h
试验温度/K
持久强度/MPa
1
823
400
113.5
15
853
270
937
2
380
163.5
16
250
1206.7
3
370
340.6
17
200
2044.6
4
360
561
18
873
300
182.2
5
350
953.8
19
350.7
6
1263.8
20
489.0
7
330
1902.8
21
958.7
8
310
2271.3
22
893
79.4
9
2466.5
23
150.4
10
3674.8
24
411.0
11
6368.7
25
150
1001.8
12
13862.0
26
120
1544.8
13
207.7
27
110
1795.0
14
853
621.9
结合课件,用origin进行回归分析。
实验三相图热力学计算4学时
1)熟悉在线相图查询网站;
2)熟悉相图的热力学计算方法;
3)熟悉简单相图计算程序。
4)熟练掌握用Jade+origin软件分析XRD实验结果的方法
1)熟悉相图热力学数值计算方法。
2)熟悉Jade+origin的使用方法。
1、在线相图计算:
2h
1)FACT相图查询
FACT是世界排名数一数二的热力学计算软件,提供在线热力学据计算,二元三元相图计算等等强大功能。
下面的网址提供在线常用相图查询http:
//www.crct.polymtl.ca/FACT/documentation/
试访问该网站并查询相图,在线查询Al2O3-SiO2、Ni-Al、Fe-Al相图并下载。
2)进入Knovel电子图书数据库,进行相图查询和文献阅读。
2、NiO-MgO完全固溶体相图绘制
NiO-MgO为液、固相连续互溶二元体系,液相和固相均为理想溶液。
已知NiO和MgO的熔点分别为1960℃和2800℃,熔化热分别为52.3kJ/Mol和77.4kJ/Mol。
以纯液态NiO作为NiO的标准态,纯固态MgO作为MgO的标准态,则
和
近似计算公式为:
=77400(1-
=52300(1-
设1为NiO,2为MgO,则有
又因为1-
=
1-
所以:
=(1-
)
求得:
即可计算出NiO-MgO完全固溶相图。
读C源程序并写出各个模块的功能,尝试着改动程序,并运行看看对实验结果的影响。
3、Jade标定物相方法---------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 材料科学 中的 应用 上机 指导书