北航数值分析第三次大作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析第三次大作业

一、算法的设计方案 1、求解非线性方程组

将题目中给出的(,)i i x y 当作已知量代入题目给定的非线性方程组,求出与

(,)i i x y 相对应的数组te[i][j],ue[i][j],此处采用的是牛顿法解非线性方程组,其

算法如书上91页所示。 2、分片二次代数插值

对所求出的数组te[i][j],ue[i][j],通过分片二次代数插值运算,得到与数组te[11][21],ue[11][21]对应的数组ze[11][21],从而得到二元函数z=(,)i i f x y ,此处采用如书上101页例2中所示的分片二次代数插值。 3、曲面插值

利用x[11],y[21],ze[11][21]建立二维函数表,进行曲面插值计算,逐步提高k 值,计算其精度,看其是否满足要求,以此来确定循环结束的时刻,并得到曲面拟合的系数矩阵C[r][s],此处的算法如书142页所示,只需将所需矩阵给出,然后按公式进行计算即可。 4、比较

观察和),(j i y x p 逼近(,)i i f x y 的效果。观察逼近效果只需要利用新给的点列

(,)i i x y 重复上面(1)和(2)的过程,得到与新的插值节点(,)i i x y 对应的(,)i i f x y ,

再与对应的(,)i i p x y 比较即可,这里求解(,)i i p x y 可以直接使用(3)中的C[r][s]和k 。 5、几点说明

分片二次插值的结果x[i],y[j],ze[i][j]输出到一个文件shubiao.txt 中,方便结果的复制与粘贴。

曲面插值的结果输出到一个文件xishu.txt 中,包括循环中每一次的k 值以及误差平方和sigma 的值,还有最后满足误差要求时曲面插值的系数C[r][s]。

观察逼近效果的结果输出到一个文件shubiao1.txt 中,方便结果的复制与粘贴。

二、源程序如下:

#include "stdio.h"

#include "math.h"

void newton(double x[11],double y[11]); //牛顿法求解非线性方程组

void eryuanchazhi(double te[11][21],double ue[11][21]); //分片二次代数插值,求z=f(x,y) void qumianchazhi(); //曲面插值,求p(x,y)

void compare(); //比较f(x*,y*)与p(x*,y*)

void inverse(double X[10][10],int N); //求逆矩阵

double fanshu(double *p); //求向量的无穷范数

double te[11][21]={0}; //存储非线线方程组的解t

double ue[11][21]={0}; //存储非线线方程组的解u

double ze[11][21]={0}; //存储分片二次插值的解z

double x[11]={0}; //x

double y[21]={0}; //y

double inv[10][10]={0}; //存储某矩阵对应的逆矩阵

double C[10][10]={0}; //存储曲面插值的系数矩阵

double rs=0; //存储k值,用于比较函数中使用

void main()

{ int i,j;

for(i=0;i<11;i++)

for(j=0;j<21;j++)

{

x[i]=0.08*i;

y[j]=0.5+0.05*j;

}

newton(x,y);

eryuanchazhi(te,ue);

qumianchazhi();

compare();

}

void newton(double x[11],double y[11])

{

double t=0;

double u=0;

double w=0;

double v=0;

double dF[5][5]={0};

double F[5]={0};

double d[5]={0};

int i,j,k;

int ik;

int cnt,count;

double temp=0;

double m=0;

double jie[4]={0};

for(i=0;i<11;i++)

for(j=0;j<21;j++)

{ t=1;

u=1;

w=1;

v=1; //初始化

//===============求解非线性方程组=============//

do

{ dF[1][1]=-0.5*sin(t);

dF[1][2]=1;

dF[1][3]=1;

dF[1][4]=1;

dF[2][1]=1;

dF[2][2]=0.5*cos(u);

dF[2][3]=1;

dF[2][4]=1;

dF[3][1]=0.5;

dF[3][2]=1;

dF[3][3]=-sin(v);

dF[3][4]=1;

dF[4][1]=1;

dF[4][2]=0.5;

dF[4][3]=1;

dF[4][4]=cos(w);

F[1]=-(0.5*cos(t)+u+v+w-x[i]-2.67);

F[2]=-(t+0.5*sin(u)+v+w-y[j]-1.07);

F[3]=-(0.5*t+u+cos(v)+w-x[i]-3.74);

F[4]=-(t+0.5*u+v+sin(w)-y[j]-0.79);

//对Newton法的系数矩阵进行赋值,注意这里是-F() //=========================列主元高斯消元法求解方程组====================//

for (k=1;k<=3;k++)

{

ik=k;

for(cnt=k;cnt<=4;cnt++)

{

if (fabs(dF[cnt][k])>fabs(dF[ik][k]))

{

ik=cnt;

}

}

相关文档
最新文档