数值计算课程设计Word文档格式.docx
- 文档编号:3548564
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:42
- 大小:307.70KB
数值计算课程设计Word文档格式.docx
《数值计算课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《数值计算课程设计Word文档格式.docx(42页珍藏版)》请在冰点文库上搜索。
算法说明论述清楚,公式符号撰写规范,流程图图符规范,计算正确,文字简练通顺,插图简洁规范,书写整洁。
文中图、表按制图要求绘制,程序调试和运行情况记录详实。
打印版面要求:
A4纸,页边距:
上2cm,下2cm,左2.5cm、右2cm;
字体:
正文宋体、小四号;
行距:
固定值20;
页眉1.5cm,页脚1.75cm;
页码位于页脚居中打印;
奇数页页眉“数值计算课程设计”,偶数页页眉“具体算法名称”,页眉宋体小5号;
段落及层次要求:
每节标题以四号黑体左起打印(段前段后各0.5行),节下为小节,以小四号黑体左起打印(段前段后各0.5行)。
换行后以小四号宋体打印正文。
章、节、小节编号分别以1、1.1、1.1.1格式依次标出,空一字符后接各部分的标题。
每一章的标题都应出现在本章首页的第一行上。
当课程设计报告结构复杂,小节以下的标题,左起顶格书写,编号依次用
(1)、
(2)……或1)、2)……顺序表示。
字体为小四号宋体。
对条文内容采用分行并叙时,其编号用(a)、(b)……或a)、b)……顺序表示,如果编号及其后内容新起一个段落,则编号前空两个中文字符。
曲线图表要求:
所有曲线、图表、线路图、流程图、程序框图、示意图等不准徒手画,必须按国家规定标准或工程要求绘制(应采用计算机绘图)。
课程设计说明书(报告)中图表、公式要求如下:
(a)图:
图的名称采用中文,中文字体为五号宋体,图名在图片下面。
引用图应在图题右上角标出文献来源。
图号以章为单位顺序编号。
格式为:
图1-1,空一字符后接图名,比如第1章第5个图是关于高斯列主元法解方程组算法图,图的下方的图号图名应为:
图1-5高斯列主元法解方程组算法图。
(b)表格:
表的名称及表内文字采用中文,中文字体为五号宋体,表名在表格上面。
表号以章为单位顺序编号,表内必须按规定的符号标注单位。
表1-1,空一字符后接表格名称。
(c)公式:
公式书写应在文中另起一行,居中排列。
公式序号按章顺序编号。
字体为五号宋体,序号靠页面右侧。
(1-1)……。
设计体会及今后的改进意见:
设计总结要写出算法理解,编程经验等技术性、学术性总结;
体会要简洁、真实、深刻,切忌空话、大话,客套话和矫揉造作之词。
改进意见要合理、中肯。
参考文献的要求:
另起一页,居中打印参考文献四字(四号黑体,段前段后1行),字间空一字符;
另起一行,按论文中参考文献出现的先后顺序用阿拉伯数字连续编号(参考文献应在正文中注出);
参考文献中每条项目应齐全(字体均为小四号宋体)。
(格式:
[编号]作者.论文或著作名称.期刊名或出版社.出版时间)。
(期刊应注明第几期、起止页数(包括论著))。
参考文献中条目要符合科技文献引用文献条目书写的国家标准规范。
2.3设计报告装订顺序与规范
封面
数值计算课程设计报告正文
设计体会及今后的改进意见
参考文献(无需加目录序号)
附录(无需加目录序号)
左边缘装订
3、课程设计工作进度计划:
时间
设计任务及要求
第19周
编写和调试程序并按要求撰写设计报告
1高斯列主元法解线性方程组
1.1算法说明
将线性方程组做成增广矩阵,对增广矩阵进行行变换。
对第1列元素,在第i行及以下的元素中选取绝对值最大的元素,将该元素最大的行与第i行交换,然后采用高斯消元法将新得到的消去第i行以下的元素。
一次进行直到。
从而得到上三角矩阵。
再对得到的上三角矩阵进行回代操作,即可以得到方程组的解。
1.2算例
课本99页例3.16,求解方程组的解
运行结果如图1-1所示。
图1-1
1.3程序代码
#include<
iostream>
cmath>
usingnamespacestd;
constN=20;
floata[N][N];
intm;
intmain()
{inti,j;
intc,k,n,p,r;
floatx[N],l[N][N],s,d;
cout<
<
"
下面请输入未知数的个数m="
;
cin>
>
m;
endl;
请按顺序输入增广矩阵a:
for(i=0;
i<
i++)
{
for(j=0;
j<
m+1;
j++)
cin>
a[i][j];
}
{for(j=i;
j++)
c=(fabs(a[j][i])>
fabs(a[i][i]))?
j:
i;
/*找列最大元素*/
for(n=0;
n<
n++)
{s=a[i][n];
a[i][n]=a[c][n];
a[c][n]=s;
}/*将列最大数防在对角线上*/
for(p=0;
p<
p++)
a[i][p]<
\t"
for(k=i+1;
k<
k++)
{l[k][i]=a[k][i]/a[i][i];
for(r=i;
r<
r++)/*化成三角阵*/
a[k][r]=a[k][r]-l[k][i]*a[i][r];
x[m-1]=a[m-1][m]/a[m-1][m-1];
for(i=m-2;
i>
=0;
i--)
{d=0;
for(j=i+1;
d=d+a[i][j]*x[j];
x[i]=(a[i][m]-d)/a[i][i];
/*求解*/
该方程组的解为:
cout<
x["
]="
x[i]<
//system("
pause"
);
return0;
}
2牛顿法解非线性方程组
2.1算法说明
设
已知,第一步计算函数
第二步计算雅可比矩阵
第三步求线性方程组
的解
。
第四步计算下一点
重复以上过程。
2.1算例:
设有非线性方程组(课本137页例3.32)
设初始值
,用牛顿法计算
解:
迭代3次后的近似解向量为[1.9068,0.311219];
具体运行结果如图2-1,2-2,2-3所示。
图2-1
图2-2
2.2程序代码
#defineN2//非线性方程组中方程的个数、未知量的个数
#defineEpsilon0.0001//差向量的上限
#defineMax100//最大迭代次数
constintN2=2*N;
{
voidff(floatxx[N],floatyy[N]);
//计算向量函数的因变量向量yy[N]
voidffyakebi(floatxx[N],floatyy[N][N]);
//计算雅可比矩阵yy[N][N]
voidinv_yakebi(floatyy[N][N],floatinv[N][N]);
//计算雅可比矩阵的逆矩阵inv
voidnewton(floatx0[N],floatinv[N][N],floaty0[N],floatx1[N]);
//由近似解向量x0求近似解向量x1
floatx0[N]={2.0,0.25},y0[N],yakebi[N][N],invyakebi[N][N],x1[N],errornorm;
inti,iter=0;
初始近似解向量:
N;
x0[i];
x0[i]<
"
cout<
do
iter=iter+1;
第"
iter<
次迭代开始"
ff(x0,y0);
ffyakebi(x0,yakebi);
inv_yakebi(yakebi,invyakebi);
newton(x0,invyakebi,y0,x1);
errornorm=0;
for(i=0;
errornorm=errornorm+fabs(x1[i]);
if(errornorm<
Epsilon)break;
x0[i]=x1[i];
}while(iter<
Max);
voidff(floatxx[N],floatyy[N])
floatx,y;
inti;
x=xx[0];
y=yy[1];
yy[0]=x*x-2*x-y+0.5;
yy[1]=x*x+4*y*y-4;
向量函数的因变量向量是:
yy[i]<
voidffyakebi(floatxx[N],floatyy[N][N])
inti,j;
y=xx[1];
yy[0][0]=2*x-2;
yy[0][1]=-1;
yy[1][0]=2*x;
yy[1][1]=8*y;
雅可比矩阵是:
{for(j=0;
yy[i][j]<
voidinv_yakebi(floatyy[N][N],floatinv[N][N])
floataug[N][N2],L;
inti,j,k;
开始计算雅可比矩阵的逆矩阵:
aug[i][j]=yy[i][j];
for(j=N;
N2;
if(j==i+N)
aug[i][j]=1;
else
aug[i][j]=0;
aug[i][j]<
for(k=i+1;
k++)
{L=-aug[k][i]/aug[i][i];
for(j=1;
aug[k][j]=aug[k][j]+L*aug[i][j];
for(i=N-1;
0;
{for(k=i-1;
k>
k--)
for(j=N2-1;
j>
j--)
cout<
aug[i][j]=aug[i][j]/aug[i][i];
{
for(j=0;
cout<
for(j=N;
inv[i][j-N]=aug[i][j];
}
雅可比矩阵的逆矩阵是:
{for(j=0;
inv[i][j]<
voidnewton(floatx0[N],floatinv[N][N],floaty0[N],floatx1[N])
floatsum=0;
{sum=0;
for(j=0;
sum=sum+inv[i][j]*y0[j];
x1[i]=x0[i]-sum;
近似解向量:
x1[i]<
3经典四阶龙格库塔法解一阶微分方程组
3.1算法说明
4阶龙格-库塔方法(RK4)可模拟N=4的泰勒方法的精度。
这种算法可以描述为,自初始点
开始,利用下面的计算方法生成近似序列
3.2算例:
用4阶龙格-库塔方法计算区间[0.0,0.2]上式(3)的数值解,采用10个子区间,步长h=0.02。
(课本400页例9.15)求解运行结果如图3-1所示。
初值
图3-1
3.3程序代码
iomanip>
voidLG(double(*f)(doublet,doublex,doubley),
double(*g)(doublet,doublex,doubley),
doublechuzhi[3],doubleresu[3],doubleh)
doublef1,f2,f3,f4,g1,g2,g3,g4,t0,x0,y0,x1,y1;
t0=chuzhi[0];
x0=chuzhi[1];
y0=chuzhi[2];
f1=f(t0,x0,y0);
g1=g(t0,x0,y0);
f2=f(t0+h/2,x0+h*f1/2,y0+h*g1/2);
g2=g(t0+h/2,x0+h*f1/2,y0+h*g1/2);
f3=f(t0+h/2,x0+h*f2/2,y0+h*g2/2);
g3=g(t0+h/2,x0+h*f2/2,y0+h*g2/2);
f4=f(t0+h,x0+h*f3,y0+h*g3);
g4=f(t0+h,x0+h*f3,y0+h*g3);
x1=x0+h*(f1+2*f2+2*f3+f4)/6;
y1=y0+h*(g1+2*g2+2*g3+g4)/6;
resu[0]=t0+h;
resu[1]=x1;
resu[2]=y1;
doublef(doublet,doublex,doubley);
doubleg(doublet,doublex,doubley);
doublechuzhi[3],resu[3];
doublea,b,S;
doublet,step;
输入微分方程的初值:
chuzhi[0]>
chuzhi[1]>
chuzhi[2];
输入所求微分方程组的微分区间[a,b]:
a>
b;
输入所求微分方程组所分解子区间的个数step:
step;
S=(b-a)/step;
chuzhi[0]<
setw(10)<
chuzhi[1]<
chuzhi[2]<
LG(f,g,chuzhi,resu,S);
resu[0]<
resu[1]<
resu[2]<
chuzhi[0]=resu[0];
chuzhi[1]=resu[1];
chuzhi[2]=resu[2];
doublef(doublet,doublex,doubley)
doubledx;
dx=x+2*y;
return(dx);
doubleg(doublet,doublex,doubley)
doubledy;
dy=3*x+2*y;
return(dy);
4三次样条插值算法(压紧样条)
4.1算法说明
表5-1三次样条插值算法说明表
策略描述
包含
和
的方程
(i)三次紧压样条,确定
,
(如果导数已知,这是“最佳选择”)
(ii)natural三次样条(一条“松弛曲线”)
(iii)外挂
到端点
(iv)
是靠近端点的常量
(v)在每个端点处指定
4.2算例
求三次紧压样条曲线,以经过点(0,0),(1,0.5),(2,2.0)和(3,1.5),且一阶导数的边界条件为S’(0)=0.2和S’(3)=-1。
(课本222页例5.7)
求解运行结果界面如下:
图4-1三次样条插值算法(压紧样条)
Matlab作图如图4-2所示。
图4-2
4.3C++程序代码
constintmax=50;
floatx[max],y[max],h[max];
floatc[max],a[max],fxym[max];
floatf(intx1,intx2,intx3)
floata=(y[x3]-y[x2])/(x[x3]-x[x2]);
floatb=(y[x2]-y[x1])/(x[x2]-x[x1]);
return(a-b)/(x[x3]-x[x1]);
}//求差分
voidcal_m(intn)//用追赶法求解出弯矩向量M
{
floatB[max];
B[0]=c[0]/2;
for(inti=1;
i<
n;
i++)
B[i]=c[i]/(2-a[i]*B[i-1]);
fxym[0]=fxym[0]/2;
for(i=1;
=n;
fxym[i]=(fxym[i]-a[i]*fxym[i-1])/(2-a[i]*B[i-1]);
for(i=n-1;
i>
=0;
i--)
fxym[i]=fxym[i]-B[i]*fxym[i+1];
voidprintout(intn);
intn,i;
charch;
do{cout<
输入x的最大下标:
n;
for(i=0;
{
PleaseputinX"
'
:
x[i];
PleaseputinY"
y[i];
}
i++)//求步长
h[i]=x[i+1]-x[i];
Please输入边界条件\n1:
已知两端的一阶导数\n2:
两端的二阶导数已知\n"
intt;
floatf0,f1;
t;
switch(t)
case1:
输入Y0\'
Y"
\'
\n"
f0>
f1;
c[0]=1;
a[n]=1;
fxym[0]=6*((y[1]-y[0])/(x[1]-x[0])-f0)/h[0];
fxym[n]=6*(f1-(y[n]-y[n-1])/(x[n]-x[n-1]))/h[n-1];
break;
case2:
输入Y0\"
\"
c[0]=a[n]=0;
fxym[0]=2*f0;
fxym[n]=2*f1;
default:
不可用\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算 课程设计