《数值计算方法》课程设计报告曲线拟合迭代法解方程组班级1314132专业数学与应用数学学号姓名指导教师时间2015-01-06-1-前言:本此课题我们设计了两个程序,一个是解决拟合二元函数曲线的程序,但此程序需自己先把函数化成y。=a。x。+b。的形式。另一个是雅克比迭代解方程组的程序,但此程序只能解决三元一次和四元一次方程组。这两个程序不能运算数据中含π的问题,若含π则结果不准确。本课题我们以以下两道题为例:参数说明:[]............................矩阵(:,i)............................提取矩阵中第i行的数据./............................点除~=............................不等于Sum(sum()).........................矩阵中所有元素的和.*............................点乘\............................右除pi............................πforend............................循环语句whileend............................循环语句ifelseend..........................判断语句-2-abs()............................调用取绝对值函数&............................与‘’............................字符exp(n)............................e的n次方matlab程序流程图:6.D=[160;230;320;415];%xy的值x0=D(:,1);%调用矩阵第一列的数据y0=D(:,2);%调用矩阵第二列的数据y=log(y0);%对矩阵中的元素进行运算x=x0;A=x~=pi;%取不等于π的元素并表示为1i0=sum(sum(A));%求矩阵中元素的和i1=sum(sum(x));B=x.*x;%矩阵中每个元素平方后生成新矩阵i2=sum(sum(B));C=x.*y;%x矩阵与y矩阵对应位置元素相乘e0=sum(sum(y));e1=sum(sum(C));E=[i0i1;i1i2];F=[e0;e1];H=E\F;%矩阵左除运算a0=H(1);%取单行矩阵第一个元素b0=H(2);%取单行矩阵第二个元素a=exp(a0)%调用函数e的a0次方b=b0-3-22.functionf=f3(A);%新建一个函数Formatlong;%增加小数点后位数B=A(:,1);%调用矩阵第一列数据C=B~=pi;%取不等于π的元素并表示为1e=sum(sum(C));%矩阵元素和x=0;y=0;for(i=1:e)%循环语句x(i)=0;y(i)=1;%给x,y赋初始值end;ife==3;%判断语句,下为循环语句while(abs((y(1)-x(1))/y(1))10^(-3)&&abs((y(2)-x(2))/y(2))10^(-3)&&abs((y(3)-x(3))/y(3))10^(-3))x(1)=y(1);%以上括号中为判断是否继续循环的条件x(2)=y(2);x(3)=y(3);%以下为雅可比迭代公式y(1)=-A(1,2)/A(1,1)*x(2)-A(1,3)/A(1,1)*x(3)+A(1,4)/A(1,1);y(2)=-A(2,1)/A(2,2)*x(1)-A(2,3)/A(2,2)*x(3)+A(2,4)/A(2,2);y(3)=-A(3,1)/A(3,3)*x(1)-A(3,2)/A(3,3)*x(2)+A(3,4)/A(3,3);end;f=y;elseife==4;while(abs((y(1)-x(1))/y(1))10^(-3)&&abs((y(2)-x(2))/y(2))10^(-3)&&abs((y(3)-x(3))/y(3))10^(-3)&&abs((y(4)-x(4))/y(4))10^(-3))x(1)=y(1);x(2)=y(2);x(3)=y(3);x(4)=y(4);y(1)=-A(1,2)/A(1,1)*x(2)-A(1,3)/A(1,1)*x(3)-A(1,4)/A(1,1)*x(4)+A(1,5)/A(1,1);y(2)=-A(2,1)/A(2,2)*x(1)-A(2,3)/A(2,2)*x(3)-A(2,4)/A(2,2)*x(4)+A(2,5)/A(2,2);y(3)=-A(3,1)/A(3,3)*x(1)-A(3,2)/A(3,3)*x(2)-A(3,4)/A(3,3)*x(4)+A(3,5)/A(3,3);y(4)=-A(4,1)/A(4,4)*x(1)-A(4,2)/A(4,4)*x(2)-A(4,3)/A(4,4)*x(3)+A(4,5)/A(4,4);end;f=y;elsef='此程序暂无法解决此问题';%若运行此步则输出字符end;end;(1)A=[10-2-21;-210-10.5;-1-231];y=f3(A)-4-(2)A=[10-1206;-111-1325;2-110-1-11;03-1815];y=f3(A)程序调试情况:矩阵中每个元素对应位置乘除要用点乘和点除,之前设计程序时出现了错误,矩阵与矩阵的除法运算只能用右除,左除无法运算,开始设计程序时不知道e的n次方如何表示,查阅资料后知表示为exp(n)。第二个程序的运算公式比较长,所以在设计程序是犯了多次错误,判断循环终止的条件第一次设计时只用了第一个判断条件实际必须同时满足。结论:本次设计的程序用到的基本都是最基本的运算和符号,没有用到调用复杂函数,增加了程序的长度,但更易看懂。此次设计的程序一只能针对一类题进行运算(二元方程)而且需自己变换找出x0,y0,a0,b0与x,y,a,b之间的关系然后更改程序中对应的位置。程序二只能解决三元一次和四元一次方程组,解决其他需继续增加程序会使程序看起来更复杂,本想设计一个能解决多元一次方程组的程序,但能力不足需继续努力。结束语:Matlab使用比C语言等程序语言要简单,使用起来更加方便,而且对我们解决一些数学问题有很大帮助。通过此课程让我更加了解matlab,使用matlab中的算法和函数调用更加得心应手。参考文献:互联网,MATLAB实用教程,数值计算方法。