二分法非线性方程求解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、编程实现以下科学计算算法,并举一例应用之(参考书籍《精通MATLAB 科学计算》,王正林等编著,电子工业出版社,2009年) “二分法非线性方程求解”

二分法的具体求解步骤如下。

(1)计算函数f(x)在区间[a,b]中点的函数值f((a+b)/2),并作下面的判断: 如果0)2

(

)(<+b

a f a f ,转到(2)

; 如果0)2(

)(>+b a f a f ,令 2b

a a +=

,转到(1); 如果 0)2()(=+b a f a f ,则 2b

a x +=

为一个跟。 (2)如果 ε<+-|2|b a a (ε为预先给定的精度)

,则4

3a

b x +=为一个根,否则令2b

a b +=,转到(1)。

在MATLAB 中编程实现的二分法函数为:HalfInterval 。 功能:用二分法求函数在某个区间上的一个零点。 调用格式:root=HalfInterval(f,a,b,eps). 其中,f 函数名; a 为区间左端点; b 为区间右端点;

eps 为根的精度; root 为求出的函数零点。

二分法的MATLAB 程序代码如下:

function root=HalfInterval(f,a,b,eps) %二分法求函数f 在区间[a,b]上的一个零点 %函数名:f %区间左端点:a %区间右端点:b %根的精度:eps %求出的函数零点:root if (nargin==3) eps=1.0e-4;

end

f1=subs(sym(f),findsym(sym(f)),a); %两端点的函数值f2=subs(sym(f),findsym(sym(f)),b);

if(f1==0)

root=a;

end

if(f2==0)

root=b;

end

if(f1*f2>0)

disp('两端点函数值乘积大于0!');

return;

else

root=FindRoots(f,a,b,eps); %调用求解子程序end

function r=FindRoots(f,a,b,eps)

f_1=subs(sym(f),findsym(sym(f)),a);

f_2=subs(sym(f),findsym(sym(f)),b);

mf=subs(sym(f),findsym(sym(f)),(a+b)/2); %中点函数值if(f-1*mf>0)

t=(a+b)/2;

r=FindRoots(f,t,b,eps); %右递归

else

if(f_1*mf==o)

r=(a+b)/2;

else

if(abs(b-a)<=eps)

r=(b+3*a)/4; %输出根

else

s=(a+b)/2;

r=FindRooots(f,a,b,eps); %左递归

end

end

end

流程图:

实例应用:

采用二分法求方程0133=+-x x 在区间[0,1]上的一个根。

解: 流程图:

在MATLAB 命令窗口中输入:

r=HalfInterval('x^3-3*x+1',0,1)

运行结果:

2、编程以解决以下科学计算问题。

试验6 现有一平面上的封闭曲线,取一点建立坐标系,每隔9

弧度测一点,数据如下表: i 0和18 1 2 3 4 5 6 7 8 Xi 100 134 164 180 198 195 186 160 136 Yi

503

525

514.3 451.0 326.5 188.6 92.2

59.6

62.2

输入:r=HalfInterval('x^3-3*x+1',0,1)

输出r

调用HalfInterval 函数

开始

结束

用周期样条求曲线轮廓并作图。

分析:

将周期样条分成两部分来求,最后画在一个图上。用spline进行拟合。流程图:

源程序:

>> x1=[0 5 17 32 63 100 134 164 180 198];

y1=[280.5 324.9 369.4 413.8 458.3 503 525 514.3 451 326.5];

x11=[0:1:198];

y11=spline(x1,y1,x11);

plot(x11,y11,'*-',x1,y1,'-.rd')

hold on

x2=[198 195 186 160 136 100 66 35 15 0 ];

y2=[326.5 188.6 92.2 59.6 62.2 102.7 147.1 191.6 236.0 280.5]; x22=[198:-1:0];

y22=spline(x2,y2,x22);

plot(x22,y22,'*-',x2,y2,'-.rd') legend('计算数据','实验数据') 运行结果:

实验7 用电压V=10伏的电池给电容器,电容器上t 时刻的电压

)/ex p()()(0r t V V V t V ---=,其中0V 是电容器的初始电压,t 是充电常数,试

由下面一组V ,t 数确定0V 和r 。 t/s 0.5

1 2 3 4 5 6 7 V/V 6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63

分析:

采用最小二乘法进行拟合,对V (t )=V-(V-V 0)exp (-t/τ)两边求自然对数得到:log(V-V(t))=log(V- V 0)-t/τ

令k=-1/τ,w=log (V- V 0),x=t ,y=log (V-V (t ))。 得到方程:y=kx+w

流程图:

开始

相关文档
最新文档