数值分析在生活中的应用举例及Matlab实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、最小二乘法,用MATLAB实现1.数值实例下面给定的是乌鲁木齐最近1个月早晨7:00左右(新疆时间)的天气预报所得到的温度,按照数据找出任意次曲线拟合方程和它的图像。下面用MATLAB编程对上述数据进行最小二乘拟合。2008年10月26~11月26天数12345678910温度910111213141312119天数11121314151617181920温度101112131412111098天数21222324252627282930温度78911976531下面用MATLAB编程对上述数据进行最小二乘拟合2、程序代码x=[1:1:30];y=[9,10,11,12,13,14,13,12,11,9,10,11,12,13,14,12,11,10,9,8,7,8,9,11,9,7,6,5,3,1];a1=polyfit(x,y,3)%三次多项式拟合%a2=polyfit(x,y,9)%九次多项式拟合%a3=polyfit(x,y,15)%十五次多项式拟合%b1=polyval(a1,x)b2=polyval(a2,x)b3=polyval(a3,x)r1=sum((y-b1).^2)%三次多项式误差平方和%r2=sum((y-b2).^2)%九次次多项式误差平方和%r3=sum((y-b3).^2)%十五次多项式误差平方和%plot(x,y,'*')%用*画出x,y图像%holdonplot(x,b1,'r')%用红色线画出x,b1图像%holdonplot(x,b2,'g')%用绿色线画出x,b2图像%holdonplot(x,b3,'b:o')%用蓝色o线画出x,b3图像%3、数值结果不同次数多项式拟合误差平方和为:r1=67.6659r2=20.1060r3=3.7952r1、r2、r3分别表示三次、九次、十五次多项式误差平方和。4、拟合曲线如下图二、线性方程组的求解(高斯-塞德尔迭代算法)1、实例:求解线性方程组(见书P233页)3612363311420238321321321xxxxxxxxx记Ax=b,其中363320,,12361114238321bxAxxx任取初始值Tx0000,进行迭代。2、用C语言实现,源程序如下:#includestdio.h#includestdlib.hstructNode{doublevalue;//矩阵非零元素值intindex;//元素的索引(序号或列标)};structMatrix{structNode*data;//记录元素数据inttotal_elem;//矩阵非零元素个数inttotal_ln;//矩阵的总行数inttotal_col;//矩阵的总列数};//采用MSR法实现系数矩阵的存储voidCreate_Matrix(structMatrix&matrix){intindex=0,i=0;doublevalue=0.0;printf(请输入线性方程组系数矩阵的非零元素个数及总行数、总列数:);scanf(%d%d%d,&matrix.total_elem,&matrix.total_ln,&matrix.total_col);matrix.data=(structNode*)malloc(sizeof(structNode)*(matrix.total_elem+1));printf(请依次输入矩阵的主对角线元素及每行的非零非对角线元素(行优先)\n);for(i=0;i=matrix.total_elem;i++){if(i==matrix.total_ln)value=0;elsescanf(%lf,&value);matrix.data[i].value=value;}printf(\n系数矩阵的信息相关如下(Quote为添加项,表示序列号):);printf(\nValue:);for(i=0;imatrix.total_elem+1;i++)printf(%3.0lf,matrix.data[i].value);printf(\nQuote:);for(i=0;imatrix.total_elem+1;i++)printf(%3d,i);printf(\n\n);for(i=0;i=matrix.total_elem;i++){if(i==0)printf(请参照上表输入第每行第一个非零非主对角元素的序号\n);if(i==matrix.total_ln)matrix.data[i].index=matrix.total_elem+1;elseif(i==matrix.total_ln+1)printf(请依次输入非零非对角元素的列标\n);if(i!=matrix.total_ln)scanf(%d,&matrix.data[i].index);}}//显示系数矩阵的相关信息voidDisplay_Matrix(structMatrixmatrix){inti=0;printf(系数矩阵采用MSR存储法的相关信息如下(Quote为添加项,表示序列号):);printf(\nQuote:);for(i=0;i=matrix.total_elem;i++)printf(%3d,i);printf(\nvalue:);for(i=0;i=matrix.total_elem;i++)printf(%3.0lf,matrix.data[i].value);printf(\nIndex:);for(i=0;i=matrix.total_elem;i++)printf(%3d,matrix.data[i].index);printf(\n);}//初始化向量,使之分量全为0voidInit_X(double*X,intn){inti=0;for(i=0;in;i++)X[i]=0;}//初始化右端向量voidInit_b(double*b,intn){inti=0;Init_X(b,n);printf(\n请输入%d个数(方程组的右端项):,n);for(i=0;in;i++)scanf(%lf,&b[i]);}//初始化未知向量,得到初始值voidInit_temp_X(double*temp,intn){inti=0;Init_X(temp,n);printf(请输入X向量的初始值:);for(i=0;in;i++)scanf(%lf,&temp[i]);}//采用高斯-塞德尔GS迭代法求值intCalculate_X_GS(structMatrixA,double*X,double*b){inti=0,j=0,sum=0;doubletemp=0.0,temp_1=0.0,*temp_X=0,judge=0.0;temp_X=(double*)newdouble[A.total_ln];Init_temp_X(temp_X,A.total_ln);for(i=0;iA.total_ln;i++)X[i]=temp_X[i];sum=0;do{judge=0.0;for(i=0;iA.total_ln;i++)temp_X[i]=X[i];for(i=0;iA.total_ln;i++){temp=0.0;temp_1=0.0;for(j=A.data[i].index;A.data[j].indexi&&j=A.total_elem;j++)temp_1+=A.data[j].value*X[A.data[j].index];for(;jA.data[i+1].index&&j=A.total_elem;j++)temp+=A.data[j].value*temp_X[A.data[j].index];X[i]=(b[i]-temp_1-temp)/A.data[i].value;}for(i=0;iA.total_ln;i++){if(X[i]-temp_X[i]0)judge=temp_X[i]-X[i]judge?temp_X[i]-X[i]:judge;elsejudge=X[i]-temp_X[i]judge?X[i]-temp_X[i]:judge;}sum++;printf(\n\n第%d次迭代的结果:,sum);for(i=0;iA.total_ln;i++)printf(\nX[%d]=%g,i,X[i]);printf(\njudge=%g,judge);}while(judge0.000001);returnsum;}voidmain(){structMatrixA;//实现系数矩阵的存储及显示Create_Matrix(A);Display_Matrix(A);double*X=0,*b=0;X=(double*)newdouble[A.total_ln];b=(double*)newdouble[A.total_ln];Init_X(X,A.total_ln);Init_b(b,A.total_ln);inti=0,sum=0;sum=Calculate_X_GS(A,X,b);printf(\n\n线性方程组的解为:);for(i=0;iA.total_ln;i++)printf(\nX[%d]=%g,i,X[i]);printf(\n总共迭代了%d次\n\n,sum);}3、运行结果如下:

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功