C++数值分析三次样条插值自动选取步长梯形法Romberg求积法列主元高斯消去法列主元LU分解法Jacobi迭Word文件下载.docx
- 文档编号:16103900
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:25
- 大小:79.61KB
C++数值分析三次样条插值自动选取步长梯形法Romberg求积法列主元高斯消去法列主元LU分解法Jacobi迭Word文件下载.docx
《C++数值分析三次样条插值自动选取步长梯形法Romberg求积法列主元高斯消去法列主元LU分解法Jacobi迭Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++数值分析三次样条插值自动选取步长梯形法Romberg求积法列主元高斯消去法列主元LU分解法Jacobi迭Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
{
intchoice=0;
intn=2;
doublexx,*x,*y,*a,*b,*a1,*b1,*h,*m;
cout<
<
"
请输入插值节点个数n:
endl;
cin>
>
n;
x=newdouble[n];
y=newdouble[n];
a=newdouble[n];
b=newdouble[n];
a1=newdouble[n];
b1=newdouble[n];
h=newdouble[n-1];
m=newdouble[n+1];
请输入"
n<
个插值的节点(xi,yi):
for(inti=0;
i<
n;
i++)
{
cin>
x[i]>
y[i];
}
for(intj=0;
j<
n-1;
j++)
h[j]=x[j+1]-x[j];
请输入待估点xx:
cin>
xx;
请选择边界条件:
choice;
switch(choice)
{
case1:
{
doubletemp1,temp2;
a[0]=0;
a[n-1]=1;
cout<
请输入边界条件的两个一阶微商值s'
(x1)与s'
(xn):
cin>
temp1>
temp2;
b[0]=2*temp1;
b[n-1]=2*temp2;
break;
}
case2:
a[0]=1;
a[n-1]=0;
b[0]=3/h[0]*(y[1]-y[0]);
b[n-1]=3/h[n-2]*(y[n-1]-y[n-2]);
for(intk=1;
k<
n-1;
k++)
a[k]=h[k-1]/(h[k-1]+h[k]);
b[k]=3*((1-a[k])/h[k-1]*(y[k]-y[k-1])+a[k]/h[k]*(y[k+1]-y[k]));
a1[0]=-a[0]/2;
b1[0]=b[0]/2;
for(intl=1;
l<
n;
l++)
a1[l]=-a[l]/(2+(1-a[l])*a1[l-1]);
b1[l]=(b[l]-(1-a[l])*b1[l-1])/(2+(1-a[l])*a1[l-1]);
m[n]=0;
for(j=n-1;
j>
=0;
j--)
m[j]=a1[j]*m[j+1]+b1[j];
//判别xx所在区间并输出结果
\n插值结果为:
;
for(k=0;
k<
k++)
if(x[k]<
=xx&
&
x[k+1]>
xx)
doubleoutput=0;
output=(1+2*(xx-x[k])/(x[k+1]-x[k]))*pow(((xx-x[k+1])/(x[k]-x[k+1])),2)*y[k]
+(1+2*(xx-x[k+1])/(x[k]-x[k+1]))*pow(((xx-x[k])/(x[k+1]-x[k])),2)*y[k+1]
+(xx-x[k])*pow(((xx-x[k+1])/(x[k]-x[k+1])),2)*m[k]
+(xx-x[k+1])*pow(((xx-x[k])/(x[k+1]-x[k])),2)*m[k+1];
cout<
output<
deletex;
deletey;
deletea;
deleteb;
deletea1;
deleteb1;
deleteh;
deletem;
}
运行结果截图:
2.三次样条插值(初值条件2):
P52.10、给定函数
0.25
0.3
0.39
0.45
0.53
0.5
0.5477
0.6245
0.6708
0.728
yangtiao.cpp(同上)
3.自动选取步长梯形法:
P97
7、使用自动选取步长梯形法计算积分
(给定ε=0.01)
SelfSelLength.cpp
doublefun(doublea)
return2/(1+a*a);
doubleSelfSelLength(doubleR_a,doubleR_b,doublee)
doubleh=(R_b-R_a)/2;
doubleR1=(fun(R_a)+fun(R_b))*h;
intn=1;
doubleR0;
doubleS;
doubleE;
do//每当误差值不符合要求时,计算下一个result值
R0=R1;
S=0;
for(intk=1;
=n;
k++)
S=S+fun(R_a+(2*k-1)*h/n);
R1=R0/2+S*h/n;
E=fabs(R1-R0);
n=2*n;
}while(E>
3*e);
returnR1;
doublea,b,e;
cout<
"
请依次输入待求积分函数的下界a、上界b及精度要求e:
<
endl;
a>
b>
e;
自动选取步长梯形法可求得积分:
SelfSelLength(a,b,e)<
4.Romberg求积法:
8、使用Romberg求积法计算积分
(给定ε=0.01,且取
)
Romberg.cpp
staticdoubleTri[128][128];
returnsqrt(a);
doubleRomberg(doubleR_a,doubleR_b,doublee)
Tri[0][0]=(R_b-R_a)/2*(fun(R_a)+fun(R_b));
intk=0;
do//每当误差值不符合要求时,计算下一行的Tri[][]值
k++;
doubletemp=0;
//计算T[0][k]的数值
for(inti=1;
i<
=pow(2,k-1);
i++)
temp=temp+fun(R_a+(2*i-1)*(R_b-R_a)/pow(2,k));
Tri[0][k]=0.5*(Tri[0][k-1]+(R_b-R_a)/pow(2,k-1)*temp);
for(intm=1;
m<
=k;
m++)
Tri[m][k-m]=(pow(4,m)*Tri[m-1][k-m+1]-Tri[m-1][k-m])/(pow(4,m)-1);
E=fabs(Tri[k][0]-Tri[k-1][0]);
e);
returnTri[k][0];
按Romberg求积法可求得积分:
Romberg(a,b,e)<
5.列主元高斯消去法:
测试矩阵为:
=
Guess_Elimination.cpp
//列主元高斯消去法
#defineN4//矩阵的维数,可按需更改
staticdoubleA[N][N]={2,-1,0,0,-1,2,-1,0,0,-1,2,-1,0,0,-1,2};
//系数矩阵
staticdoubleB[N]={1,0,1,0};
//右端项
staticdoubleX[N];
inti,j,k;
//计数器
for(k=0;
k<
N-1;
//选取最大主元
intindex=k;
for(i=k;
N;
if(fabs(A[index][k])<
fabs(A[i][k]))
{
index=i;
}
//交换行
doubletemp;
for(i=k;
i++)
temp=A[index][i];
A[index][i]=A[k][i];
A[k][i]=temp;
temp=B[index];
B[index]=B[k];
B[k]=temp;
for(i=k+1;
N;
doubleT=A[i][k]/A[k][k];
B[i]=B[i]-T*B[k];
for(j=k+1;
j++)
A[i][j]=A[i][j]-T*A[k][j];
X[N-1]=B[N-1]/A[N-1][N-1];
for(i=N-2;
i>
=0;
i--)
doubleTemp=0;
for(intj=i+1;
j<
N;
j++)
Temp=T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 数值 分析 三次 样条插值 自动 选取 步长 梯形 Romberg 求积法列主元高斯 消去 法列主元 LU 解法 Jacobi
链接地址:https://www.bdocx.com/doc/16103900.html