matlab实验一:非线性方程求解-牛顿法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 失败