1、0.2-0.42-0.260.31.182.38-0.180.461.420.60.22-0.58-0.10.620.78-0.02-0.661.01.5-0.74确定了一个二元函数z=f(x,y)。1试用数值方法求出f(x,y)在区域D=(x,y)0x0.8,0.5y1.5上的一个近似表达式要求p(x,y)一最小的k值达到以下的精度其中xi=0.08i,yj=0.5+0.05j。2计算f(xi*,yj*),p(xi*,yj*)(i=1,2,8;j=1,2,5)的值,以观察p(x,y)逼近f(x,y)的效果,其中xi*=0.1i,yj*=0.5+0.2j。二、算法方案1使用C+语言实现,使用牛
2、顿迭代法求解非线性方程组,对,()的共计1121组分别求出非线性方程组的解,即求出与对应的。均为1121的矩阵。2由求出的,使用分片二次代数插值法对题中给出的数表进行插值得到。即得到的1121个数值解。3k=0时的多项式拟合必然不符合要求,从k=1开始迭代,使用最小二乘法的曲面拟合法对进行拟合,计算在不符合要求的情况下增大。当时结束计算,输出结果。4由3中得到的系数计算的值,再次使用牛顿迭代法对进行求解得到,再次进行二次插值得到结果,以观察逼近的效果。其中,。三、源程序:#includevectorcmathalgorithmiomanip#define N 4/方程组未知个数#define
3、M 6/z,t,u数表阶数#define X_Num 11#define Y_Num 21/定义数表大小#define EPSL 1e-12/定义阶数,精度#define EPSL2 1e-7using namespace std;typedef vectorvector Mat;/将二维数组简写为Mat Equation( Mat input );/定义求解非线性方程的函数,同时供Inverse,Zxy函数调用Mat Inverse(int rank, Mat input2);/定义求解逆矩阵的函数double Accuracy ( vector X_1,vector X_2);/定义求解近
4、似向量精度的函数double Interpolation ( double u_1,double t_1);/定义分片代数二次插值函数Mat Crs(vectorX,vectorY,Mat U);/最小二乘法求解近似表达式系数Mat Zxy(vectorX1,vectorY1);/定义非线性方程组,调用Equation,Accuracy和Interpolation完成求解/所有的output应该调整,是否调整为输出到文件为好void output(vectorFinal1,vectorFinal2,Mat Final3);/定义输出函数,输出矩阵void output2(Mat Xi);dou
5、ble vector_uM = 0,0.4,0.8,1.2,1.6,2;double vector_tM = 0,0.2,0.4,0.6,0.8,1;double mat_zMM = -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, ;/定义初始数表z,t,
6、u,此处使用数组,而其它矩阵和向量均使用的为vector以及二维vectorvoid main()int i,j;vector x,y;x.resize(X_Num);y.resize(Y_Num);for(i=0;iX_Num;i+)xi=0.08*i;Y_Num;yi=0.5+0.05*i;/定义插值节点Mat Z = Zxy(x,y);/求出插值点函数值output(x,y,Z);Mat Cr = Crs(x,y,Z);/求出近似多项式output2(Cr);x.resize(8);y.resize(5);8;xi=0.1*(i+1);for(j=0;j5;j+)yj=0.5+0.2*(
7、j+1);/新插值节点Mat Z2 = Zxy(x,y);Mat P;P.resize(8);Pi.resize(5);int k = Cr.size();/利用上一部的Cr获得P值即可double tmp;int m,n;for(m=0;mm+)for(n=0;nn+)tmp = 0;for(i=0;k;for(j=0;tmp = tmp + Crij*pow(xm,i)*pow(yn,j);Pmn = tmp;/使用近似多项式得到的近似值for(j=0;coutsetprecision(2)scientificxi ;yj插值setprecision(12)Z2ij拟合Pijendl;sy
8、stem(pause);Y1)int i,j,k;x,y;x=X1;y=Y1;int X_No=x.size();int Y_No=y.size(); X_1,X_2;double wrong;X_1.resize(N);/过渡用于判断误差X_2.resize(N);/此处调试发现x,y值略有差异Mat A;/使用牛顿法迭代的带求非线性方程Mat t,u,v,w;Mat Z;/对应t,u的数表ZA.resize(N);N;Ai.resize(N+1);t.resize(X_No);u.resize(X_No);v.resize(X_No);w.resize(X_No);Z.resize(X_N
9、o);X_No;ti.resize(Y_No);ui.resize(Y_No);vi.resize(Y_No);wi.resize(Y_No);Zi.resize(Y_No);Y_No;tij=uij=wij=vij=1;/将待求量赋予初值Aij=1;A20=0.5;A31=0.5;i+)/求解对应x,y的t,u,v,wj=0;while(jY_No)A04=2.67 + xi - 0.5 * cos (tij) - uij - vij - wij;/此处应做修改A14=1.07 + yj - 0.5 * sin (uij) - tij - vij - wij;A24=3.74 + xi - cos (vij) - 0.5 * tij - uij - wij;A34=0.79 + yj - sin (wij) - 0.5 * uij - tij - vij;A00=-0.5 * sin (tij);A11=0.5 * cos (uij);A22=-sin (vij);A33=cos (wij);vector Change = Equation ( A ); /调用求解方程得到第一组增量,此处需要注意Change赋值的问题,得到每组增量后怎么处理for(k=0;kk+)X_1k = Changek;X_20=tij;X_21=uij;X_22=vij;X_23=wij;wro
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1