matlab实验一:非线性方程求解-牛顿法

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

实验一:非线性方程求解

程序1:二分法:

syms f x;

f=input('请输入f(x)=');

A=input('请输入根的估计范围[a,b]='); e=input('请输入根的误差限e='); while (A(2)-A(1))>e

c=(A(1)+A(2))/2;

x=A(1);

f1=eval(f);

x=c;

f2=eval(f);

if (f1*f2)>0

A(1)=c;

else

A(2)=c;

end

end

c=(A(1)+A(2))/2;

fprintf('c=%.6f\na=%.6f\nb=%.6f\n',c,A)

用二分法计算方程:

1.请输入f(x)=sin(x)-x^2/2

请输入根的估计范围[a,b]=[1,2]

请输入根的误差限e=0.5e-005

c=1.404413

a=1.404411

b=1.404415

2.请输入f(x)=x^3-x-1

请输入根的估计范围[a,b]=[1,1.5]

请输入根的误差限e=0.5e-005

c=1.324717

a=1.324715

b=1.324718

程序2:newton法:

syms f x;

f=input('请输入f(x)=');

df=diff(f); x0=input('请输入迭代初值x0=');

e1=input('请输入奇异判断e1=');

e2=input('请输入根的误差限e2=');

N=input('请输入迭代次数限N=');

k=1;

while (k

x=x0;

if abs(eval(f))

fprintf('奇异!\nx=%.6f\n迭代次数为:%d\n',x0,k)

break

else

x1=x0-eval(f)/eval(df);

if abs(x1-x0)

fprintf('x=%.6f\n迭代次数为:%d\n',x1,k)

break

else

x0=x1;

k=k+1;

end

end

end

if k>=N

fprintf('失败\n')

end

用newton法计算方程:

1.请输入f(x)=x*exp(x)-1

请输入迭代初值x0=0.5

请输入奇异判断e1=0.1e-010

请输入根的误差限e2=0.5e-005

请输入迭代次数限N=10

x=0.567143

迭代次数为:4

2.请输入f(x)=x^3-x-1

请输入迭代初值x0=1

请输入奇异判断e1=0.1e-010

请输入根的误差限e2=0.5e-005

请输入迭代次数限N=10

x=1.324718

迭代次数为:5

3.1:请输入f(x)=(x-1)^2*(2*x-1)

请输入迭代初值x0=0.45

请输入奇异判断e1=0.1e-010

请输入根的误差限e2=0.5e-005

请输入迭代次数限N=10

x=0.500000

迭代次数为:4

3.2:请输入f(x)=(x-1)^2*(2*x-1)

请输入迭代初值x0=0.65

请输入奇异判断e1=0.1e-010

请输入根的误差限e2=0.5e-005

请输入迭代次数限N=10

x=0.500000

迭代次数为:9

3.3:请输入f(x)=(x-1)^2*(2*x-1)

请输入迭代初值x0=0.55

请输入奇异判断e1=0.1e-010

请输入根的误差限e2=0.5e-005

请输入迭代次数限N=10

x=0.500000

迭代次数为:4

程序3:改进的newton法:

syms f x;

f=input('请输入f(x)=');

df=diff(f);

x0=input('请输入迭代初值x0=');

e1=input('请输入奇异判断e1=');

e2=input('请输入根的误差限e2=');

N=input('请输入迭代次数限N=');

k=1;

while (k

x=x0;

if abs(eval(f))

fprintf('奇异!\nx=%.6f\n迭代次数为:%d\n',x0,k)

break

else

x1=x0-2*eval(f)/eval(df);

if abs(x1-x0)

fprintf('x=%.6f\n迭代次数为:%d\n',x1,k)

break

else

x0=x1;

k=k+1;

end

end

end

if k>=N

fprintf('失败\n')

end

用改进的newton法计算方程:

1.请输入f(x)=(x-1)^2*(2*x-1)

请输入迭代初值x0=0.55

请输入奇异判断e1=0.1e-010

请输入根的误差限e2=0.5e-005

请输入迭代次数限N=10

失败

2.请输入f(x)=(x-1)^2*(2*x-1)

请输入迭代初值x0=0.55

请输入奇异判断e1=0.1e-010

请输入根的误差限e2=0.5e-005

请输入迭代次数限N=20

失败

3.请输入f(x)=(x-1)^2*(2*x-1)

请输入迭代初值x0=0.55

请输入奇异判断e1=0.1e-010

请输入根的误差限e2=0.5e-005

请输入迭代次数限N=100

失败

相关文档
最新文档