实验7 无穷级数与非线性方程求解(MATLAB)

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

数学实验
第一步:编写函数组M文件 function F=f710(x) F=[2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))] 第二步:求解
x0=-5*ones(2,1); %置初始解向量 options = optimset(‘Display’,‘iter’);%设置显示输出中间反复(iteration)迭代结果 x=fsolve('f710',x0,options )
数学实验
注意1:该函数为多项式,实际的零点有3个,其余两个为 一对共轭复零点。由于fzero不能求复零点,因此任意的 初始估计将给出同样的结果。 注意2:fzero函数认为零点是函数穿过x轴的点,时于与 x轴相切的点,该函数将不能计算出来。
数学实验
例2) 求方程sinx=x2/2的两个根,准确到10-6,取不同 的初值计算,输出初值,根的近似值和迭代次数. 第一步:作图估计根的大体 位置令 f(x)= sinx-x2/2 2 >>x=-2:0.01:2; >>y1=sin(x); >>y2=x.^2/2; >>plot(x,y1,x,y2)
x
说明原方程的解无解析表达式,此时可用double计算其值
>> s=double(s) s= 0.2592 2.5426
数学实验
x 2 xy y 3 4) 解方程组 2 x 4x 3 0
>>syms x y >> [x,y]=solve('x^2+x*y+y=3','x^2-4*x+3=0') x= [ 1] [ 3] y= [ 1] [ -3/2] 所以方程组的解为(1,1),(3,-3/2).
数学实验
例2) 求无穷级数
1
1 1 1 ... ... 2 3 n 的收敛性.
>>syms n >> symsum(1/n,n,1,inf) %inf表示正无穷 ans = inf
例3) 求无穷级数
1 1 1 1 ... (1) n1 ... 2 3 n
的收敛性.
>> syms n >> symsum((-1)^(n-1),n,1,inf) ans = log(2)
数学实验
二. 非线性方程
1 基础理论 n n 1 把 an x an1 x ... a1 x a0 0 称为n次代数方程.
5次以上的方程就没有现成的求根公式了,但是总知道, n次方程有n个根,包括复根,当然重根要按重数计算根的 个数. 由其它数学问题归结得到的方程中还常常包含三角函数、 指数函数等超越函数如 sin x, e x , ln x ,称为超越方程, 它与n(≥2)次代数方程一起统称为非线性方程,记作
a
n 1

