数值计算课程设计.docx
- 文档编号:24770023
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:20
- 大小:231.97KB
数值计算课程设计.docx
《数值计算课程设计.docx》由会员分享,可在线阅读,更多相关《数值计算课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
数值计算课程设计
1经典四阶龙格库塔法解一阶微分方程组
1.1算法说明:
4阶龙格-库塔方法(RK4)可模拟N=4的泰勒方法的精度。
这种算法可以描述为,自初始点
开始,利用
生成的近似序列,其中
1.2用龙格库塔法求解求解微分方程
满足初值条件:
1.3算法流程图:
图1-1四阶龙格库塔法解一阶微分方程组
1.4程序调试:
组建调试,确保程序可运行时输入初值,区间,步长。
1.5程序运行运行界面及运行结果:
图1-2四阶龙格库塔法解一阶微分方程组
1.6源程序代码:
#include
#include
usingnamespacestd;
#defineN10
floatff(floatt,floatxx,floatyy)
{
xx=xx+2*yy;
returnxx;
}
floatgg(floatt,floatxx,floatyy)
{
yy=3*xx+2*yy;
returnyy;
}
voidrks4(floatxx[N],floatyy[N],floattt[N],doublea,doubleb)
{floath,p1,p2,p3,p4,q1,q2,q3,q4;
xx[0]=6;
yy[0]=4;
inti,p;
h=(b-a)/N;
for(p=0;p tt[p]=a+h*p; for(i=0;i {p1=h*ff(tt[i],xx[i],yy[i]); q1=h*gg(tt[i],xx[i],yy[i]); p2=h*ff(tt[i]+h/2,xx[i]+p1/2,yy[i]+q1/2); q2=h*gg(tt[i]+h/2,xx[i]+p1/2,yy[i]+q1/2); p3=h*ff(tt[i]+h/2,xx[i]+p2/2,yy[i]+q2/2); q3=h*gg(tt[i]+h/2,xx[i]+p2/2,yy[i]+q2/2); p4=h*ff(tt[i]+h,xx[i]+p3,yy[i]+q3); q4=h*gg(tt[i]+h,xx[i]+p3,yy[i]+q3); xx[i+1]=xx[i]+(p1+2*p2+2*p3+p4)/6; yy[i+1]=yy[i]+(q1+2*q2+2*q3+q4)/6; } } intmain() { floatxx[N],yy[N],tt[N]; rks4(xx,yy,tt,0,0.2); inti,j,k; for(i=0;i cout< cout< for(j=0;j cout< cout< for(k=0;k cout< cout< return0; } 2高斯列主元法解线性方程组 2.1算法说明: Gauss列主元序消元法主要根据线性方程组人以交换两个方程的次序,方程组的同解解性不变,且解的分量次序也不变。 于是,第k步在顺序学消元法进行之前,从Ak的第k’列元素a[k][k],a[k+1][k],……a[n][k]中选出绝对值最大者,并进行记录所在行,即 |a[i][k]|=max|a[i][k]| 如果l不等k,则交换矩阵的第k’行与第l列所对应的元素,然后,再进行第k步顺序消元法。 2.2算法流程图: 图2-1高斯列主元法解线性方程组 2.3高斯列主元程序调试: 对所编写的高斯列主元程序进行编译和链接,然后执行得如下所示的窗口,我们按命令输入增广矩阵的行数为3,输入3行4列的增广矩阵运行。 2.4程序运行运行界面及运行结果: 图2-2高斯列主元法解线性方程组 2.5源程序代码: #include #include #include usingnamespacestd; intFindMax(intp,intN,double*A) {inti=0,j=0; doublemax=0.0; for(i=p;i {if(fabs(A[i*(N+1)+p])>max) { j=i; max=fabs(A[i*(N+1)+p]); } } returnj; } voidExchangeRow(intp,intj,double*A,intN) { inti=0; doubleC=0.0; for(i=0;i { C=A[p*(N+1)+i]; A[p*(N+1)+i]=A[j*(N+1)+i]; A[j*(N+1)+i]=C; } } voiduptrbk(double*A,intN) { intp=0,k=0,q=0,j=0; doublem=0.0; for(p=0;p { j=FindMax(p,N,A); ExchangeRow(p,j,A,N); if(A[p*(N+1)+p]==0) { cout<<"矩阵是一个奇异矩阵。 没有唯一解。 "; break; } for(k=p+1;k { m=A[k*(N+1)+p]/A[p*(N+1)+p]; for(q=p;q A[k*(N+1)+q]=A[k*(N+1)+q]-m*A[p*(N+1)+q]; } } cout< cout<<"增广矩阵高斯列主元消去后的矩阵为: "< for(j=0;j { if(j%(N+1)==0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算 课程设计