数学建模的实验报告

数学建模

实验报告

姓名:               

学院:         

专业班级:

学号:         

数学建模实验报告(一)

——用最小二乘法进行数据拟合

一.实验目的:

     1.学会用最小二乘法进行数据拟合。

2.熟悉掌握matlab软件的文件操作和命令环境。

3.掌握数据可视化的基本操作步骤。

4.通过matlab绘制二维图形以及三维图形。

二.实验任务

     来自课本64页习题:

用最小二乘法求一形如y=a+b的多项式,使之与下列数据拟合:

三.实验过程

1.实验方法:用最小二乘法解决实际问题包含两个基本环节:先根据所给出数据点的变化趋势与问题的实际背景确定函数类;然后按照最小二乘法原则求最小二乘解来确定系数。即要求出二次多项式: y=a+b的系数。

2程序

x=[19 25 31 38 44]

y=[19.0 32.3 49.0 73.3 97.8]

ab=y/[ones(size(x));x.^2];

a=ab(1),b=ab(2)

xx=19:44;

plot(xx,a+b*xx.^2,x,y,'.')

3.上机调试

得到结果如下:

x = 19    25    31    38    44

y=19.0000   32.3000   49.0000   73.3000   97.8000

a = 0.9726

b = 0.0500

图形:

四.心得体会

    通过本次的数学模型的建立与处理,我们学习并掌握了用最小二乘法进行数据拟合,及多项式数据拟合的方法,进一步学会了使用matlab软件,加深了我们的数学知识,提高了我们解决实际问题的能力,为以后深入学习数学建模打下了坚实的基础。

数学建模实验报告(二)

         ——用Newton法求方程的解

一. 实验目的

1.   掌握Newton法求方程的解的原理和方法。

2.   利用Matlab进行编程求近似解。

二. 实验任务

来自课本109页习题4-2:

用Newton法求f(x)=x-cosx=0的近似解

三. 实验过程

1. 实验原理

把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。

2.   程序设计:

function y=nd(x)

y= x-cosx

function y=nd0(x)

y=1+sinx

主程序

 x=0;  %迭代初值

i=0;    %迭代次数计数

while i<=100;

    y=x-nd(x)/nd0(x); %牛顿迭代格式

    if abs(y-x)>10^(-5);  %收敛判断

        x=y;

    else break

    end

    i=i+1;

end

fprintf('\n%s%.4f \t%s%d','x=',x,'i=',i) %输出结果

四.       实验心得

    通过这次实验我掌握了Newton法求解方程的方法。并通过编程进一步熟悉了Matlab的使用方法。在实验过程中仍然遇到了不少的困难,比如说编程调试部分,需要有很大的耐心去修改,再调试。而在这一步步的改进过程中发现自己的进步。

数学建模实验报告(三)

          ——用Jacobi迭代法求解线性方程组

一.   实验目的

2.   掌握Jacobi迭代法求解线性方程组的方法

3.   学会用Matlab编程求解方程

二.   实验任务

课本155页习题1:

取初始向量x=,用Jacobi迭代法求解线性方程组:

 

三.   实验过程

1.   方法原理:迭代法就是用某种极限过程逐渐逼近线性方程组精确解的方法。迭代法的基本思想是构造一串收敛到解的序列,即建立一种从已有近似解计算新的近似解的规则。

将方程组(4.1.3)中系数矩阵分解为
        (7.2.1)
其中为A的对角矩阵,
      (7.2.2)
-L,-U分别为A的严格下三角矩阵与A的严格上三角矩阵.

假定 (i=1,2,…,n),则D非奇异.取M=D,N=L+U,则得
          1           

1称为解方程组的Jacobi迭代法,简称J法.计算时可写成如下分量形式:
      

2.程序

a=[1 2 -2;1 1 1;2 2 1]

d=[1;3;5]

x=[0;0;0];                      %初始向量

stop=1.0e-4                     %迭代的精度

L=-tril(a,-1)

U=-triu(a,1)   

D=inv(diag(diag(a)))

X=D*(L+U)*x+D*d;             % J迭代公式

n=1;

while norm(X-x,inf)>=stop         % 时迭代中止否则继续

x=X;    

X=D*(L+U)*x+D*d;

n=n+1;

end

X

n

3.上机调试:

得实验结果:

a =

     1     2    -2

     1     1     1

     2     2     1

d =

     1

     3

     5

stop =

  1.0000e-004

L =

     0     0     0

    -1     0     0

    -2    -2     0

U =

     0    -2     2

     0     0    -1

     0     0     0

D =

     1     0     0

     0     1     0

     0     0     1

X =

     1

     1

     1

n =

     4

四.   实验体会

通过本次实验我掌握了高斯-赛德尔迭代法,雅可比迭代法求解线性方程的实验方法。此实验报告中只列出了雅可比迭代法的求解程序。但从实验结果来看,高斯-赛德尔迭代法要比雅可比迭代公式的收敛速度快,可见雅可比迭代法并不是一种理想的求解方法,但在一些简单地线性方程中,雅可比迭代法还是比较简单方便的。关于程序的编写也是翻阅了大量资料才得出的,其中犯了不少的语法错误,可见我对matlab软件还不是很熟练,得加强学习。

相关推荐