北航数值分析第三次大作业.doc
文本预览下载声明
数值分析第三次大作业
数值分析第三次大作业
数值分析第三次大作业
一、 设计方案:
运用newton迭代法,求解已给方程的根xi,yi对应的ui,tj。并根据题中所给的u,t,z的二维数表对z进行插值得到zij,并使用最小二乘法曲面拟合法对z=f(x,y)进行拟合,在所给的?条件下停止运算。将*x*
i,yj带入z=f(x,y)和p(x,y)求出所求的值,并比较。
二、源程序:
#define N 6 //矩阵的阶;
#define M 4 //方程组未知数个数;
#define EPSL 1.0e-12 //迭代的精度水平;
#define MAXDIGIT 1.0e-219
#define SIGSUM 1.0e-7
#define L 500 //迭代最大次数;
#define K 10 //最小二乘法拟合时的次数上限;
#define X_NUM 11
#define Y_NUM 21
#define OUTPUTMODE 1 //输出格式:0--输出至屏幕,1--输出至文件
#include lt;stdio.hgt;
#include lt;math.hgt;
double mat_u[N] = {0, 0.4, 0.8, 1.2, 1.6, 2.0},
mat_t[N] = {0, 0.2, 0.4, 0.6, 0.8, 1.0},
mat_ztu[N][N] = {
{-0.5, -0.34, 0.14, 0.94, 2.06, 3.5},
{-0.42, -0.5, -0.26, 0.3, 1.18, 2.38},
{-0.18, -0.5, -0.5, -0.18, 0.46, 1.42},
{0.22, -0.34, -0.58, -0.5, -0.1, 0.62},
{0.78, -0.02, -0.5, -0.66, -0.5, -0.02},
{1.5, 0.46, -0.26, -0.66, -0.74, -0.5},
},
mat_val_z[X_NUM][Y_NUM] = {0},
数值分析第三次大作业
init_tuvw[4] = {1,2,1,2},
mat_crs[K][K] = {0};
FILE *p;
int main()
{
int i, j, x, y, kmin, tmp = 0;
double tmpval;
int getval_z(double, double, int, int);
int leasquare();
void result_out(int);
if(OUTPUTMODE)
{
p = fopen(quot;c:\\Result.txtquot;, quot;w+quot;);
fprintf(p, quot;计算结果:\nquot;);
fclose(p);
}
for(i = 0; i lt; X_NUM; i++)
for(j = 0; j lt; Y_NUM; j++) tmp+= getval_z(0.08 * i,0.5 + 0.05 * j, i, j);
if(!tmp) printf(quot;迭代求解 z=f(x,y) 完毕。\nquot;);
else printf(quot;迭代超过最大次数,计算结果可能不准确!\nquot;);
if(kmin=leasquare())
{
printf(quot;近似表达式已求出!\nquot;);
for(i = 0; i lt; 8; i++)
for(j = 0; j lt; 5; j++) tmp+= getval_z(0.1 * (i+1),0.5 + 0.2 * (j+1), i, j);
if(!tmp)
{
printf(quot;迭代求解 z=
显示全部