弦截法的MATLAB实现

合集下载

matlab 二分法汇总

matlab 二分法汇总

二分法的matlab主程序function [k,x,wuca,yx]=erfen(a,b,abtol)a(1)=a; b(1)=b;ya=fun(a(1)); yb=fun(b(1)); %程序中调用的fun.m 为函数if ya* yb>0,disp('注意:ya*yb>0,请重新调整区间端点a和b.'), return endmax1=-1+ceil((log(b-a)- log(abtol))/ log(2)); % ceil是上取整for k=1: max1+1a;ya=fun(a); b;yb=fun(b); x=(a+b)/2;yx=fun(x); wuca=abs(b-a)/2; k=k-1;[k,a,b,x,wuca,ya,yb,yx]if yx==0a=x; b=x;elseif yb*yx>0b=x;yb=yx;elsea=x; ya=yx;endif b-a< abtol , return, endendk=max1; x; wuca; yx=fun(x);区间二分法:与对分查找法相同1 区间二分法求出的仅仅是方程的一个单根,如果方程有重根或者多个根时,在做区间二分法时就会出现分叉,这样方程有几个根,就会产生几个实数序列,每一个实数序列的极限便是方程的一个根2 通常用区间二分法为一些迭代法提供靠近x^*的初始选代值;3 区间二分法的缺点是不能求方程的复数根。

format longa=5;b=6;x1=a;x2=b;f1=4*cos(x1)+4*sin(x1)+0.5*x1-2; f2=4*cos(x2)+4*sin(x2)+0.5*x2-2;step=0.000001;ii=0;while abs(x1-x2)>stepii=ii+1;x3=(x1+x2)/2;f3=4*cos(x3)+4*sin(x3)+0.5*x3-2;if f3~=0if f1*f3<0x2=x3;elsex1=x3;endendendx3f=[4*cos(x3)+4*sin(x3)+0.5*x3] disp(['迭代次数:',num2str(ii),'次'])牛顿迭代法求解:在方程f(x)=0有实数根的情况下,若能够将方程等价地转化成x=g(x)的形式,然后取一个初始值x0代入x=g(x)的右端,算得x1=g(x0),再计算x2=g(x1),这样依次类推x(k+1)=g(x(k))可以得到一个序列xk,通常称g(x)为迭代函数,序列xk为由迭代函数产生得迭代序列,x0为迭代初始值。

MATLAB常用函数使用说明

MATLAB常用函数使用说明

MATLAB常用函数使用说明1. plot函数:用于绘制二维图形。

可以绘制直线、曲线、散点图等。

示例代码如下:```matlabx = 0:pi/100:2*pi;y = sin(x);plot(x,y)```2. subplot函数:用于在同一图中绘制多个子图。

可以按照网格状排列或自定义排列子图。

示例代码如下:```matlabsubplot(2,1,1);plot(x,y);title('Sin(x)');subplot(2,1,2);plot(x,cos(x));title('Cos(x)');```3. surf函数:用于绘制三维曲面图。

可以绘制正弦曲面、高斯曲面等。

示例代码如下:```matlabx=-2:0.1:2;y=-2:0.1:2;[X,Y] = meshgrid(x,y);Z=X.^2+Y.^2;surf(X,Y,Z);```4. imread函数:用于读取图像文件。

可以读取常见的图像格式,如JPEG、PNG等。

示例代码如下:```matlabimg = imread('image.jpg');imshow(img);```5. imwrite函数:用于写入图像文件。

可以将图像保存为指定格式的文件。

