哈工大数值解析总结上机实验报告.doc实验报告一
题目:非线性程求解
摘要:非线性程的解析解通常很难给出, 因此线性程的数值解法就尤为重要。 本实验采用
两种常见的求解法二分法和 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,然后根据其迭代公式
xk 1
f (xk )
xk
f ' ( xk )
产生逼近解
*
的迭代数列 { k},这就是 Newton 法的思想。当
x
0 接近
*
时收敛很快,但是
x
x
x
当 x0 选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为
xk 1
xk
r f ( xk )
f ' ( xk )
其中 r 为要求的程的根的重数,这就是改进的
Newton 法,当求解已知重数的程的根时,
在同种条件下其收敛速度要比 Newton
法快的多。
程序设计:
本实验采用 Matlab 的 M 文件编写。其中待求解的程写成 function 的式,如下
function y=f(x);
y=-x*x-sin(x);
写成如上形式即可,下面给出主程序。
二分法源程序:
clear
%%%给定求解区间
b=;
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');
if strcmp(ss,'y')
专业资料
x0=input('input initial value x0>>');
k=0;
else
break
end
end
end
k;%给出迭代次数
x=x0 ; %给出解
结果分析和讨论:
1. 用二分法计算程 sin x
x 2
0 在[1, 2]的根。 (
5 * 10 6 ,下同 )
2
计算结果为
x= ;
f(x)= --007
哈工大数值解析总结上机实验报告 来自淘豆网m.daumloan.com转载请标明出处.