割线法与隐函数图像.docx
《割线法与隐函数图像.docx》由会员分享,可在线阅读,更多相关《割线法与隐函数图像.docx(8页珍藏版)》请在冰豆网上搜索。
割线法与隐函数图像
专业 序号 姓名 日期
实验3割线法
【实验目的】学会分别用单点割线法和双点割线法来求解方程的根
【实验内容】
用割线法求方程在区间(1,1.5)内之间的根()。
【方法】
双点割线法:
设a,b为迭代初值,求两点(a,f(a))与(b,f(b))的连线(割线)与x轴的交点记为c,
再把迭代初值换成b,c,重复计算.
单点割线法:
设a,b为迭代初值,求两点(a,f(a))与(b,f(b))的连线(割线)与x轴的交点记为c,
但只把一个迭代初值a换成c或把b换成c,来看结果是否不同。
【程序如下】:
functionmysecant
f=inline('x^4+2*x^2-3-x');
a=1.5;b=1;
delta=1e-9;epsilon=1e-9;max1=20;
[c,err,iter,yc]=secant(f,a,b,delta,epsilon,max1)
%---------------------------------------------------------
function[c,err,iter,yc]=secant(f,a,b,delta,epsilon,max1)
%[c,err,iter,yc]=secant(f,a,b,delta,epsilon,max1)
%输入:
f连续函数
%%a,b迭代初值
%%delta,epsilon容差
%%max1最大迭代次数
%%输出:
c近似根
%%err误差
%%iter迭代次数
%%yc=f(c)
%
fork=1:
max1
ya=feval(f,a);%ya=f(a)
yb=feval(f,b);
c=b-f(b)*(b-a)/(f(b)-f(a));%割线与x轴交点的横坐标
err=abs(c-b);%相邻两次迭代的误差
relerr=err/(abs(c)+eps);%相对误差,eps是matlab常数(机器精度)约为1e-16
%为什么分母要加上一个小常数?
yc=feval(f,c);
if(errbreak
end
a=b;%单点割线法时,将a用c替换,b不变
b=c;
end
iter=k;
%%-------------------------------------
【运行结果如下】:
双点割线法:
c=
1.12412302970431
err=
4.523648122756185e-010
iter=
6
yc=
-7.993605777301127e-015
单点割线法(令b为定值):
c=
1.12412302972061
err=
0.12412302972061
iter=
12
yc=
1.495257251349358e-010
单点割线法(令a为定值)
c=
1.12412302922453
err=
1.026502216561198e-009
iter=
17
yc=
-4.403701847621733e-009
【结果分析】:
1、这个实验中,双点割线法显然收敛速度明显快于单点割线法,可知双点割线法的收敛速度为,确实比单一的线性收敛快,并且迭代次数更少。
2、由结果可知,即使是同一种你算法,单点割线法的初值不同,同样会影响迭代次数,当分别以a和b为定值时,迭代次数则分别为17和12,
实验4绘制的隐函数的图像
【方法】众所周知,隐函数一般是不能用显式方式表示的,故确定隐函数的大致图像是非常重要的.
对于方程F(x,y)=0如果固定x就是一个关于y的非线性方程,我们可以通过求根的方法求出y
因此只要对x离散化x(k),k=1,2,...,再求得y(k),把点((x(k),y(k)))连起来
就能得到由方程F(x,y)=0所确定的隐函数y=f(x)的大致图像
【实验要求】
绘制由下面方程所确定的隐函数y=f(x)的图像
这里把[-5,5]用linspace命令100等分
第一次初值用y0=-4.6,以后用y(k)作为下一次求y(k+1)的迭代初值
【程序如下】:
%%隐函数作图
functionimplicit_function
globalp%定义全局变量
n=101;
x=linspace(-5,5,101);
y=zeros(1,n);%定义矩阵,初值是零,这是最常用的定义矩阵的方法
y0=-4.6;%第一次迭代初值
fork=1:
n
p=x(k);
y(k)=fzero(@fun,y0);
y0=y(k);
end
plot(x,y)%作图
title('隐函数')%加个标题
%%------------------------------
functionz=fun(y)%定义函数,这是最常用的定义函数的方式
globalp
x=p;
z=y^3/(2+0.1*sin(x*y))+x^2-4*x;
【运行结果如下】:
【结果分析】:
虽然隐函数的图像无法用显式方式表示的,但我们任然可以用离散的点来大致的描述出函数的图像,这有利于我们对隐函数的性质的进一步理解。
学习和掌握好隐函数的绘制和应用,有利于我们今后的学习。
实验5fsolve命令求解
【实验目的】
,通过作图观察根的近似值,再掌握用fsolve命令来求更精确的解
【实验内容】
由于每个方程都可以表示显式函数,故可以通过作图观察根的大致位置(两个曲线的交点)
解下列方程
在|x|<1,|y|<1内求解
【程序如下】:
clf%清图像
x=-1.5:
0.01:
1.5;%离散化,步长0.01,这也是常用的方法
y1=(3-x)/2;%第一个方程求函数值,注意所有运算都是'点'运算,和常数相乘等就不用写'点'了
y2=sqrt((5-x.^2)/2);%第二个方程求函数值,注意这里自变量与函数是颠倒的
plot(x,y1,y2,x)%作图,注意再把自变量与函数颠倒过来
gridon
axis([-2013])%限制横坐标与纵坐标的范围,这里要通过不断偿试来得到合适的范围
%通过作图发现在(0,-1)附近有一个根,调用fsolve求更精确的解
clc
X0=[-2,0];%初值
X=fsolve(@myfun,X0);fprintf('%.2f%.2f',X);
%------------定义函数组myfun----------------
functionF=myfun(X)
F=[sin(X
(1))/2-X
(2);
cos
(2)/2-X
(1)];
%[注]这里F必须是列向量;
%----------------------------------------------
functionstudy_fsolve
clf%清图像
x=-1:
0.01:
1;%离散化,步长0.01,这也是常用的方法
y1=sin(x)/2;%第一个方程求函数值,注意所有运算都是'点'运算,和常数相乘等就不用写'点'了
y2=cos(x)/2;%第二个方程求函数值,注意这里自变量与函数是颠倒的
plot(x,y1,y2,x)%作图,注意再把自变量与函数颠倒过来
gridon
axis([-11-11])%限制横坐标与纵坐标的范围,这里要通过不断偿试来得到合适的范围
%通过作图发现在(0,-1)附近有一个根,调用fsolve求更精确的解
clc
X0=[0.5,0.2];%初值
X=fsolve(@myfun,X0);fprintf('x=%.2fy=%.2f',X);
%------------定义函数组myfun----------------
functionM=myfun(X)
M=[sin(X
(1))/2-X
(2);
cos
(2)/2-X
(1)];
%[注]这里F必须是列向量;
%----------------------------------------------
【运行结果如下】:
方程的解:
x=-0.208073418273571y=-0.103287628825787
【结果分析】:
1、在函数方程组的求解过程中,我们可以先通过函数图象来大致确定一下根的大致范围,在利用fsolve函数在进行较为精确的求解,这样不仅可以有效的加快运算速度,还可以进一步的了解这个方程组的一些特点
2、从最后结果的图像上来看,我们可以清楚的确定解的范围,从而在利用fsolve函数来精确求解,比较方便。