数值分析方程求根实验matlab,数值分析实验之非线性方程求根(MATLAB实现)
一、實(shí)驗(yàn)?zāi)康?/p>
1. 了解一般非線性方程的求根是比較復(fù)雜的事情:要討論(或知道)它有無實(shí)根,有多少實(shí)根;知道求近似根常用的幾種方法,每種方法的特點(diǎn)是什么。
2. 用通過二分法(區(qū)間半分法)、不動(dòng)點(diǎn)(也Picard)迭代法及Newton迭代(切線)法求其它非線性方程的根,并盡可能估計(jì)誤差。
二、實(shí)驗(yàn)原理
三、實(shí)驗(yàn)程序
四、實(shí)驗(yàn)內(nèi)容
1. 用二分法求方程x3-3x-1=0在的所有根.要求每個(gè)根的誤差小于0.001.
提示與要求: (1) 利用精度找到迭代次數(shù);
(2) 由f(x)=3(x2-1)可取隔根區(qū)間[-2,-1].[-1,1].[1,2]);
(3) 用程序求各隔根區(qū)間內(nèi)的根.
2. 用不動(dòng)點(diǎn)迭代求: (1)x3+2x2+10x-20=0的所有根.
或: (2)9x2-sinx-1=0在[0,1]上的一個(gè)根.
3. 用Newton迭代法求解下列之一,準(zhǔn)確到10-5:
(1) x3-x-1=0的所有根;
(2) ex+2-x+2cosx-6=0位于[0,2]上的根.
五、實(shí)驗(yàn)程序
? 二分法:
文件代碼:
function y = f(x)
y=x^3-3*x-1;
end
程序代碼:
function Bipart(a0,b0,tol)
%a0為左區(qū)間,b0為右區(qū)間,tol為區(qū)間誤差限
a=a0;b=b0;
m=ceil(log((b-a)/tol)/log(2));
for k=1:m
p=(a+b)/2;
if f(p)*f(b)<0
a=p;
else
b=p;
end
end
disp(['經(jīng)過二分法求得的跟為:x=',num2str((a+b)/2,'%.6f')])
disp(['共經(jīng)過',num2str(k),'次計(jì)算'])
命令窗口:
Bipart(-2,-1, 0.001)
Bipart(-1, 1, 0.001)
Bipart (1,2, 0.001)
運(yùn)行結(jié)果:
? 不動(dòng)點(diǎn)法:
文件代為:
function y = f(x)
y=9*x^2-sin(x)-1;
end
程序代碼:
function Budongdian(x0,tol,m)
%x0為初始值,tol為誤差容限,m為最大迭代次數(shù)
syms x
F(x)=sqrt(sin(x)+1)/3;
m=m;
text='';
x=[];
x(1)=x0;
for k=1:m
x(k+1)=F(x(k));
if (abs(x(k+1)-x(k))<=tol)==1
text='迭代成功';
disp(text);
disp(['經(jīng)過不動(dòng)點(diǎn)迭代法求得的跟為:x=',num2str(x(k+1),'%.7f')]);
disp(['共經(jīng)過',num2str(k),'次計(jì)算'])
break
end
end
if isempty(text)==1
disp('Method failed')
end
命令窗口:
Budongdian(1, 0.00001, 100)
運(yùn)行結(jié)果:
? 牛頓迭代法:
文件代碼:
function y = f(x)
y=exp(x)+2^(-x)+2*cos(x)-6;
end
程序代碼:
function Newton_gen(x0,tol,m)
%x0為初始值,tol為誤差容限,m為最大迭代次數(shù)
syms x
F(x)=x-f(x)/diff(f(x));
m=m;
text='';
x=[];
x(1)=x0;
for k=1:m
x(k+1)=F(x(k));
if (abs(x(k+1)-x(k))<=tol)==1
text='迭代成功';
disp(text);
disp(['經(jīng)過Newton迭代法求得的跟為:x=',num2str(x(k+1),'%.7f')]);
disp(['共經(jīng)過',num2str(k),'次計(jì)算'])
break
end
end
if isempty(text)==1
disp('Method failed')
end
命令窗口:
Newton_ .gen(2, 0.00001, 100)
運(yùn)行結(jié)果:
另解:
? 二分法:
定義函數(shù):
function Bipart_2(a0,b0,tol,Tol)
%a0為左區(qū)間,b0為右區(qū)間,tol為區(qū)間誤差限,Tol為f誤差限
a=a0;b=b0;
m=ceil(log((b-a)/tol)/log(2));
for k=1:m
p=(a+b)/2;
if f(p)*f(b)<0
a=p;
else
b=p;
end
if abs(f((a+b)/2))
break;
end
end
disp(['經(jīng)過二分法求得的跟為:x=',num2str((a+b)/2,'%.6f')])
disp(['共經(jīng)過',num2str(k),'次計(jì)算'])
命令窗口:
Bipart. .2(-1, 1,0.001,0.1)
Bipart_ .2(-1, 1, 0.001, 0.000001)
運(yùn)行結(jié)果:
? 不動(dòng)點(diǎn)法:
定義函數(shù):
function [x,k]=budong(fun,x0,tol,m)
for k=1:m
x=fun(x0);
if abs(x-x0)
break;
end
x0=x;
end
x=vpa(x,8);
function t=fun(x1)
syms x;
f=9*x.*x-sin(x)-1;
s=subs(diff(f,x),x,x1);
x=x1;
f=9*x.*x-sin(x)-1;
t=x-f/s;
命令行窗口輸入:
[x,k]=budong(@fun,0.5,1e-5,100)
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的数值分析方程求根实验matlab,数值分析实验之非线性方程求根(MATLAB实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: strocli64 源码_storcli
- 下一篇: 不能用u盘怎么拷数据 无法使用U盘,如何