计算方法实验报告 打印稿

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

计算方法实验报告

作业4

学院:数学科学学院

专业:信息与计算科学

班级:116班

学号:11213202

姓名:王华靖

用二分法和牛顿切线法求实根

一、实验目的:

<1>.熟悉用matlab 实现迭代

<2>.用matlab 实现二分,牛顿等求根算法

<3>.应用算法求解方程根

二、实验代码:

<1>函数图形:

>> x=[-2:0.1:1];

>> y=x.^4+2*x.^3-x-1;

>> plot(x,y);

>> grid on

-2-1.5-1-0.500.51-1.5-1

-0.5

0.5

1

<2>二分法:

1)

function [val,n]=ErFen_root(f,x,dalt)

if nargin<3

dalt=1e-5;

end

ab=x;i=0;x0=sum(ab)/2;

f0=feval(f,ab(1));

f1=feval(f,x0);

while abs(f1)>=dalt;

if f0*f1<0

ab(2)=x0;

else

ab(1)=x0;

end

x0=sum(ab)/2;

f0=feval(f,ab(1));

f1=feval(f,x0);

i=i+1;

disp(sym([ab(1) x0 ab(2) f0 f1 feval(f,ab(2))]));

if (ab(2)-x0)<2*eps

disp('May not be root!');

break;

end

end

val=x0;

if nargout==2

n=i;

end

2)

function f=F1(x)

f=x.^4+2*x.^3-x-1;

<3>牛顿切线法:

1)function [val,n]=Newton_root(f,a,daltf,daltx) tic

if nargin<4

dalt=1e-5;

end

if nargin<3

dalt=1e-6;

end

flag=0;i=size(a);

if i(2)==1

flag=1;

end

hold on

i=0;e=0;df1=0;x1=0;x0=a;

f0=feval(f,x0);d=ones(size(f0'));

df0=Jacbi_div(f,x0);

while sqrt((f0.^2)*d)>=daltf

x1=x0-f0*inv(df0');

f1=feval(f,x1);

df1=Jacbi_div(f,x1);

i=i+1;

if sqrt(x1.^2*d)<1

e=sqrt((x0-x1).^2)*d;

else

e=sqrt(((x0-x1).^2)*d./(x1.^2))*d;

end

if e

break;

end

if i==100

disp('No root find!');

break;

end

if flag==1

plot([x0 x1],[f0 0],'r', [x0 x0],[0 f0], '-.r');

end

x0=x1;df0=df1;f0=f1;

disp(i)

disp([xo' fo'])

end

if flag==1

X=x1-(a-x1):(a-x1)/50:x1+(a-x1);

plot(X,feval(f,X),'k');

end

hold on

val=x1;

if nargout==2

n=i;

end

disp('耗时:')

disp(toc)

2)

function[val]=Jacbi_div(f,X,n,h)

if nargin<=3

h=0.1;

end

if nargin==2

n=3;

end

r=size(X);m=r(2);

b=size(feval(f,X));b=b(2);

df=zeros(b,m);

for t=1:m

Y=X;Y(t)=Y(t)+h;

Z=X;Z(t)=Z(t)-h;

df(:,t)=((feval(f,Y)-feval(f,Z))./(2*h))'; end

G(1,1,:,:)=df;

for t=2:n

h=h/2;

G=[G zeros(t-1,1,b,m);zeros(1,t,b,m)];

for k=1;m

Y=X;Y(k)=Y(k)+h;

Z=X;Z(k)=Z(k)-h;

df(:,k)=((feval(f,Y)-feval(f,Z))./(2*h))'; end

G(1,1,:,:)=df;

for k=2;t

r=k-1;

G(t,k,:,:)=((4^r).*G(t,r,:,:)-G(t-1,r,:,:))./(4^r-1);

end

end

val=reshape(G(n,n,:),[b,m]);

3)

function y=fun1(x)

y=x.^4+2*x.^3-x-1;

三、运行结果:

<1>

val =

-1.8668

n =

12

>>

<2>

m =

2

t =

2

相关文档
最新文档