(完整版)哈工大-数值分析上机实验报告 联系客服

发布时间 : 星期二 文章(完整版)哈工大-数值分析上机实验报告更新完毕开始阅读2007691d302b3169a45177232f60ddccdb38e645

实验报告一

题目: 非线性方程求解

摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。

前言:(目的和意义)

掌握二分法与Newton法的基本原理和应用。 数学原理:

对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。

对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。

Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式

产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为

其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计:

本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下

function y=f(x); y=-x*x-sin(x);

写成如上形式即可,下面给出主程序。

二分法源程序:

clear

%%%给定求解区间 b=1.5; a=0;

%%%误差 R=1;

k=0;%迭代次数初值 while (R>5e-6) ; c=(a+b)/2; if f12(a)*f12(c)>0; a=c; else b=c; end

R=b-a;%求出误差 k=k+1; end

x=c%给出解

Newton法及改进的Newton法源程序:

clear

%%%% 输入函数

f=input('请输入需要求解函数>>','s') %%%求解f(x)的导数 df=diff(f);

%%%改进常数或重根数 miu=2;

%%%初始值x0

x0=input('input initial value x0>>'); k=0;%迭代次数

max=100;%最大迭代次数

R=eval(subs(f,'x0','x'));%求解f(x0),以确定初值x0时否就是解

while (abs(R)>1e-8)

x1=x0-miu*eval(subs(f,'x0','x'))/eval(subs(df,'x0','x')); R=x1-x0; x0=x1; k=k+1;

if (eval(subs(f,'x0','x'))<1e-10); break end

if k>max;%如果迭代次数大于给定值,认为迭代不收敛,重新输入初值

ss=input('maybe result is error,choose a new x0,y/n?>>','s');