n
数学实验
例1) 求
1
1 1 1 ... 2 3 10
(1) 利用symsum处理 >>syms x >> symsum(1/x,1,10) ans = 7381/2520 >> 7381/2520 ans = 2.9290
(2) 编程建立M文件计算
s=0; %累加变量置初值 for i=1:10 s=s+1/i; end disp('1+1/2+1/3+...+1/10=') s >> 1+1/2+1/3+...+1/10= s= 2.9290
x
数学实验
2 代数方程求解 当f(x)为多项式时可用 r=roots(c) 输入多项式c(按降幂排列),输出r为f(x)=0的 全部根(包括复数根),该命令为数值计算 c=poly(r) 输入f(x)=0的全部根r,输出c为多项式的系数 (按降幂排列), 该命令为数值计算 solve(f,t) 对f中的符号变量t解方程f=0(t缺省时设定为 x或最接近x的字母), 该命令为符号计算
1
1 1 1 1 1 1 1 2.5 2.5 2.5
0.00169132 6.36e-007
Optimization terminated: first-order optimality is less than options.TolFun. x =0.5671 0.5671
数学实验
初值更改后调用情况
数学实验
实验7 无穷级数与非线性方程求解 (MATLAB)
数学实验
一. 无穷级数
1 基础理论 设 {a n } 是一数列,我们把形式记号 a1 a2 ... an ... 称为无穷级数,也记作 2 实验 在Matlab中,求级数和的命令为 symsum ,调用格式为: symsum(s,t,a,b) 表达式s中的符号变量t从a到b的级数和 (t缺省时设定为x或最接近x的字母)
数学实验
1) 解方程 cos2x+sinx=1 (在最小正周期内求解) 先将方程化为cos2x+sinx-1=0
>>syms x >> f=cos(2*x)+sin(x)-1; >> s=solve(f) s= [ 0] [ pi] [ 1/6*pi] [ 5/6*pi]
数学实验
例2) 解方程 5 x e 0 >> syms x >> f=5*x-exp(x); >> s=solve(f) s= [ -lambertw(-1/5)] [ -lambertw(-1,-1/5)]
3
6 9 12 15 18 21 24 27 30 33
47071.2
12003.4 3147.02 854.452 239.527 67.0412 16.7042 2.42788 0.032658 7.03149e-006 3.29525e-013
2.29e+004
5.75e+003 1.47e+003 388 107 30.8 9.05 2.26 0.206 0.00294
x0=3*ones(2,1); %另置初始解向量 options = optimset('Display','iter');%设置显示输出中间反复迭代结果 x=fsolve('f710',x0,options)
运行结果
Norm of First-order Trust-region Iteration Func-count f(x) step optimality 0 3 17.4075 3.1 1 6 9.60902 1 2.41 2 9 0.00880582 2.5 0.106 3 12 5.14156e-007 0.0589635 0.000795 4 15 1.76204e-015 0.000457497 4.65e-008
数学实验
Func evals x f(x) Procedure 1 2 -1 initial 2 1.94343 -1.54667 search 3 2.05657 -0.414934 search 4 1.92 -1.76211 search 5 2.08 -0.161088 search 6 1.88686 -2.05602 search 7 2.11314 0.209619 search Looking for a zero in the interval [1.8869, 2.1131] 8 2.0922 -0.0261891 interpolation 9 2.09453 -0.000272594 interpolation 10 2.09455 6.41518e-009 interpolation 11 2.09455 -4.67499e-005 interpolation z= 2.0946 第四种方法说明经过11次迭代得到一个近似根2.0946
f ( x) 0
求解超越方程不仅没有一般的公式,而且若只依据方程本 身,那么连有没有根、有几个根,也难以判断。
数学实验
利用Matlab的图形功能就能帮助我们判断方程有没有根, 并且确定根的近似位置。
8x5 12 x 4 26 x3 13 x 2 58 x 30 0
5x e 0
数学实验
(2) 符号计算 >> syms x >> f=8*x^5-12*x^4-26*x^3-13*x^2+58*x+30; >> s=solve(f) s= [ -1/2] [ 3/2] [ 5/2] [ -1+i] [ -1-i] 所以方程的根为:-1/2,3/2,5/2,-1+i,-1-i.
数学实验
例1) 解方程f(x)=x3-2x-5=0 >>z=fzero(‘x3-2*x-5’,2) % 第一种方法 z= 2.0946 >>z=fzero(‘x3-2*x-5’,[0 3]) %第二种方法 z= 2.0946 >>z=fzero(‘x3-2*x-5’,2,1e-6) % 第三种方法 z= 2.0946 >>z=fzero(‘x3-2*x-5’,2,1e-6,1) % 第四种方法
数学实验
5、Matlab中fsolve函数采用非线性最小二乘算法求解非 线性方程组,其调用格式为: x=fsolve(‘fun’,x0) x=fsolve(‘fun’,x0,options) [x,fval]=fsolve(‘fun’,x0,..) 说明:非线性方程的一般描述 f(x)=0,其中x为向量,f(x) 为一个函数向量。 x=fsolve(‘fun’,x0) 非线性方程fun求根,返回解向量x, 方程fun定义在M文件fun.m中,并置初始解向量为x0. 注意:初始值的设置很关键,关系到运行次数和最终结果
数学实验
Norm of
迭代次数 Iteration 函数赋值次数 Func-count f(x)
First-order Trust-region
步 step 1 1 1 1 1 1 1 0.759511 0.111927 最优的 optimality 半径范围 radius
函数值
0
1 2 3 4 5 6 7 8 9 10
数学实验
例2) 求以0.25,-1.5,2+2i,2-2i为根的代数方程 >> r=[0.25 -1 2+3i 2-3i]; >> c=poly(r) c= 1.0000 -3.2500 9.7500 10.7500 -3.2500
数学实验
3、 在Matlab中, solve采用符号解法求非线性方程(组), 调用格式为: solve(f,t) 对f中的符号变量t解方程f=0 (t缺省时设定为x或 最接近x的字母), 该命令为符号计算 solve(‘f=g’,t) 对符号变量t解方程f=g (t缺省时设定为x或 最接近x的字母), 该命令为符号计算
数学实验wk.baidu.com
4、Matlab中fzero采用数值解法求解非线性方程,其调用 格式为:
(1)z=fzero(‘fun’,x0) 对单变量函数fun求解,返回函数的解 z. fun为包含任意单变量函数的文件名字符串。 (2) z=fzero(‘fun’,x0) 设置解的搜索区域x0,其中x0为一 个长度为2的向量,而f(x(1))的符号和f(x(2))的符号不同, 调用时如果符号相同则报错。 (3) z=fzero(‘fun’,x0,tol) 设置解的精度,返回的函数值的 相对误差必须在变量tol给定的范围内。 (4) z=fzero(‘fun’,x0,tol,trace) 设置显示每次的迭代信息, 如果trace=0则不显示每次的迭代信息;否则就显示。
1.5 1 0.5 0 -0.5 -1 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2
从上图可知,方程的一个根大体在0附近,另一个根大体在1.5附近.
数学实验
第二步:求解 >>z1=fzero('sin(x)-x.^2/2',1.5) z1 = 1.4044 >> z2=fzero('sin(x)-x.^2/2',0.1) z2 = >>options =optimset('Display','iter'); >> z2=fzero('sin(x)-x.^2/2',0.1) 5.8892e-023 >> z2=fzero('sin(x)-x.^2/2',0) z2 = 0
数学实验
例1) 求代数方程 8x5 12 x 4 26 x3 13x 2 58 x 30 0 的根
(1) 数值计算 >> c=[8 -12 -26 -13 58 30]; %输入多项式c(按降幂排列) >> r=roots(c) %求多项式c的全部根(包括复数根) r= 2.5000 1.5000 -1.0000 + 1.0000i -1.0000 - 1.0000i -0.5000 所以方程的根为:2.5,1.5,-0.5,-1+i,-1-i
相关文档
最新文档