预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共31页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
1.1四阶龙格—库塔算法简述龙格—库塔方法适用于一般的应用,因为它非常精确、稳定,且易于编程。龙格—库塔算法的数学描述如下:用公式计算[a,b]上初值问题,的近似解。,1.2经典四阶龙格库塔法解一阶微分方程算法流程图图1-1四阶龙格库塔算法流程图1.3四阶龙格—库塔算法程序#include<iostream>#include<iomanip>usingnamespacestd;#defineN10intmain(){doublefun(double,double,double);doublemyfun(double,double,double);doublef[4],g[4];doubleh,a,b;doublex[N+1],y[N+1],t[N+1];cout<<"输入区间左右端点a,b:";cin>>a>>b;cout<<endl;h=(b-a)/N;//h为步长x[0]=6;y[0]=4;t[0]=a;for(intk=0;k<N+1;k++){f[0]=fun(t[k],x[k],y[k]);g[0]=myfun(t[k],x[k],y[k]);f[1]=fun(t[k]+h/2,x[k]+h/2*f[0],y[k]+h/2*g[0]);g[1]=myfun(t[k]+h/2,x[k]+h/2*f[0],y[k]+h/2*g[0]);f[2]=fun(t[k]+h/2,x[k]+h/2*f[1],y[k]+h/2*g[1]);g[2]=myfun(t[k]+h/2,x[k]+h/2*f[1],y[k]+h/2*g[1]);f[3]=fun(t[k]+h,x[k]+h*f[2],y[k]+h*g[2]);g[3]=myfun(t[k]+h,x[k]+h*f[2],y[k]+h*g[2]);x[k+1]=x[k]+h*(f[0]+2*f[1]+2*f[2]+f[3])/6;y[k+1]=y[k]+h*(g[0]+2*g[1]+2*g[2]+g[3])/6;t[k+1]=t[k]+h;}cout<<setw(12)<<"t"<<""<<setw(12)<<"x"<<""<<setw(12)<<"y"<<""<<endl;return0;}doublefun(doublet,doublex,doubley){doublef;f=x+2*y;returnf;}doublemyfun(doublet,doublex,doubley){doublef;f=3*x+2*y;returnf;}四阶龙格—库塔算法求解例题在区间[0.0,0.2]上初值的条件下,求解微分方程组。1.5四阶龙格—库塔运行结果txy求得数值解为:。2高斯列主元法解线性方程组2.1高斯列主元法解线性方程组算法说明首先将线性方程组做成增广矩阵,对增广矩阵进行行变换。对于元素,在第i列中,第i行以及以下的元素中选取绝对值最大的元素,将最大元素所在的行与i行交换,然后采取高斯消元法用新得到的所在的第i行消去第i行以下的元素。依次类推,直到,从而得到上三角矩阵。再进行回代过程。2.2高斯列主元法解线性方程组流程图图2-1高斯列主元法解线性方程组流程图2.3高斯列主元法解线性方程组程序代码#include<iostream>#include<cmath>usingnamespacestd;#definen4intmain(){inti,j,k,p,m;doubleA[n][n+1],x[n];doubleq,L,temp,max1;cout<<"请输入增广矩阵:"<<endl;for(i=0;i<n;i++){for(j=0;j<n+1;j++){cin>>A[i][j];}}for(k=0;k<n-1;k++){max1=A[k][k];for(p=k;p<n;p++)//选列主元{if(fabs(A[p][k])>fabs(max1)){max1=A[p][k];m=p;}}for(i=0;i<n+1;i++)//交换行{temp=A[k][i];A[k][i]=A[m][i];A[m][i]=temp;}for(i=k+1;i<n;i++)//高斯消元{L=A[i][k]/A[k][k];for(j=k;j<n+1;j++){A[i][j]=A[i][j]-L*A[k][j];}}cout<<"输出进行上三角迭代过程中的增广矩阵:"<<endl;for(i=0;i<n;i++){for(j=0;j<n+1;j++