抛物线法非线性方程求解

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

《MATLAB 程序设计实践》课程考核

抛物线法非线性方程求解算法说明:

(1)选定初始值210,,x x x ,并计算)(),(),(210x f x f x f 和以下差分: ],[12x x f =

1212)

()(x x x f x f --

10101)

()(],[x x x f x f x x f --=

20112012]

,[],[],,[x x x x f x x f x x x f --=

一般取b x a b x a x <<==210,,。注意不要使三点共线。

(2)用牛顿插值法对三点))(,()),(,()),(,(221100x f x x f x x f x 进行插值得到一条抛物线,它有两个根:

,24223C

AC

B B x x -±-+

= 其中

)](,,[],[],

,,[),(12012120102x x x x x f x x f B x x x f C x f A -+===

两个根中只取靠近2x 的那个根,即±号取于B 同号, 即

AC

B B B A

x x 4)sgn(22

23-+-

=

(3)用321,,x x x 代替210,,x x x ,重复以上步骤,并有以下递推公式: n

n n

n n n

n n C A B B B A x x 4)sgn(221-+-=+,

其中

)](,,[],[],

,,[),(121121-------+===n n n n n n n n n n n n n n x x x x x f x x f B x x x f C x f A

(4)进行精度控制。

算法流程图:

成立

抛物线法的MATLAB程序代码如下:

function root=Parabola(f,a,b,x,eps)

%抛物线法求函数 f在区间【a,b】上的一个零点%函数名:f

%区间左端点: a

%区间右端点:b

%初始迭代点:x

%根的精度:eps

%求出的函数零点:root

if(nargin==4)

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

tol=1;

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

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

fx=subs(sym(f),findsym(sym(f)),x);

d1=(fb-fa)/(b-a);

d2=(fx-fb)/(x-b);

d3=(f2-f1)/(x-a);

B=d2+d3*(x-b);

root=x-2*fx/(B+sign(B)*sqrt(B^2-4*fx*d3)); t=zeros(3); t(1)=a; t(2)=b; t(3)=x; while(tol>eps)

t(1)=t(2); %保存3个点 t(2)=t(3); t(3)=root;

f1=subs(sym(f),findsym(sym(f)),t(1)); %计算3个点的函数值 f2=subs(sym(f),findsym(sym(f)),t(2)); f3=subs(sym(f),findsym(sym(f)),t(3));

d1=(f2-f1)/(t(2)-t(1)); %计算3个差分 d2=(f3-f2)/(t(3)-t(2)); d3=(d2-d1)/(t(3)-t(1));

B=d2+d3*(t(3)-t(2)); %计算算法中的B root=t(3)-2*f3/(B+sign(B)*sqrt(B^2-4*f3*d3)); tol=abs(root-t(3)); end end

举例应用:

采用抛物线法求方程2lg =+

x x 在区间[1,4]上的一个根。

流程图:

解:在MA TLAB 命令窗口中输入: >> r=Parabola('sqrt(x)+log(x)-2',1,4,2) r =

1.8773

实验1用ode45、ode23、ode113解下列微分方程 流程图 编辑相应方程的M 文件

(1)y’=x-y,y(0)=1,0> [x,y]=ode45('fun',[1,2,3],1)

x =

1

2

3

y =

1.0000

1.3679

2.1353

>> [x,y]=ode23('fun',[1,2,3],1)

x =

1

2

3

y =

1.0000

1.3677

2.1352

>> [x,y]=ode113('fun',[1,2,3],1) x =

1

2

3

y =

1.0000

1.3679

2.1353

相关文档
最新文档