数值分析B定Word文档下载推荐.docx
- 文档编号:17849752
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:30
- 大小:317.32KB
数值分析B定Word文档下载推荐.docx
《数值分析B定Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数值分析B定Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。
求
二、全部源程序
#include"
stdio.h"
math.h"
stdlib.h"
#defineE11e-12//---------------------------------------------------------------迭代求解精度
#defineE21e-7//-----------------------------------------------------------------------拟合精度
intGauss(doublea[4][4],doubleb[4],doublec[4]);
//---------------------------函数声明
voidNewton(doublex,doubley,doubler[]);
doublechazhi(doublet,doubleu);
doublepxy(doublex,doubley,intz);
intnihe();
intDoolittle(doublea[11][11],intr);
voidhuidai1(doublea[11][11],doubleb[11],doublex[11],intr);
//------------------------------------------------------------------------------------------变量声明
doubleX[11],Y[21];
//-------------------------------------------------插值节点横,纵坐标
doublexyBiao[11][21];
//------------------------------------------关于z、x、y的二维数表
doubleC[11][11];
//---------------------------函数z=f(x,y)的近似表达式的系数矩阵
intmain()//---------------------------------------------------------------------------------主函数
{
doublex,y,t,u;
doublex1[8],y1[5],fxy[8][5],r[4],q[4];
inti,j;
for(i=0;
i<
11;
i++)
X[i]=0.08*i;
for(j=0;
j<
21;
j++)
Y[j]=0.5+0.05*j;
printf("
\n数表:
xi,yi,f(xi,yi):
\n"
);
//-----------------建立关于z、x、y的二维数表
for(i=0;
{
x=X[i];
for(j=0;
{
y=Y[j];
q[0]=0.5;
q[1]=1.5;
q[2]=-0.3;
q[3]=1.5;
Newton(x,y,q);
//----------Newton法解非线性方程组从x,y得到t,u
t=q[0];
u=q[1];
xyBiao[i][j]=chazhi(t,u);
x=%1.2f"
X[i]);
y=%1.2f\n"
Y[j]);
f(x,y)=%1.11e\n"
xyBiao[i][j]);
}
}
intk=nihe();
//-------------计算f(x[i],y[j]),p(x[i],y[j])的值,以观察p(x,y)逼近f(x,y)的效果
8;
x1[i]=0.1*(i+1);
5;
y1[i]=0.5+0.2*(i+1);
printf("
\n数表x*,y*,f(x*,y*),p(x*,y*):
x=x1[i];
y=y1[j];
r[0]=0.5;
//-------------------------------------------------------迭代初始向量
r[1]=1.5;
r[2]=-0.3;
r[3]=1.5;
Newton(x,y,r);
//-----------Newton法解非线性方程组从x,y得到t,u
t=r[0];
u=r[1];
fxy[i][j]=chazhi(t,u);
printf("
x*=%1.1f"
x1[i]);
y*=%1.1f\n"
y1[j]);
f(x*,y*)=%1.11e\n"
fxy[i][j]);
p(x*,y*)=%1.11e\n"
pxy(x,y,k));
}
}
return0;
//子函数一:
----------------------------------------------------------列主元素Gauss消去法
intGauss(doublea[4][4],doubleb[4],doublec[4])
inti,j,k,r;
doublem[4],w[4][5];
doublet;
4;
w[i][j]=a[i][j];
w[i][4]=b[i];
for(k=0;
k<
k++)
{
r=k;
t=fabs(w[k][k]);
for(i=k+1;
if(fabs(w[i][k])>
t)
{
r=i;
t=fabs(w[i][k]);
}
if(r!
=k)
for(j=k;
4+1;
t=w[k][j];
w[k][j]=w[r][j];
w[r][j]=t;
if(0==w[k][k])
return0;
m[i]=w[i][k]/w[k][k];
w[i][j]=w[i][j]-m[i]*w[k][j];
}
for(i=4-1;
i>
=0;
i--)
c[i]=w[i][4];
for(j=i+1;
c[i]-=w[i][j]*c[j];
c[i]/=w[i][i];
return1;
//子函数二:
-------------------------------Newton法解非线性方程组从x,y得到t,u
voidNewton(doublex,doubley,doubler[])
doublec[4],s[4],a[4][4];
doublee,max;
inti,j,d=0,t=0,q=0;
do
d++;
for(i=0;
i++)//---------------------------------------------初始化系数矩阵
a[i][j]=1.0;
a[2][0]=a[3][1]=0.5;
a[0][0]=-0.5*sin(r[0]);
a[1][1]=0.5*cos(r[1]);
a[2][2]=-sin(r[2]);
a[3][3]=cos(r[3]);
c[0]=2.67-0.5*cos(r[0])-r[1]-r[2]-r[3]+x;
c[1]=1.07-r[0]-0.5*sin(r[1])-r[2]-r[3]+y;
c[2]=3.74-0.5*r[0]-r[1]-cos(r[2])-r[3]+x;
c[3]=0.79-r[0]-0.5*r[1]-r[2]-sin(r[3])+y;
if(!
Gauss(a,c,s))
exit(-1);
max=fabs(s[0]);
for(i=1;
4;
i++)
if(fabs(s[i])>
max)
max=fabs(s[i]);
t=i;
max=fabs(r[0]);
if(fabs(r[i])>
max=fabs(r[i]);
q=i;
e=fabs(s[t])/fabs(r[q]);
r[i]+=s[i];
}while(e>
E1);
//子函数三:
---------------------------------------------------分片二次代数插值计算h(t,u)
doublechazhi(doublet,doubleu)
doubletuBiao[6][6]={-0.50,-0.34,0.14,0.94,2.06,3.50,-0.42,-0.50,-0.26,0.30,1.18,2.38,-0.18,-0.50,-0.50,-0.18,0.46,1.42,0.22,-0.34,-0.58,-0.50,-0.10,0.62,0.78,-0.02,-0.50,-0.66,-0.50,-0.02,1.50,0.46,-0.26,-0.66,-0.74,-0.50};
//----------------------------------------------关于z、t、u的二维数表
doublet2[6]={0.0,0.2,0.4,0.6,0.8,1.0};
doubleu2[6]={0.0,0.4,0.8,1.2,1.6,2.0};
doublet1[3],u1[3];
intm,n,g,h;
m=int(10*t)%2==0?
5*t:
5*t+1;
n=int(5*t)%2==0?
2.5*t:
2.5*t+1;
m=0==m?
m+1:
m;
m=5==m?
m-1:
n=0==n?
n+1:
n;
n=5==n?
n-1:
for(g=m-1;
g<
m+2;
g++)
t1[g-m+1]=1.0;
for(h=m-1;
h<
h++)
if(g!
=h)
t1[g-m+1]*=t-t2[h];
t1[g-m+1]/=t2[g]-t2[h];
for(g=n-1;
n+2;
u1[g-n+1]=1.0;
for(h=n-1;
u1[g-n+1]*=u-u2[h];
u1[g-n+1]/=u2[g]-u2[h];
doublez=0;
g++)
z+=t1[g-m+1]*u1[h-n+1]*tuBiao[g][h];
returnz;
//子函数四:
------------------------------------------------计算f(x,y)的近似表达式p(x,y)
doublepxy(doublex,doubley,intz)
doublep=0.0;
for(intr=0;
r<
=z;
r++)
for(ints=0;
s<
s++)
p+=C[r][s]*pow(x,r)*pow(y,s);
returnp;
//子函数五:
----------------------------------------------------------------------------函数拟合
intnihe()
inti,j,k;
doublewucha;
doubleA[11][21],B[11][11],V[11][11],D[21][11],G[21][11],Q[11][11];
\n选择过程的k和wucha值:
for(k=1;
=k;
B[i][j]=1;
for(intt=0;
t<
j;
t++)
B[i][j]*=X[i];
V[i][j]=0;
V[i][j]+=B[t][i]*B[t][j];
if(!
Doolittle(V,k+1))
exit(-1);
for(j=0;
doublex[11],b[11];
b[i]=0;
t++)
b[i]+=B[t][i]*xyBiao[t][j];
huidai1(V,b,x,k+1);
A[i][j]=x[i];
G[i][j]=1;
G[i][j]*=Y[i];
Q[i][j]=0;
Q[i][j]+=G[t][i]*G[t][j];
Doolittle(Q,k+1))
b[i]=G[j][i];
huidai1(Q,b,x,k+1);
D[j][i]=x[i];
C[i][j]=0;
C[i][j]+=A[i][t]*D[t][j];
}
wucha=0;
for(j=0;
{
doublev=xyBiao[i][j]-pxy(X[i],Y[j],k);
wucha+=v*v;
k=%d\n"
k);
wucha=%1.11e\n"
wucha);
if(wucha<
E2)//--------------------------判断近似表达式是否达到精度要求
\n达到精度要求时k和wucha值:
break;
\n达到精度要求时p(x,y)中的系数C[i][j]:
C[%d][%d]=%1.11e\n"
i,j,C[i][j]);
returnk;
//子函数六:
----------------------------------------------------------------------Doolittle分解
intDoolittle(doublea[11][11],intr)
inti,j,k,t;
for(k=0;
r;
for(j=k;
for(t=0;
k;
a[k][j]-=a[k][t]*a[t][j];
if(0==a[k][k])
return0;
a[i][k]-=a[i][t]*a[t][k];
a[i][k]/=a[k][k];
}
//子函数七:
--------------------------------------------求Ly=b得y,进而由Ux=y得x
voidhuidai1(doublea[11][11],doubleb[11],doublex[11],intr)
inti,j;
doubley[11];
y[i]=b[i];
i;
y[i]-=a[i][j]*y[j];
for(i=r-1;
x[i]=y[i];
x[i]-=a[i][j]*x[j];
x[i]/=a[i][i];
三、运算结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析