数值分析实验报告.docx
- 文档编号:24520045
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:32
- 大小:459.54KB
数值分析实验报告.docx
《数值分析实验报告.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
数值分析实验报告
数值分析实验报告
系别
电子信息系
专业
计算机科学与技术
班级学号
姓名
指导教师
2011年6月20日
实验一
实验题目:
编写一个拉格朗日插值函数,对不多于9个点的插值节点都可以求出插值函数,任意给定输入x值都可以求出y值。
程序代码:
#include
#include
#include
usingnamespacestd;
#defineN100
voidlagrange()
{
intn,k,m,q=1;
floatx[N],y[N],xx,yyy1,yyy2,yy1,yy2,yy3;
cout<<"请输入X的个数:
";
cin>>n;
for(k=0;k<=n-1;k++)
{
cout<<"请输入X"< "; cin>>x[k]; cout<<"请输入Y"< "; cin>>y[k]; } system("cls"); cout<<"则Xi与Yi表格如下: "< cout<<"Xi"<<"";for(k=0;k<=n-1;k++)cout< : left)< cout< cout<<"Yi"<<"";for(k=0;k<=n-1;k++)cout< : left)< cout< while(q) { cout<<"请输入所求x的值: "; cin>>xx; while(xx>x[k-1]||xx { cout<<"输入错误,请重新输入: "; cin>>xx; } for(k=0;k<=n-1;k++) { if(xx { m=k-1; k=n-1; } } yyy1=y[m]*((xx-x[m+1])/(x[m]-x[m+1]))+y[m+1]*((xx-x[m])/(x[m+1]-x[m])); cout<<"则拉格朗日分段线性插值为: "< for(k=0;k<=n-1;k++) { if(xx { m=k-1; k=n-1; } } if((xx-x[m])>(x[m+1]-xx))m=m+1; elsem=m; yy1=y[m-1]*((xx-x[m])*(xx-x[m+1]))/((x[m-1]-x[m])*(x[m-1]-x[m+1])); yy2=y[m]*((xx-x[m-1])*(xx-x[m+1]))/((x[m]-x[m-1])*(x[m]-x[m+1])); yy3=y[m+1]*((xx-x[m-1])*(xx-x[m]))/((x[m+1]-x[m-1])*(x[m+1]-x[m])); yyy2=yy1+yy2+yy3; cout<<"则拉格朗日分段二次插值为: "< cout<<"是否输入其余要求x的值[是 (1),否(0)]: "; cin>>q; } system("cls"); } voidmain() { lagrange(); } 实验结果: 实验二 实验题目: 用不同的方法计算积分 取不同的步长h,分别用复合梯形公式及复合辛普森公式计算积分,给出误差中关于h的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的h,使得精度不能再被改善。 程序代码: 复合梯形公式: functionI=T_quad(x,y) n=length(x);m=length(y); ifn~=m error('ThelengthsofXandYmustbeequal'); return; end h=(x(n)-x (1))/(n-1);a=[12*ones(1,n-2)1]; I=h/2*sum(a.*y); 复合辛普森公式: functionI=S_quad(x,y) n=length(x);m=length(y); ifn~=m error('ThelengthsofXandYmustbeequal'); return; end ifrem(n-1,2)~=0 I=T_quad(x,y); return; end N=(n-1)/2;h=(x(n)-x (1))/N;a=zeros(1,n); fork=1: N a(2*k-1)=a(2*k-1)+1;a(2*k)=a(2*k)+4; a(2*k+1)=a(2*k+1)+1; end I=h/6*sum(a.*y); 测试数据: 复合梯形测试数据: >>x=0.00001: 0.0001: 0.99999 >>y=sqrt(x).*log(x) >>I=T_quad(x,y) 复合辛普森测试数据: >>x=0.00001: 0.0001: 0.99999 >>y=sqrt(x).*log(x) >>I=S_quad(x,y) 实验结果: 复合梯形实验结果: >>x=0.00001: 0.0001: 0.99999 x= Columns1through8 0.00000.00010.00020.00030.00040.00050.00060.0007 Columns9through16 ………… Columns9993through10000 0.99920.99930.99940.99950.99960.99970.99980.9999 >>y=sqrt(x).*log(x) y= Columns1through8 -0.0364-0.0956-0.1227-0.1422-0.1579-0.1712-0.1828-0.1932 ………… Columns9993through10000 -0.0008-0.0007-0.0006-0.0005-0.0004-0.0003-0.0002-0.0001 >>I=T_quad(x,y) I= -0.4444 I= -0.4444 复合辛普森实验结果: >>x=0.00001: 0.0001: 0.99999 x= Columns1through8 0.00000.00010.00020.00030.00040.00050.00060.0007 ………… Columns9993through10000 0.99920.99930.99940.99950.99960.99970.99980.9999 >>y=sqrt(x).*log(x) y= Columns1through8 -0.0364-0.0956-0.1227-0.1422-0.1579-0.1712-0.1828-0.1932 ………… Columns9993through10000 -0.0008-0.0007-0.0006-0.0005-0.0004-0.0003-0.0002-0.0001 >>I=S_quad(x,y) I= -0.4444 I= -0.4444 实验三 实验题目: 用LU分解和列主元消去法解线性方程组 输出Ax=b中系数A=LU分解的矩阵L和U,解向量x及detA;列主元法的行交换次序,解向量x及detA;比较两种方法所得的结果。 程序代码: //解线性方程组 #include #include #include //----------------------------------------------全局变量定义区 constintNumber=15;//方程最大个数 doublea[Number][Number],b[Number],copy_a[Number][Number],copy_b[Number];//系数行列式 intA_y[Number];//a[][]中随着横坐标增加列坐标的排列顺序,如a[0][0],a[1][2],a[2][1]...则A_y[]={0,2,1...}; intlenth,copy_lenth;//方程的个数 doublea_sum;//计算行列式的值 char*x;//未知量a,b,c的载体 //----------------------------------------------函数声明区 voidinput();//输入方程组 voidprint_menu();//打印主菜单 intchoose();//输入选择 voidcramer();//Cramer算法解方程组 voidgauss_row();//Gauss列主元解方程组 voidDoolittle();//用Doolittle算法解方程组 intDoolittle_check(doublea[][Number],doubleb[Number]);//判断是否行列式>0,若是,调整为顺序主子式全>0 voidxiaoqu_u_l();//将行列式Doolittle分解 voidcalculate_u_l();//计算Doolittle结果 double&calculate_A(intn,intm);//计算行列式 doublequanpailie_A();//根据列坐标的排列计算的值,如A_y[]={0,2,1},得sum=a[0][A_y[0]]*a[1][A_y[1]]*a[2][A_y[2]]=a[0][0]*a[1][2]*a[2][1]; voidexchange(intm,inti);//交换A_y[m],A_y[i] voidexchange_lie(intj);//交换a[][j]与b[]; voidexchange_hang(intm,intn);//分别交换a[][]和b[]中的m与n两行 voidgauss_row_xiaoqu();//Gauss列主元消去法 voidgauss_calculate();//根据Gauss消去法结果计算未知量的值 voidexchange_a_lie(intm,intn);//交换a[][]中的m和n列 voidexchange_x(intm,intn);//交换x[]中的x[m]和x[n] voidrecovery();//恢复数据 //主函数 voidmain() { intflag=1; input();//输入方程 while(flag) { print_menu();//打印主菜单 flag=choose();//选择解答方式 } } //函数定义区 voidprint_menu() { system("cls"); cout<<"------------方程系数和常数矩阵表示如下: \n";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 实验 报告