示例代码如下:```matlabimg = imread('image.jpg');imwrite(img,'output.png');6. fft函数:用于计算傅里叶变换。

可以用于信号频谱分析、滤波器设计等。

示例代码如下:```matlabx = sin(2*pi*10*t) + sin(2*pi*20*t);y = abs(fft(x));plot(y);```7. filter函数:用于滤波器设计与信号滤波。

可以设计低通、高通、带通滤波器等。

示例代码如下:```matlabb = fir1(31,0.5);y = filter(b,1,x);plot(y);```8. eig函数:用于计算矩阵的特征值和特征向量。

数值分析实验报告4

数值分析实验报告4

function f=gg(x) f=sqrt(2.5-(x^3)/4); end
则三种方法运行出的结果分别为: >> BDD(1.5) k= 20 ans = 1.365229578333959 >> WA(1.5) k= 6 ans = 1.365230351032824 >> ATJ(1.5) k= 4 ans = 1.365230013413594 (5)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现 matlab 自带函数求根 的程序代码如下:
>>format long BDD(1.5) k= 7 ans = 1.365230575673434
(2)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现加权加速求根的程序 代码如下:
function [y,n]=WA(a,eps) if nargin==1 eps=1e-16; end syms x L=subs(diff(sqrt(10/(4+x))),a); xl=gg(a,L); n=1; E=abs(xl-a); while (E>=eps)&(n<=10000) x=xl; xl=gg(x,L); n=n+1; E=abs(xl-x); end
在 command Windows 中输入命令:XJF(1.5),得出的结果为:
>> XJF(1.5) k= 5 ans = 1.365230020178121 (8)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现抛物线法求根的程序
代码如下:
function [y,n] = parabola(fx,a,b,c,eps) if(nargin == 4) eps=1e-6; syms x fa = subs(fx,a); fb = subs(fx,b); fc = subs(fx,c); fb_a = (fb-fa)/(b-a); fc_b = (fc-fb)/(c-b); fc_b_a = (fc_b - fb_a)/(c-a); w = fc_b + fc_b_a*(c-b); x0 = c - 2*fc/(w+(w^2 - 4*fc*fc_b_a)^.5); n=1; if(abs(x0-c) > eps && n <= 10000) a=b; b=c; c=x0; fa = subs(fx,a); fb = subs(fx,b); fc = subs(fx,c); fb_a = (fb-fa)/(b-a); fc_b = (fc-fb)/(c-b); fc_b_a = (fc_b - fb_a)/(c-a); w = fc_b + fc_b_a*(c-b); x0=c - 2*fc/(w+(w^2 - 4*fc*fc_b_a)^.5); n=n+1; end y=x0; n; end end

MATLAB常用函数的使用(解释加实例)

MATLAB常用函数的使用(解释加实例)

MATLAB常用函数的使用(解释加实例)1.常用数学函数:- `sqrt(x)`:求一个数的平方根。

例如,`sqrt(9)`的结果是3- `sin(x)`:计算角度x的正弦值。

例如,`sin(pi/2)`的结果是1- `cos(x)`:计算角度x的余弦值。

例如,`cos(pi/2)`的结果是0。

- `exp(x)`:计算e的x次方。

例如,`exp(1)`的结果是2.71832.数组操作函数:- `length(array)`:返回数组的长度。

例如,`length([1, 2, 3])`的结果是3- `sum(array)`:计算数组元素的和。

例如,`sum([1, 2, 3])`的结果是6- `max(array)`:找出数组中的最大值。

例如,`max([1, 2, 3])`的结果是3- `sort(array)`:对数组进行排序。

例如,`sort([3, 2, 1])`的结果是[1, 2, 3]。

3.矩阵操作函数:- `eye(n)`:生成一个n阶单位矩阵。

例如,`eye(3)`的结果是一个3x3的单位矩阵。

- `zeros(m, n)`:生成一个m行n列的全零矩阵。

例如,`zeros(2, 3)`的结果是一个2x3的全零矩阵。

- `ones(m, n)`:生成一个m行n列的全1矩阵。

例如,`ones(2, 3)`的结果是一个2x3的全1矩阵。

- `rand(m, n)`:生成一个m行n列的随机矩阵。

例如,`rand(2,3)`的结果是一个2x3的随机矩阵。

4.文件操作函数:- `load(filename)`:从文件中加载数据。

例如,`load('data.mat')`将从名为"data.mat"的文件中加载数据。

- `save(filename, data)`:将数据保存到文件中。

例如,`save('data.mat', x)`将变量x保存到名为"data.mat"的文件中。

MATLAB应用 求解非线性方程

MATLAB应用 求解非线性方程

第7章 求解非线性方程7.1 多项式运算在MATLAB 中的实现一、多项式的表达n 次多项式表达为:n a +⋯⋯++=x a x a x a p(x)1-n 1-n 1n 0,是n+1项之和 在MATLAB 中,n 次多项式可以用n 次多项式系数构成的长度为n+1的行向量表示[a0, a1,……an-1,an]二、多项式的加减运算 设有两个多项式na +⋯⋯++=x a x a x a p1(x)1-n 1-n 1n 0和m b +⋯⋯++=x b x b x b p2(x)1-m 1-m 1m 0。

它们的加减运算实际上就是它们的对应系数的加减运算。

当它们的次数相同时,可以直接对多项式的系数向量进行加减运算。

当它们的次数不同时,应该把次数低的多项式无高次项部分用0系数表示。

例2 计算()()1635223-+++-x x x xa=[1, -2, 5, 3]; b=[0, 0, 6, -1]; c=a+b例 3 设()6572532345++-+-=x x x x x x f ,()3532-+=x x x g ,求f(x)+g(x)f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; g1=[0, 0, 0, g];%为了和f 的次数找齐f+g1, f-g1三、多项式的乘法运算conv(p1,p2)例4 在上例中,求f(x)*g(x)f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; conv(f, g)四、多项式的除法运算[Q, r]=deconv(p1, p2)表示p1除以p2,给出商式Q(x),余式r(x)。

Q,和r 仍为多项式系数向量 例4 在上例中,求f(x)/g(x)f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; [Q, r]=deconv(f, g) 五、多项式的导函数p=polyder(P):求多项式P 的导函数 p=polyder(P,Q):求P ·Q 的导函数[p,q]=polyder(P,Q):求P/Q 的导函数,导函数的分子存入p ,分母存入q 。

计算方法-方程求根实验

计算方法-方程求根实验

实验四 方程求根实验一. 实验目的(1)深入理解方程求根的迭代法的设计思想,学会利用校正技术和松弛技术解决某些实际的非线性方程问题,比较这些方法解题的不同之处。

(2)熟悉Matlab 编程环境,利用Matlab 解决具体的方程求根问题。

二. 实验要求用Matlab 软件实现根的二分搜索、迭代法、Newton 法、快速弦截法和弦截法,并用实例在计算机上计算。

三. 实验内容1. 实验题目(1)早在1225年,古代人曾求解方程020102)(23=-++=x x x x f 并给出了高精度的实根368808107.1*=x ,试用Newton 法和弦截法进行验证,要求精度610-=ε,并绘制方程的图形。

答:A.Newton 法:a .编写文件Newton.m 、func4.m 内容如下所示:b.运行,如下所示A为矩阵,由上面可知,对于初值为5,运行7次即可得到所需的精度,验证结果为古人给出的解释正确的;c.作图,编写下面的文件photo1.m.然后运行即可:注意下面中的x矩阵即为刚才计算出来的x系列,k为迭代的次数:a.编写文件Chord.m内容如下所示:b.运行结果如下所示:由上表可知,在精度为10^-6时有7位有效数字,古人的结果还是正确的c.作图,在上面运行后,即运行newton法时写的photo1.m文件即可出现图像:可以看到图中两条曲线基本重合; (2)取5.00=x ,用迭代法求方程x e x -=的根,然后用Aitken 方法加速,要求精度为结果有4为有效数字。

答:a. 编写文件func7.m 和Aiken.m ,内容如下所示:b .运行:具有四位有效数字 (3)用快速弦截法求解方程01)(=-=x xe x f ,要求精度为610-=ε,取6.05.010==x x ,作为开始值,并绘制1)(-=x xe x f 的图形。

答:对照可知,书本后面的程序已经正确,运行即可:下面为快速弦截法的主程序文件:函数文件如下:运行如下:作图,编写下面的文件:运行该文件就可以y=x*exp(x)-1函数和插值函数的图:可以看到两条直线基本重合在一起了,扩大图片可以看到两条直线是不重合的:2. 设计思想要求针对上述题目,详细分析每种算法的设计思想。

迭代法解非线性方程

迭代法解非线性方程

则对一个任意接近 x*的初始值,迭代公式
xk1 ( xk )是 p阶收敛的,且有
lim
k
xk1 x * ( xk x*)p
( p)( x*)
p!
定理3可以利用泰勒展开式加以证明
二、弦截法
1. 弦截法的算法过程
(1)过两点(a,f (a)),(b,f (b))作一直线,它与x轴有一个交点,记为x1; (2)如果f (a)f (x1)<0,过两点(a,f (a)),(x1,f (x1 ))作一直线,它与x轴的交点 记为x2, 否则过两点(b,f (b)),(x1,f (x1 ))作一直线,它与x轴的交点记为x2; (3)如此下去,直到|xn-xn-1|< , 就可认为xn为 f (x)=0在区间[a,b]上的一 个根。
2. 弦截法的迭代公式
x1
a
ba f (b) f (a)
f (a),
xk
1
xk
1
a b
xk a f ( xk ) f (a)
xk b f ( xk ) f (b)
f (a), f (b),
f (a) f ( xk ) 0 f (a) f ( xk ) 0
3.弦截法的Matlab编程实现
function root=chord_cut(f,a,b,e)
%弦截法求函数f在区间[a,b]上的一个零点 %f函数名,a区间左端点,b区间右端点,e根的精度,root函数的零点
function [root,n]=chord_cut2(f,a,b,e)
%弦截法求函数f在区间[a,b]上的一个零点 %f函数名,a区间左端点,b区间右端点,e根的精度,root函数的零点,n迭代次数
2. 迭代法的收敛性

非线性方程数值解法及其应用

非线性方程数值解法及其应用

非线性方程数值解法及其应用摘要:数值计算方法主要研究如何运用计算机去获得数学问题的数值解的理论和算法。

本文主要介绍非线性方程的数值解法以及它在各个领域的应用。

是直接从方程出发,逐步缩小根的存在区间,或逐步将根的近似值精确化,直到满足问题对精度的要求。

我将从二分法、Steffensen加速收敛法、Newton迭代法、弦截法来分析非线性方程的解法及应用。

关键字:非线性方程;二分法;Steffensen加速收敛法;代数Newton法;弦截法一、前言随着科技技术的飞速发展,科学计算越来越显示出其重要性。

科学计算的应用之广已遍及各行各业,例如气象资料的分析图像,飞机、汽车及轮船的外形设计,高科技研究等都离不开科学计算。

因此经常需要求非线性方程 f(x) = O的根。

方程f(x) = O 的根叫做函数f(x)的零点。

由连续函数的特性知:若f(x)在闭区间[a,b]上连续,且f(a)·f(b)<O,则f(x) = O在开区间(a,b)内至少有一个实根。

这时称[a,b]为方程f(x) = O的根的存在区间。

本文主要是对在区间[1.2]的根的数值解法进行分析,介绍了非线性方程数值解法的四种方法,从而得到在实际问题中遇到非线性方程根的求解问题的解决方法。

二、非线性方程的数值解法1、二分法二分法的基本思想是将方程根的区间平分为两个小区间,把有根的小区间再平分为两个更小的区间,进一步考察根在哪个更小的区间内。

如此继续下去,直到求出满足精度要求的近似值。

设函数f(x)在区间[a,b]上连续,且f(a)·f(b)<O,则[a,b]是方程f(x)=O 的根的存在区间,设其内有一实根,记为。

取区间[a,b]的中点,并计算,则必有下列三种情况之一成立:(1)= O,就是方程的根;(2)f(a)·f()<O,方程的根位于区间[a,]之中,此时令,;(3)f()·f(b)<O,方程的根位于区间[,b]之中,此时令。

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