陕西科技大学matlab实验1 解非线性方程实验
MATLAB教学视频:非线性方程(组)在MATLAB中的求解方法
0.6
0.8
1 t
1.2
1.4
1.6
1.8
2
二元方程组的图解法
用图解法,求二元方程组的解,其中 x 和 y 的范围均为 [-5, 5]
2 − xy x =5 e 3 2 2 x+ y x cos x + y + y e = 10 ( )
2
将方程组移项,改写成 f(x, y) = 0 的形式
f(t)
0 -0.1 -0.2
对于非多项式方程,只能求出一个解
-0.3 -0.4 -0.5
0
0.2
0.4
0.6
0.8
1 t
1.2
1.4
1.6
1.8
2
solve 函数的局限性
求解一元非线性方程 (超越方程)
f ( x ) = sin ( x ) + cos ( x x ) − 10
对于稍许复杂的方程,求解结果出现很大误差
一元方程的图解法
一个有阻尼的振动系统,振动方程如下,求出 x (t) = 0.1 对应的时刻 t
x ( t ) = 0.8 e −6t sin ( 30t )
根据振动方程,有
x ( t ) = 0.8 e −6t sin ( 30t ) = 0.1
移项,可得
0.8 e −6t sin ( 30t ) − 0.1 = 0
初值 x0 分别设定为0, 0.1, 0.2, 0.3, 0.4, 0.5 等,求解方程 F 的根,并观察结果
非线性方程 (组) 数值解的一般求法
◼ 使用 fsolve 函数的第二种调用格式,求解方程 F 的根 [x,fval,exitflag] = fsolve(fun,x0,options) ◼ 使用 optimset 函数,设置 options
matlab实验一:非线性方程求解-牛顿法
matlab实验一:非线性方程求解-牛顿法实验一:非线性方程求解程序1:二分法:syms f x;f=input('请输入f(x)=');A=input(’请输入根的估计范围[a,b]=’);e=input('请输入根的误差限e=’);while (A(2)—A(1))>ec=(A(1)+A(2))/2;x=A(1);f1=eval(f);x=c;f2=eval(f);if (f1*f2)〉0A(1)=c;elseA(2)=c;endendc=(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-005c=1.404413a=1。
404411b=1.4044152.请输入f(x)=x^3—x-1请输入根的估计范围[a,b]=[1,1.5]请输入根的误差限e=0.5e-005c=1。
324717a=1。
324715b=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〈N)x=x0;if abs(eval(f))〈e1 fprintf(’奇异!\nx=%。
6f\n迭代次数为:%d\n’,x0,k)breakelsex1=x0—eval(f)/eval(df);if abs(x1-x0)<e2fprintf('x=%。
6f\n迭代次数为:%d\n’,x1,k)breakelsex0=x1;k=k+1;endendendif k〉=Nfprintf('失败\n')end用newton法计算方程:1.请输入f(x)=x*exp(x)—1请输入迭代初值x0=0。
matlab实验 非线性方程(组)求解
数学实验报告Matlab的简单应用——非线性方程(组)求解姓名班级学号学院2013年5月12日一、实验目的1.熟悉MATLAB软件中非线性方程(组)的求解命令及其用法。
2.掌握求非线性方程近似根的常用数值方法——迭代法。
3.了解分叉与混沌概念。
二、实验问题1.利用弦截法编程对方程x^5+x-1=0进行求解实验,并与二分法、牛顿切线法进行比较;2.方程f(x)=x^2+x-4=0在(0,4)内有唯一的实根,现构造以下三种迭代函数:(1)g1(x)=4-x^2,迭代初值x0=4;(2)g2(x)=4/(1+x),迭代初值x0=4;(3)g3(x)=x-(x^2+x-4)/(2x+1),迭代初值x0=4;分别用给出的3种迭代函数构造迭代数列x(k+1)=g1(x(k)),i=1,2,3,观察这些迭代数列是否收敛,若收敛能否收敛到方程f(x)=0的解。
除此之外,你还能构造出其他收敛的迭代吗?4.分别取不同的参数值r,做迭代数列x(n+1)=rx(n)(1-x(n)),n=0,1,2……,观察分叉与混沌现象。
步骤1:首先,分别取参数r为0,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7, 3.0,3.3,3.6,3.9等14个值,按迭代序列迭代150步,分别产生14个迭代序列{x(k)},k=0,1,…,150;其次,分别取这14个迭代序列的后50个迭代值(x100,x101,…,x150),画在以r为横坐标的同一坐标面rox上,每一个r取值对应的迭代值点为一列。
步骤2:对(1)中图进行观察分析,容易发现:(1)当r为0,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7时,每个r对应的50个迭代值凝聚在一点,这说明对这些r的取值所产生的迭代序列是收敛的。
(2)当r为3,3.3时,r对应的50个迭代值凝聚在两个点,这说明这些r值所对应的迭代序列不收敛,但凝聚在两个点附近;同时也说明当r在2.7和3之间取值时,对应的迭代序列从收敛到不收敛,轨道由一只分为两支开始出现分叉现象。
matlab程序设计实践-牛顿法解非线性方程
中南大学MATLAB程序设计实践学长有爱奉献,下载填上信息即可上交,没有下载券的自行百度。
所需m文件照本文档做即可,即新建(FILE)→脚本(NEW-Sscript)→复制本文档代码→运行(会跳出保存界面,文件名默认不要修改,保存)→结果。
第一题需要把数据文本文档和m文件放在一起。
全部测试无误,放心使用。
本文档针对做牛顿法求非线性函数题目的同学,当然第一题都一样,所有人都可以用。
←记得删掉这段话班级:学号:姓名:一、《MATLAB程序设计实践》Matlab基础表示多晶体材料织构的三维取向分布函数(f=f(φ1,φ,φ2))是一个非常复杂的函数,难以精确的用解析函数表达,通常采用离散空间函数值来表示取向分布函数,是三维取向分布函数的一个实例。
由于数据量非常大,不便于分析,需要借助图形来分析。
请你编写一个matlab程序画出如下的几种图形来分析其取向分布特征:(1)用Slice函数给出其整体分布特征;"~(2)用pcolor或contour函数分别给出(φ2=0, 5, 10, 15, 20, 25, 30, 35 … 90)切面上f分布情况(需要用到subplot函数);(3) 用plot函数给出沿α取向线(φ1=0~90,φ=45,φ2=0)的f分布情况。
(备注:数据格式说明解:(1)((2)将文件内的数据按照要求读取到矩阵f(phi1,phi,phi2)中,代码如下:fid=fopen('');for i=1:18tline=fgetl(fid);endphi1=1;phi=1;phi2=1;line=0; f=zeros(19,19,19);[while ~feof(fid)tline=fgetl(fid);data=str2num(tline);line=line+1;数据说明部分,与作图无关此方向表示f随着φ1从0,5,10,15,20 …到90的变化而变化此方向表示f随着φ从0,5,10,15, 20 …到90的变化而变化表示以下数据为φ2=0的数据,即f(φ1,φ,0)if mod(line,20)==1phi2=(data/5)+1;phi=1;else~for phi1=1:19f(phi1,phi,phi2)=data(phi1);endphi=phi+1;endendfclose(fid);。
MATLAB方程组求解实验报告
八、教师评语
签名:
日期: 年 月 日
成绩
14 -2 2
0 33 8
-2 7 38
3)
a=[2 1 1;1 3 1;1 1 4];
b=[12 -3 1;-1 30 7;-3 6 34];
>> a-b
ans =
-10 4 0
2 -27 -6
4 -5 -30
4)
a=[2 1 1;1 3 1;1 1 4];
b=[12 -3 1;-1 30 7;-3 6 34];
方程A*X=b变形成QRX=b则X=R\(Q\b)
命令[Q,R]=qr(A)
2求线性齐次方程组的通解
在Matlab中,函数null用来求解零空间,即满足A·X=0的解空间,实际上是求出解空间的一组基(基础解系)。
格式:z=null %z的列向量为方程组的正交规范基,满足
% z的列向量是方程AX=0的有理基
1)
a=[2 1 1;1 3 1;1 1 4];
b=[12 -3 1;-1 30 7;-3 6 34];
>> a*b
ans =
20 30 43
6 93 56
-1 51 144
2)
a=[2 1 1;1 3 1;1 1 4];
b=[12 -3 1;-1 30 7;-3 6 34];
>> a+b
ans =
-2.3529 12.5294 0.7059
-2.2353 0.3529 9.4706
用MATLAB解析实验数据与拟合非线性方程
用MATLAB解析实验数据与拟合非线性方程引言在科学研究和工程实践中,我们经常需要分析实验数据并拟合非线性方程模型。
然而,由于实验数据的复杂性和非线性方程的高维度,这项任务往往具有一定的挑战性。
幸运的是,利用MATLAB这样强大的计算工具,我们可以轻松地完成这个任务。
数据导入和预处理首先,我们需要将实验数据导入MATLAB中进行进一步的分析。
在MATLAB 中,我们可以使用多种方式来导入数据,例如使用readtable函数来读取Excel文件中的数据,或使用importdata函数来导入文本文件中的数据。
导入数据后,我们可以对数据进行一些预处理的操作,例如去除异常值、缺失值填充、数据平滑等。
MATLAB提供了众多的函数和工具箱,可以帮助我们轻松地完成这些操作。
数据可视化在分析实验数据之前,我们通常需要先对数据进行可视化,以便更好地理解数据的特征和趋势。
MATLAB提供了丰富的绘图函数,可以帮助我们绘制各种类型的图表,例如折线图、散点图、柱状图等。
通过绘制图表,我们可以观察到数据的变化趋势、异常情况和相关性等。
此外,MATLAB还提供了交互式的绘图工具,可以使我们更加灵活地调整图表的样式和布局。
数据分析和建模在数据可视化的基础上,我们可以进一步对实验数据进行分析。
MATLAB提供了丰富的统计分析函数和工具箱,可以帮助我们计算数据的各种统计指标,例如均值、方差、相关系数等。
另外,如果我们已经有了一定的理论基础,可以根据实验数据建立起合适的非线性方程模型。
MATLAB提供了优化工具箱,可以帮助我们拟合非线性方程模型,并估计模型参数。
通过拟合,我们可以得到模型的函数形式和参数值,进而对实验数据进行解析和预测。
非线性方程拟合非线性方程拟合是实验数据分析的关键步骤之一。
MATLAB提供了多种非线性方程拟合的方法和函数,例如最小二乘法、非线性最小二乘法、逐步回归等。
在进行非线性方程拟合时,我们需要选择合适的模型函数和初值,并设置适当的拟合算法和参数。
Matlab非线性方程数值解法
Matlab⾮线性⽅程数值解法实验⽬的⽤Matlab实现⾮线性⽅程的⼆分法、不动点迭代法实验要求1. 给出⼆分法算法和不动点迭代算法2. ⽤Matlab实现⼆分法3. ⽤Matlab实现不动点迭代法实验内容(1)在区间[0,1]上⽤⼆分法和不动点迭代法求的根到⼩数点后六位。
(2)⼆分法的基本思想:逐步⼆分区间[a,b],通过判断两端点函数值的符号,进⼀步缩⼩有限区间,将有根区间的长度缩⼩到充分⼩,从⽽,求得满⾜精度要求的根的近似值。
(3)不动点迭代法基本思想:已知⼀个近似根,构造⼀个递推关系(迭代格式),使⽤这个迭代格式反复校正根的近似值,计算出⽅程的⼀个根的近似值序列,使之逐步精确法,直到满⾜精度要求(该序列收敛于⽅程的根)。
实验步骤(1)⼆分法算法与MATLAB程序(⼆分法的依据是根的存在性定理,更深地说是介值定理)。
MATLAB程序,1 %⼆分法2 %输⼊:f(x)=0的f(x),[a,b]的a,b,精度ep3 %输出:近似根root,迭代次数k4 function [root,k]=bisect(fun,a,b,ep)5if nargin>36 elseif nargin<47 ep=1e-5;%默认精度8else9 error('输⼊参数不⾜');%输⼊参数必须包括f(x)和[a,b]10 end11if fun(a)*fun(b)>0%输⼊的区间要求12 root=[fun(a),fun(b)];13 k=0;14return;15 end16 k=1;17while abs(b-a)/2>ep%精度要求18 mid=(a+b)/2;%中点19if fun(a)*fun(mid)<020 b=mid;21 elseif fun(a)*fun(mid)>022 a=mid;23else24 a=mid;b=mid;25 end26 k=k+1;27 end28 root=(a+b)/2;29 end⼆分法1运⾏⽰例(并未对输出格式做控制,由于精度要求,事后有必要控制输出的精度):优化代码,减⼩迭代次数(在迭代前,先搜寻更适合的有根区间)1 %⼆分法改良2 %在⼀开始给定的区间中寻找更⼩的有根区间3 %输⼊:f(x)=0的f(x),[a,b]的a,b,精度ep4 %输出:近似根root,迭代次数k5 %得到的根是优化区间⾥的最⼤根6 function [root,k]=bisect3(fun,a,b,ep)7if nargin>38 elseif nargin<49 ep=1e-5;%默认精度10else11 error('输⼊参数不⾜');%输⼊参数必须包括f(x)和[a,b]12 end13 %定义划分区间的分数14 divQJ=1000;15 %等分区间16 tX=linspace(a,b,divQJ);17 %计算函数值18 tY=fun(tX);19 %找到函数值的正负变化的位置20 locM=find(tY<0);21 locP=find(tY>0);22 %定义新区间23if tY(1)<024 a=tX(locM(end));25 b=tX(locP(1));26else27 a=tX(locP(end));28 b=tX(locM(1));29 end30if fun(a)*fun(b)>0%输⼊的区间要求31 root=[fun(a),fun(b)];32 k=0;33return;34 end35 k=1;36while abs(b-a)/2>ep%精度要求37 mid=(a+b)/2;%中点38if fun(a)*fun(mid)<039 b=mid;40 elseif fun(a)*fun(mid)>041 a=mid;42else43 a=mid;b=mid;44 end45 k=k+1;46 end47 root=(a+b)/2;48 end⼆分法2运⾏⽰例(同样没有控制输出)明显地,迭代次数减⼩许多。
matlab解非线性方程
matlab解非线性方程MATLAB求解非线性方程一、Matlab求解非线性方程的原理1. 非线性方程是指当函数中的变量出现不同的次方数时,得出的方程就是非线性的。
求解非线性方程的准确性决定于得出的解集是否丰富,以及解的精度是否符合要求。
2. Matlab是一款多功能的软件,可以快速求解工程中的数学方程和模型,包括一元非线性方程。
Matlab 具有非线性解析计算能力,可以极大地提高求解效率。
二、Matlab求解非线性方程的方法1. 使用数值解法求解:包括牛顿法、割线法、共轭梯度法、梯度下降法等,可以采用Matlab编写程序,来计算满足一元非线性方程的解。
2. 使用符号解法求解:在Matlab中,可以直接使用solve函数来解决一元非线性方程。
3. Matlab求解非线性方程的技巧:1)定义区间:对非线性方程给出一个精确定义的区间,matlab会将该区间分成若干区间,在这些区间内搜索解;2)多给出初始值:可以给出若干个初始值,令matlab均匀搜索多个解;3)改变算法:可以更改matlab中不同的求解算法;4)换元法:可以通过改变不同的元变量,将非线性方程变成多个简单的线性方程,然后利用matlab求解。
三、Matlab求解非线性方程的特点1. 高效:Matlab求解的方式高效有效,性能优异,可以节省大量的求解时间。
2. 准确:Matlab采用符号解法时,解的准确度精度更高,可以满足大部分要求。
3. 节省资源:Matlab求解非线性方程节省计算机资源,可以很好地利用资源,提高工作效率。
四、 Matlab求解非线性方程的步骤1. 对结构表达式编写程序;2. 设定相应的条件;3. 优化程序;4. 运行程序;5. 分析结果;6. 测试代码;7. 验证学习结果。
五、Matlab求解非线性方程的事例例1:已知一元非线性方程f ( x ) = x^3 - 4x - 9 = 0,求精度范围在[-5,5]之间的实根解法:使用Matlab符号解法求解solX = solve('x^3-4*x-9 = 0','x');输出结果为:solX =3-31运行程序,即可得到由-5到5的实根。
MATLAB求解非线性方程
步骤如下:
(1)建立函数文件funx.m。
function fx=funx(x)
fx=x-10.^x#39;funx',0.5)
z =
0.3758
**非线性方程组的求解
对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为:
If FUN is parameterized, you can use anonymous functions to capture the
problem-dependent parameters. Suppose you want to solve the system of
nonlinear equations given in the function myfun, which is parameterized
X=fsolve('fun',X0,option)
其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。optimset(‘Display’,‘off’)将设定Display选项为‘off’。
-.283
-2.987
y =
1.834-3.301*i
1.834+3.301*i
-.3600
matlab非线性方程的解法(含牛拉解法)
非线性方程的解法(含牛拉解法)1引 言数学物理中的许多问题归结为解函数方程的问题,即,0)(=x f (1.1) 这里,)(x f 可以是代数多项式,也可以是超越函数。
若有数*x 为方程0)(=x f 的根,或称函数)(x f 的零点。
设函数)(x f 在],[b a 内连续,且0)()(<b f a f 。
根据连续函数的性质知道,方程0)(=x f 在区间],[b a 内至少有一个实根;我们又知道,方程0)(=x f 的根,除了极少简单方程的根可以用解析式表达外,一般方程的根很难用一个式子表达。
即使能表示成解析式的,往往也很复杂,不便计算。
所以,具体求根时,一般先寻求根的某一个初始近似值,然后再将初始近似值逐步加工成满足精度要求为止。
如何寻求根的初始值呢?简单述之,为了明确起见,不妨设)(x f 在区间],[b a 内有一个实的单根,且0)(,0)(><b f a f 。
我们从左端出点a x =0出发,按某一预定的步长h 一步一步地向右跨,每跨一步进行一次根的“搜索”,即检查每一步的起点k x 和1+k x (即,h x k +)的函数值是否同号。
若有:0)(*)(≤+h x f x f k k (1.2) 那么所求的根必在),(h x x k k +内,这时可取k x 或h x k +作为根的初始近似值。
这种方法通常称为“定步长搜索法”。
另外,还是图解法、近似方程法和解析法。
2 迭代法2.1 迭代法的一般概念迭代法是数值计算中一类典型方法,不仅用于方程求根,而且用于方程组求解,矩阵求特征值等方面。
迭代法的基本思想是一种逐次逼近的方法。
首先取一个精糙的近似值,然后用同一个递推公式,反复校正这个初值,直到满足预先给定的精度要求为止。
对于迭代法,一般需要讨论的基本问题是:迭代法的构造、迭代序列的收敛性天收敛速度以及误差估计。
这里,主要看看解方程迭代式的构造。
对方程(1.1),在区间],[b a 内,可改写成为:)(x x ϕ= (2.1) 取],[0b a x ∈,用递推公式:)(1k k x x ϕ=+, ,2,1,0=k (2.2) 可得到序列:∞==0210}{,,,,k k k x x x x x (2.3)当∞→k 时,序列∞=0}{k k x 有极限x ~,且)(x ϕ在x ~附近连续,则在式(2.2)两边极限,得, )~(~x x ϕ= 即,x ~为方程(2.1)的根。
MATLAB方程组求解实验报告
MATLAB方程组求解实验报告实验报告:MATLAB方程组求解一、引言在工程和科学领域的研究中,常常需要求解一系列的线性或非线性方程组。
MATLAB是一种强大的数学软件,可以用于解决方程组求解的问题。
本实验旨在通过实例介绍MATLAB求解方程组的方法和应用。
二、方程组的定义与求解方法方程组是一组包含多个未知数的方程的集合。
求解方程组即求解方程组中的未知数,使得方程组中的每个方程都成立。
对于线性方程组,可以使用矩阵表示。
例如:Ax=b其中A是一个已知的mxn的矩阵,x是待求解的向量,b是已知的向量。
MATLAB提供了多种求解线性方程组的方法,如高斯消元法、LU分解法和迭代法等。
对于非线性方程组,一般使用数值方法求解。
常见的数值方法有牛顿法、割线法和迭代法等。
MATLAB中的fzero函数可以用于求解非线性方程组。
三、MATLAB求解线性方程组的实例1.高斯消元法考虑以下线性方程组:3x+2y-z=12x-2y+4z=-2-x+0.5y-z=0可以通过高斯消元法求解该方程组。
在MATLAB中,可以使用linsolve函数进行求解。
2.LU分解法LU分解是一种常用的求解线性方程组的方法。
通过将系数矩阵分解为上三角矩阵U和下三角矩阵L的乘积来求解方程组。
在MATLAB中,可以使用lu函数进行LU分解。
四、MATLAB求解非线性方程组的实例1.牛顿法考虑以下非线性方程组:x^2+y^2=1(x-1)^2+y^2=1可以通过牛顿法求解该方程组。
在MATLAB中,可以使用fsolve函数进行求解。
2.迭代法考虑以下非线性方程组:x^2+y^2=2x+y=1可以通过迭代法求解该方程组。
在MATLAB中,设置初始值,并使用循环迭代的方法逐步逼近方程的解。
五、实验步骤和结果1.线性方程组求解构建线性方程组Ax = b,并使用linsolve函数进行求解。
2.非线性方程组求解构建非线性方程组,并使用fsolve函数进行求解。
Matlab实例源码教程:如何用MATLAB求解非线性微分方程
Matlab实例源码教程:如何用MATLAB求解非线性微分方程Matlab实例源码教程:如何用MATLAB求解非线性微分方程做一个最基本的假设:你们都看过高数。
一。
老湿发话了:童鞋们,求解一下这个方程,判断她是否稳定。
要是稳定,那么她是否存在极限环:一看明白了,这不就是传说中的范德普方程。
地球人都知道她稳定并有极限环。
现在我们就看看如何用MATLAB求解她的轨迹。
二。
一般的计算机求解方程的方法无外乎是这样:首先把该方程改写成一个规范的形式,一般使用状态空间表示法;而后调用已有的算法进行求解;最后对得出的结果进行处理,比如画图之类的。
接下来就对这三大步分别作出解释。
三。
输入待求解的方程。
首先我们知道,状态空间的标准形式(自由系统)是:这里X是列向量,F是作用于列向量的函数,可以是线性也可以是非线性。
范德普方程可以改写成这样的标准形式:MATLAB中关于输入输入待解方程的语句特别简单。
需要先定义一个普通函数,函数名任意,姑且叫做myFcn,格式如下 function xdot = myFcn (t, x) 需要注意的是,函数必须含有t, x两个参数,名称可以自己任意定。
xdot是这个函数本身的返回值,只出现在这个函数内部,因此也可以任意定。
定义中的x被视为是一个列向量,x(i)表示列向量中的第i个分量。
那么F函数的每一个分量即简单地用表达时给出即可。
其中的自变量可以引用x(i)。
以范德普方程为例:xdot = [x(2) ; u(1-x(1)^2)*x(2)-x(1)]于是,这两句话便构成了待解函数。
四。
调用MATLAB函数进行求解通常人工求解微分方程需要知道初始值,计算机求解也不例外。
另外,由于非线性方程一般只有数值解,故计算精度也可以调整。
这些都是可以自己调整的参数。
调用MATLAB计算求解常微分方程的模式很简单,格式为:[t, x] = ode45(@myFcn, [开始时间结束时间], [初始值列向量], options) 注意到求解出来的结果是[t, x]即一堆数,所以需要我们进行后处理比如画图之类的。
基于matlab的数值分析( 非线性方程求根)上机实验报告1
数值分析试验报告非线性方程求根二分法解方程1. 题目:用二分法求方程0133=--x x 的所有根 2. 方法:二分法 3. 程序function x=erfenfa(a,b)if (a*a*a-3*a-1)*(b*b*b-3*b-1)>0 disp('区间错误,请重新调试!'); break else x=(a+b)/2.0; k=0;while (k<=100&abs(x*x*x-3*x-1)>0.0001&b-a>0.0001) if (x*x*x-3*x-1)*(a*a*a-3*a-1)<0 b=x; else a=x; end x=(a+b)/2.0; k=k+1; k,x if k==100display('计算方法错误,请重新调试!'); end end enddisp(['k=',num2str(k)])4. 结果>> format compact >> erfenfa(1,2) k = 1 x = 1.000000 k = 2x = 1.000000 k = 3 x = 1.000000 k = 4x =1.000000k =5x =1.000000k =6x =1.000000k =7x =1.000000k =8x =1.500000k =9x =1.250000k =10x =1.125000k=10ans =1.125000 >> erfenfa(-1,1) k =1x =-0.000000k =2x =-0.000000k =3x =-0.000000k =4 x =-0.000000k =5x =-0.000000k =6x =-0.000000k =7x =-0.000000k =8x =-0.000000k =9x =-0.500000k =10x =-0.750000k =11x =-0.347k =12x =-0.937500k =13x =-0.906250k=13ans =-0.906250 >> erfenfa(-2,-1) k =1x = -1.000000 k = 2 x = -1.000000 k = 3 x = -1.000000 k = 4 x = -1.000000 k = 5 x = -1.000000 k = 6 x = -1.000000 k = 7 x = -1.535k = 8 x = -1.500000 k = 9 x = -1.250000 k = 10 x = -1.125000 k = 11 x = -1.187500 k = 12 x = -1.532 k=12 ans = -1.5325,拓展:在程序编写完成调试过程中发现如果给出错误区间程序仍能给出一个错误答案,于是找同学讨教,讨论得出了正确的方法不动点解方程1. 题目: 解方程02010423=-++x x x 的根2.方法:不动点迭代法3.程序function x=budongdian(x0)p=x0;for k=1:10x0=p;p=20/(x0*x0+4*x0+10);if abs(p-x0)<0.0001break;endkpif k==10disp('计算错误')endend4.结果>> format compact>> budongdian(1)k =1p =For personal use only in study and research; not for commercial use1.3333k =2p =1.1688k =3p =1.2468k =4p =1.2091k =5p =1.2271k =6p =1.2184 k = 7 p = 1.2226 k = 8 p = 1.2206 k = 9 p = 1.2216 k = 10 p = 1.2211 k = 11 p = 1.2213 k = 12 p = 1.2212 p =1.2213Newton 迭代法求方程的根1. 题目:求方程0105233=++x x 的根 2. 方法:newton 迭代法 3. 程序:function x=newton(a) p=a;for k=1:100 a=p;p=a-(3*a*a*a+5*a*a+10)/(9*a*a+10*a); if abs(p-a)<0.00001 break; endif k==100display('计算错误'); endkpendp4.结果>> format long>> newton(-2)k =1p =-2.000000k =2p =-2.094853k =3p =-2.142995p =-2.582976>>对于不同的函数只需将文中x*x*x-3*x-1你所需求解的函数就ok 了仅供个人用于学习、研究;不得用于商业用途。
matlab解ex方程
在MATLAB中解线性方程组或非线性方程(如一阶常微分方程或某些类型的一阶偏微分方程)通常可以使用内建的函数或库来完成。
这里是一些例子。
一、解线性方程组:
假设你有一个方程组Ax=b,其中A是系数矩阵,b是右侧的常数向量。
在MATLAB中,你可以使用`inv()`和`solve()`函数来求解这个方程组。
```matlab
% 定义系数矩阵A和右侧常数向量b
A = [1, 2; 3, 4];
b = [5; 6];
% 使用inv()和solve()函数求解
x = solve(A, b);
```
二、解非线性方程:
MATLAB也提供了内置函数来求解非线性方程。
例如,你可以使用`fzero()`函数来求解方程f(x)=0。
这个函数会使用一种名为"Secant"的迭代方法来寻找根。
```matlab
% 定义一个非线性函数,例如f(x) = x^2 - 4
f = @(x) x^2 - 4;
% 使用fzero()函数求解方程
x = fzero(f, [1, 1]); % 这将寻找一个可能的解,但是不一定是最优解
```
请注意,MATLAB中这些函数可能不适用于所有类型的方程。
在某些情况下,你可能需要使用其他方法或库,如数值积分或数值微分等。
如果你需要解决特定类型的方程,请提供更多详细信息,以便我可以提供更具体的帮助。
matlab非线性方程实验报告
一、课题名称非线性方程二、目的和意义1、通过实验进一步了解方程求根的算法;2、认识选择计算格式的重要性;3、掌握迭代算法和精度控制;4、明确迭代收敛性与初值选取的关系。
三、实验要求1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况;2、用事后误差估计来控制迭代次数,并且打印出迭代的次数;3、初始值的选取对迭代收敛有何影响;4、分析迭代收敛和发散的原因。
四、计算公式Newton法二、结构程序设计Newton迭代法Matlab程序function [c,err,count]=diedai(f,x0,delta,max)for k=1:maxx1=x0;x0=f(x0);if abs(x0-x1)<deltaendendc=x0;err=abs(x0-x1);count=k六、结果讨论和分析在命令窗口输入实参调用diedai函数文件进行计算>> f=inline('(3*x+1)/x.^2');>> x0=-2;>> delta=0.0005;>> max=30;>> [c,err]=diedai(f,x0,delta,max) err =5.5997e-005c =-1.5321err =5.5997e-005count =30>> f=inline('(x.^3-1)/3');>> x0=-1;>> delta=0.0005;>> max=30;>> [c,err]=diedai(f,x0,delta,max) err =c =-0.3473err =count =30>> f=inline('(3*x+1)^(1/3)'); >> x0=2;>> delta=0.0005;>> max=30;>> [c,err]=diedai(f,x0,delta,max) err =c =1.8794err =count =30>> f=inline('1/(x.^2-3)');>> x0=-2;>> delta=0.0005;>> max=30;>> [c,err]=diedai(f,x0,delta,max)err =c =-0.3473err =count =30>> f=inline('(3+1/x)^0.5');>> x0=-2;>> delta=0.0005;>> max=30;>> [c,err]=diedai(f,x0,delta,max)err =2.2204e-016c =1.8794err =2.2204e-016count =30>> f=inline('x-1/3*((x.^3-3*x-1)/(x.^2-1))'); >> x0=-2;>> delta=0.0005;>> max=30;>> [c,err]=diedai(f,x0,delta,max)err =c =-1.5321err =count =30X}收敛,才能求出方程的解。
陕西科技大学matlab实验1 解非线性方程实验
实验1 解非线性方程实验成绩实验类型:●验证性实验 ○综合性实验 ○设计性实验实验目的:进一步熟练掌握解非线性方程二分法算法、弦截法算法,提高编程能力和解算非线性方程问题的实践技能。
实验内容:用二分法算法、牛顿迭代法,弦截法算法解算非线性方程,,计算=0的根实验原理二分法算法牛顿迭代法弦截法算法实验步骤1 要求上机实验前先编写出程序代码2 编辑录入程序3 调试程序并记录调试过程中出现的问题及修改程序的过程4 经反复调试后,运行程序并验证程序运行是否正确。
5 记录运行时的输入和输出。
实验总结实验报告:根据实验情况和结果撰写并递交实验报告。
参考程序一.二分法算法1.建立二分法的函数文件bisect.mfunction [c,err,yc]=bisect(f,a,b,delta)%Iput - f is the function input as a string 'f'% -a and b are the left and right end points % -delta is the tolerance%Output -c is the zero point% -yc=f(c)% -err is the error estimate for cya=feval(f,a);yb=feval(f,b);if ya*yb > 0,return,endmax1=1+round((log(b-a)-log(delta))/log(2));for k=1:max1c=(a+b)/2;yc=feval(f,c);if yc==0a=c;b=c;elseif yb*yc>0b=c;yb=yc;elsea=c;ya=yc;endif b-a < delta,break,endendc=(a+b)/2;err=abs(b-a);yc=feval(f,c);2.建立f(x)=x^2-5的matlab函数文件fff.mfunction y=fff(x);y=x.^2-5;3.在命令窗口中准备调用bisect函数的实参>> a=2;>> b=3;>> delta=0.0001;4.在命令窗口中调用bisect函数>> [x,err,yx]=bisect('fff',a,b,delta)x =2.2361err =6.1035e-005yx =-6.4894e-005>> [x,err,yx]=bisect('fff',a,b,delta)x =-2.2361err =6.1035e-005yx =-6.4894e-005二.牛顿迭代法1.建立牛顿迭代法的函数文件newton.mfunction [p0,err,k,y]=newtow(f,df,p0,delta,epsilon,max1)%Input -f is the object function input as a string 'f'% -df is the derivative of f input as a string 'df'% -p0 is the initial approximation to a zero o f% -delta is the tolerance for the function values y% -max1 is the maximum number of iterations%Output -p0 is the Newton-Raphson approximation to the zero % -err is the error estimate for p0% -k is the number of iteration% -y is the function value f(p0)for k=1:max1p1=p0-feval(f,p0)/feval(df,p0);err=abs(p1-p0);relerr=2*err/(abs(p1)+delta);p0=p1;y=feval(f,p0);if (err<delta)|(relerr<delta)|(abs(y)<epsilon),break,end end3.在命令窗口中准备调用newton函数的实参>> p0=2;>> delta=0.0001;>> epsilon=0.00001;>> max1=1000max1 =1000>> p0=-2;4.在命令窗口中调用newton函数>> [x,err,k,y]=newton('fff','ff',p0,delta,epsilon,max1)x =2.2361err =4.3133e-005k =3y =1.8605e-009>> [x,err,k,y]=newton('fff','ff',p0,delta,epsilon,max1)x =-2.2361err =4.3133e-005k =3y =1.8605e-009三.弦截法算法1.建立弦截法算法的函数文件secant.mfunction [p1,err,k,y]=secant(f,p0,p1,delta,epsilon,max1) for k=1:max1p2=p1-feval(f,p1)*(p1-p0)/(feval(f,p1)-feval(f,p0)); err=abs(p2-p1);relerr=2*err/(abs(p2)+delta);p0=p1;p1=p2;y=feval(f,p1);if(err<delta)|(relerr<delta)|(abs(y)<epsilon),break,end end2.建立f(x)=x^2-5的matlab函数文件fff.mFunction y=fff(x)y=x.^2-5;3.在命令窗口中准备调用secant函数的实参>> p0=2;>> p1=2.2;>> delta=0.0001;>> epsilon=0.00001;>> max1=1000;>> p0=-2.5;>> p1=-2;4.在命令窗口中调用secant函数>> [x,err,k,y]=secant('fff',p0,p1,delta,epsilon,max1) x =2.2361err =1.6468e-005k =3y =-3.3385e-008>> [x,err,k,y]=secant('fff',p0,p1,delta,epsilon,max1) x =-2.2361err =1.1287e-004k =3y =-2.2882e-007。
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.掌握用 MATLAB 软件求解非线性方程和方程组的基本用法,并对结果作初步分析;2.练习用非线性方程和方程组建立实际问题的模型并进行求解。
二、实验内容题目1【问题描述】(Q1)小张夫妇以按揭方式贷款买了1套价值20万元的房子,首付了5万元,每月还款1000元,15年还清。
问贷款利率是多少?(Q2)某人欲贷款50 万元购房,他咨询了两家银行,第一家银行开出的条件是每月还4500元,15 年还清;第二家银行开出的条件是每年还45000 元,20 年还清。
从利率方面看,哪家银行较优惠(简单假设:年利率=月利率×12)?【分析与解】假设初始贷款金额为x0,贷款利率为p,每月还款金额为x,第i个月还完当月贷款后所欠银行的金额为x i,(i=1,2,3,......,n)。
由题意可知:x1=x0(1+p)−xx2=x0(1+p)2−x(1+p)−xx3=x0(1+p)3−x(1+p)2−x(1+p)−x……x n=x0(1+p)n−x(1+p)n−1−⋯−x(1+p)−x=x0(1+p)n−x (1+p)n−1p=0因而有:x0(1+p)n=x (1+p)n−1p (1)则可以根据上述方程描述的函数关系求解相应的变量。
(Q1)根据公式(1),可以得到以下方程:150p(1+p)180−(1+p)180+1=0设 f(p)=150p(1+p)180−(1+p)180+1,通过计算机程序绘制f(p)的图像以判断解p的大致区间,在Matlab中编程如下:for i = 1:25t = 0.0001*i;p(i) = t;f(i) = 150*t*(1+t).^180-(1+t).^180+1;end;plot(p,f),hold on,grid on;运行以上代码得到如下图像:f(p)~p关系曲线图通过观察上图可知p∈[0.002,0.0022]。
Solution1:对于p∈[0.002,0.0022],采用二分法求解,在Matlab 中编程如下:clear;clc;x0=150000;n=180;x=1000;p0=0.002;p1=0.0022;while (abs(p1-p0)>1e-8)f0=x0*(1+p0).^n+x*(1-(1+p0).^n)/p0;f1=x0*(1+p1).^n+x*(1-(1+p1).^n)/p1;p2=(p0+p1)/2;f2=x0*(1+p2).^n+x*(1-(1+p2).^n)/p2;if (f0*f2>0 && f1*f2<0)p0=p2;elsep1=p2;end;end;p0结果得到p0=0.00208116455078125=0.2081%.所以贷款利率是0.2081%。
基于MATLAB的《数值分析》之实验教程:非线性方程求解
实验3 非线性方程求解1、实验目的1)掌握常用的非线性方程的求解算法,包括不动点迭代、二分法、试值法、牛顿法和割线法;2)并通过数值算例理求根解算法的收敛速度和健壮性。
2、实验内容1)编程实现二分法、试值法、牛顿法和割线法的MATLAB 函数。
2)设2)(31--=x x x f .(1) 确定f (x )=0实根的有根区间;(2) 取合适的初始值或初始区间,用不动点迭代算法、二分法、试值法、牛顿法和割线法程序分别求出f (x )=0具有10位或以上有效数字的实根,用MATLAB 自带的fzero 函数求出的结果计算误差,用tic/toc 命令记录程序运行时间,对每一个求出的实根,填写下表:(3) 从上表中可得出什么结论?4、实验思考1)二分法收敛速度慢,但是适用条件简单容易判断;牛顿法收敛速度快但收敛条件不易判断。
能否设计一种混合算法,既保持计算过程的稳健性(不易失效),又能够在条件允许的情况下采用更高阶的计算格式。
2)MATLAB内置的求根函数fzero的算法逻辑是怎样的?5、实验习题1)结合二分法、试值法、牛顿法和割线法各自的特点,设计一种兼顾健壮性和收敛速度的混合算法,能够自适应地判断求根函数在给定的初值附近的形态,选择合适的方法进行求根。
2)一个实心球体浮在水面上,根据阿基米德原理,球体的浮力和球体排出水的重量相等。
令V s = (4/3)πr3为球的体积,Vω为球体局部浸入水中时排出水的体积。
在静态平衡的状态下,球的重量和水的浮力相等,ρgV s = ρw gV w或sV s = V w其中是ρ球体密度,g是重力加速度,ρw是水的密度,s = ρ/ρw是球体材料的比重,它决定球体沉入水面的深度。
如图,球体高度为h部分的体积为V h=(π/3)(3rh2-h3).假设球体半径为r=10cm, 密度为ρ=0.638,求球体浸入水中的质量为多少?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1 解非线性方程实验
成绩
实验类型:●验证性实验 ○综合性实验 ○设计性实验
实验目的:进一步熟练掌握解非线性方程二分法算
法、弦截法算法,提高编程能力和解算非线性方程问题的
实践技能。
实验内容:用二分法算法、牛顿迭代法,弦截法算法解算非线性方程,,计算=0的根
实验原理二分法算法
牛顿迭代法
弦截法算法
实验步骤
1 要求上机实验前先编写出程序代码
2 编辑录入程序
3 调试程序并记录调试过程中出现的问题及修改
程序的过程
4 经反复调试后,运行程序并验证程序运行是否
正确。
5 记录运行时的输入和输出。
实验总结
实验报告:根据实验情况和结果撰写并递交实验报告。
参考程序
一.二分法算法
1.建立二分法的函数文件bisect.m
function [c,err,yc]=bisect(f,a,b,delta)
%Iput - f is the function input as a string 'f'
% -a and b are the left and right end points % -delta is the tolerance
%Output -c is the zero point
% -yc=f(c)
% -err is the error estimate for c
ya=feval(f,a);
yb=feval(f,b);
if ya*yb > 0,return,end
max1=1+round((log(b-a)-log(delta))/log(2));
for k=1:max1
c=(a+b)/2;
yc=feval(f,c);
if yc==0
a=c;
b=c;
elseif yb*yc>0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
if b-a < delta,break,end
end
c=(a+b)/2;
err=abs(b-a);
yc=feval(f,c);
2.建立f(x)=x^2-5的matlab函数文件fff.m
function y=fff(x);
y=x.^2-5;
3.在命令窗口中准备调用bisect函数的实参
>> a=2;
>> b=3;
>> delta=0.0001;
4.在命令窗口中调用bisect函数
>> [x,err,yx]=bisect('fff',a,b,delta)
x =
2.2361
err =
6.1035e-005
yx =
-6.4894e-005
>> [x,err,yx]=bisect('fff',a,b,delta)
x =
-2.2361
err =
6.1035e-005
yx =
-6.4894e-005
二.牛顿迭代法
1.建立牛顿迭代法的函数文件newton.m
function [p0,err,k,y]=newtow(f,df,p0,delta,epsilon,max1)
%Input -f is the object function input as a string 'f'
% -df is the derivative of f input as a string 'df'
% -p0 is the initial approximation to a zero o f
% -delta is the tolerance for the function values y
% -max1 is the maximum number of iterations
%Output -p0 is the Newton-Raphson approximation to the zero % -err is the error estimate for p0
% -k is the number of iteration
% -y is the function value f(p0)
for k=1:max1
p1=p0-feval(f,p0)/feval(df,p0);
err=abs(p1-p0);
relerr=2*err/(abs(p1)+delta);
p0=p1;
y=feval(f,p0);
if (err<delta)|(relerr<delta)|(abs(y)<epsilon),break,end end
3.在命令窗口中准备调用newton函数的实参
>> p0=2;
>> delta=0.0001;
>> epsilon=0.00001;
>> max1=1000
max1 =
1000
>> p0=-2;
4.在命令窗口中调用newton函数
>> [x,err,k,y]=newton('fff','ff',p0,delta,epsilon,max1)
x =
2.2361
err =
4.3133e-005
k =
3
y =
1.8605e-009
>> [x,err,k,y]=newton('fff','ff',p0,delta,epsilon,max1)
x =
-2.2361
err =
4.3133e-005
k =
3
y =
1.8605e-009
三.弦截法算法
1.建立弦截法算法的函数文件secant.m
function [p1,err,k,y]=secant(f,p0,p1,delta,epsilon,max1) for k=1:max1
p2=p1-feval(f,p1)*(p1-p0)/(feval(f,p1)-feval(f,p0)); err=abs(p2-p1);
relerr=2*err/(abs(p2)+delta);
p0=p1;
p1=p2;
y=feval(f,p1);
if(err<delta)|(relerr<delta)|(abs(y)<epsilon),break,end end
2.建立f(x)=x^2-5的matlab函数文件fff.m
Function y=fff(x)
y=x.^2-5;
3.在命令窗口中准备调用secant函数的实参>> p0=2;
>> p1=2.2;
>> delta=0.0001;
>> epsilon=0.00001;
>> max1=1000;
>> p0=-2.5;
>> p1=-2;
4.在命令窗口中调用secant函数
>> [x,err,k,y]=secant('fff',p0,p1,delta,epsilon,max1) x =
2.2361
err =
1.6468e-005
k =
3
y =
-3.3385e-008
>> [x,err,k,y]=secant('fff',p0,p1,delta,epsilon,max1) x =
-2.2361
err =
1.1287e-004
k =
3
y =
-2.2882e-007。