第7章 MATLAB解方程与函数极值
matlab计算函数极值,如何用MATLAB求函数的极值点和最大值
matlab计算函数极值,如何⽤MATLAB求函数的极值点和最⼤值两种⽅法:1、求导的⽅法:syms x y;>>y=x^3+x^2+1>>diff(y)ans =3*x^2 + 2*x>>solve(ans)ans=-2/3极值有两点。
同时也是最值;2、直接⽤最⼩值函数:求最⼤值,既求-y的最⼩值:>>f=@(x)(-x^3-x^2-1)f =@(x)(-x^3-x^2-1)>>x=fminunc(f,-3,3)%在-3;-3范围内找Warning: Gradient must be provided fortrust-region method; using line-search methodinstead. > In fminunc at354Optimization terminated: relative infinity-norm of gradient lessthan options.TolFun.x =-0.6667>> f(x)ans =-1.1481在规定范围内的最⼤值是1.1481由于函数的局限性,求出的极值可能是局部最⼩(⼤)值。
求全局最值要⽤遗传算法。
例⼦:syms xf=(200+5*x)*(0.65-x*0.01)-x*0.45;s=diff(f);%⼀阶导数s2=diff(f,2);%⼆阶导数h=double(solve(s));%⼀阶导数为零的点可能就是极值点,注意是可能,详情请见⾼数课本fori=1:length(h)ifsubs(s2,x,h(i))<0disp(['函数在' num2str(h(i))'处取得极⼤值,极⼤值为' num2str(subs(f,x,h(i)))])elseifsubs(s2,x,h(i))>0disp(['函数在' num2str(h(i))'处取得极⼩值,极⼩值为'num2str(subs(f,x,h(i)))])elsedisp(['函数在' num2str(h(i))'处⼆阶导数也为0,故在该点处函数可能有极⼤值、极⼩值或⽆极值'])%%%详情见⾼数课本endend。
第7章MATLAB解方程与函数极值
7 MATLAB 7.1 7.2 7.3
7.
4 7.1 7.1.1 1
Ax=b
“\” x=A\b 7-1
A=[2,1,-5,
1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]'';x=A\b2
LU QR Choles
ky Schur Hessenberg (1)LU LU
tol
tol=eps trace
10
trace=0 7-8 f(x)=x-10x+2=0 x0=0.5
(1)
funx.m functionfx=funx(x)fx=x-10.^x+2;(2)
fzero z=fzero(''funx'',0.5)z=0.37587.2.2
F(X)=0 fsolve fsolve X=f
R R''R=X X
[R,p]=chol(X)
X
p=0 R
p X R q=p-1
R''R=X(1:q,1:q) Cholesky Ax=b R‘Rx=b x=R\(R’\b) 7-
4 Cholesky 7-1
A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;
1,6,-1,-4];b=[13,-9,6,0]'';R=chol(A)???Errorusing==>cholMa
=epsx0=y;y=Gx0+f;n=n+1;end 7-6 Gauss-Serdel
0 10-6
gauseidel.m A=[10,-
1,0;-1,10,-2;0,-2,10];b=[9,7,6]'';[x,n]=gauseidel(A,b,[0பைடு நூலகம்0,0]'',1
MATLAB程序设计教程第7章MATLAB解方程与函数极值
7.3 常微分方程初值问题的数值解法 7.3.1 龙格-库塔法简介 7.3.2 龙格-库塔法的实现
基于龙格-库塔法,MATLAB提供了求常微分方程数值 解的函数,一般调用格式为:
[t,y]=ode23('fname',tspan,y0)
[t,y]=ode45('fname',tspan,y0) 其中fname是定义f(t,y)的函数文件名,该函数文件必须返回
x=fsolve('myfun',[0.5,0.5]',optimset('Display','off')) x=
0.6354 0.3734
将求得的解代回原方程,可以检验结果是否正确,命令如下: q=myfun(x) q=
1.0e-009 * 0.2375 0.2957 可见得到了较高精度的结果。
命令如下:
a=[1,2,-2;1,1,1;2,2,1]; b=[9;7;6]; [x,n]=jacobi(a,b,[0;0;0]) [x,n]=gauseidel(a,b,[0;0;0])
7.2 非线性方程数值求解 7.2.1 单变量非线性方程求解
在MATLAB中提供了一个fzero函数,可以用来求 单变量非线性方程的根。该函数的调用格式为:
和一个上三角矩阵的乘积形式。线性代数中已经证明,只 要方阵A是非奇异的,LU分解总是可以进行的。 MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格 式为: [L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角 阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须 是方阵。 [L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及 一个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须 是方阵。 实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或 x=U\(L\Pb),这样可以大大提高运算速度。
Matlab优化(求极值)
第七讲 Matlab 优化(求极值)理论介绍:算法介绍、软件求解.一.线性规划问题1.线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小值的问题,Matlab 中规定线性规划的标准形式为min s.t.T xc x Ax b Aeq x beqlb x ub ≤⎧⎪⋅=⎨⎪≤≤⎩其中c 和x 为n 维列向量,A 、Aeq 为适当维数的矩阵,b 、beq 为适当维数的列向量。
注意:线性规划问题化为Matlab 规定中的标准形式。
求解线性规划问题的Matlab 函数形式为linprog(c,A,b),它返回向量x 的值,它的具体调用形式为:[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,x0,OPTIONS)这里fval 返回目标函数的值,LB 、UB 分别是变量x 的下界和上界,x0是x 的初始值,OPTIONS 是控制参数。
例1 求解线性规划问题123123123123123max 23572510s.t.312,,0z x x x x x x x x x x x x x x x =+-++=⎧⎪-+≥⎪⎨++≤⎪⎪≥⎩ 程序:c=[2;3;5];>> A=[-2,5,-1;1,3,1];b=[-10;12];>> Aeq=[1,1,1];beq=[7];>> LB=[0;0;0];(zeros(3,1))>> [x,fval]=linprog(c,A,b,Aeq,beq,LB,[])练习与思考:求解线性规划问题12312312123min 23+428s.t.3+26,,0z x x x x x x x x x x x =+++≥⎧⎪≥⎨⎪≥⎩ 注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ].2.可以转化为线性规划的问题规划问题12min||+||++||s.t.,n x x x Ax b ≤ 其中1=[],T n x x x ,A b 为相应维数的矩阵和向量。
matlab函数求极值
xx=-pi/2:pi/200:pi/2; yxx=(xx+pi).*exp(abs(sin(xx+pi))); plot(xx,yxx) xlabel('x'),grid on % 可以用命令[xx,yy]=ginput(1) 从局部图上取出极值点及相应函数
13 12 11 10 9 8 7 6 5 4 3 -2
例3: 求s1= 1
1 dx ,s2= 2 1 x
1 1 dx,s3= dx x 2 2 x 3 x 2 2 x 3
syms x x符号变量 f1=1/(1+x^2); f2=1/(x^2+2*x+3); f3=1/(x^2+2*x-3); s1=int(f1,1,inf) 1到正无穷 s2=int(f2,-inf,inf) int符号积分 s3=int(f3,-inf,inf) s1 = 1/4*pi s2 = 1/2*pi*2^(1/2) s3 = NaN 不确定的结果
1
0.95
0.9
0.85
0.8
0.75
0.7
0.65
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
2、 多元函数的极值
函数命令:fminsearch 调用格式:[x,feval,exitflag,output]=fminsearch(fun,x0,optipons) % 求在x0附近的极值 例4:求 f ( x, y) 100( y x 2 ) 2 (1 x) 2 的极小值.
(2) 采用编程计算: function I=myquad1(a,b,n) x=linspace(a,b,n); %把ab区间平均分成n等份 y=exp(-x.^2)*(b-a)/n; %高×底=每个取边梯形的面积 I=sum(y); I1=myquad1(0,1,10000) I2=myquad1(0,1,100000) I1 = 0.74681784375801 I2 = 0.74682350396218
MATLAB求函数零点与极值
MATLAB求函数零点与极值
1. roots函数
针对多项式求零点(详见MATLAB多项式及多项式拟合)
2. fzero函数
返回⼀元函数在某个区间内的的零点.
x0 = fzero(@(x)x.^2-3*x-4,[1,5]);
只能求区间⾥⾯的⼀个零点,并且要求在给定区间端点函数值异号,所以使⽤之前应该先作图,得出单个零点分布的区间,然后使⽤该函数求零点.若有多个零点,则需多次使⽤该函数.
如需求上例中的全部零点,先作图
fplot(@(x)x.^2-3*x-4,[-10,10]);
得知两个零点的分布区间,然后两次使⽤fzero函数求对应区间的零点.
x1 = fzero(@(x)x.^2-3*x-4,[-2,0]);
x2 = fzero(@(x)x.^2-3*x-4,[2,6]);
3. solve函数
求⼀元函数(⽅程)的零点.
x0 = solve('x^2-3*x-4=0','x');
注意⽅程需包含’=0’部分,另外,不建议直接将⽅程写在函数solve的参数部分,可以⽤符号运算的⽅法.
4. fminbnd函数
求⼀元函数在某个区间内的最⼩值和对应的最⼩值点.
[x0,fmin]=fminbnd(@(x)x+1/(x+1),-0.5,2);
求极值与极值点之前须估计极值点的区间,保证在该区间没有使得函数值趋于⽆穷的点.。
Matlab求解方程和函数极值.docx
Mat lab求解方程和函数极值The fifth chapter, 22010-03-31 22:50Two. Matlab for solving equations and function extremumI. solving linear equations1. direct solutionThe direct solution to the use of the left division operatorFor linear equations Ax=b, we can use the left division operator to solve: X=A\bFor example, the following linear equations are solved by direct solution. The commands are as follows:A=[2, 1, -5, 1; 1; -5,0,7; 0,2, 1; -1; 1,6; -1; —4];B=[13, -9,6,0],;X=A\bSolving linear equations by the decomposition of matrixMatrix decomposition is the product of decomposing a matrix into several matrices according to certain principles・ Common matrix decomposition includes LU decomposition, QR decomposition, Cholesky decomposition, and Schur decomposition, Hessenberg decomposition, singular decomposition,and so on.(1)LU decompositionThe LU decomposition of a matrix means that a matrix is expressed as a product of a commutative lower triangular matrix and an upper triangular matrix・Linear algebra has proved that LU decomposition is always possible as long as the square A is nonsingular・\IATLAB provides the Lu function for LU decomposition of the matrix, the call format for:[L, U]二lu (X): produces an upper triangular array U and a transform form of lower triangular array L (row exchange) to satisfy X二LU. Note that the matrix X here must be square・[L, U, P]二lu (X): produces an upper triangular array U and a lower triangular matrix L, and a permutation matrix P, which satisfies PX=LU ・ Of course, the matrix X must also be square・After the LU decomposition, the solution of the linear equations Ax二b (L\b) or x二U\ (L\Pb), which can greatly improve the speed of operation x二U\・For example, LU is used to solve the linear equations in example 7-1. The commands are as follows:A二[2,1, -5, 1; 1; -5,0,7; 0,2, 1; T; 1,6; -1; -4];B二[13, -9, 6,0]';[L, U]二lu (A);X二U\ (L\b)Or using LU decomposition of the second formats, as follows:[L, U, P]二lu (A);X二U\ (L\P*b)(2)QR decompositionQR decomposition of the matrix X, is the decomposition of X into an orthogonal matrix Q and an upper triangular matrix R product form. QR decomposition can only be carried out by the opponent,s array. MATLAB function QR can be used for QR decomposition of the matrix, the call format for:[Q, R]=qr (X): produces an orthogonal matrix Q and an upper triangular matrix R so that it satisfies X二QR・[Q, R, E]=qr (X): produce an orthogonal matrix Q, an upper triangular matrix, R, and a permutation matrix E, so that it satisfies XE二QR.After the QR decomposition, the solution of the linear equation Ax二b is x二R\ (Q\b) or x二E (R\ (Q\b))・For example, QR is used to solve the linear equations in example 7-1.The commands are as follows:A二[2,1, -5, 1; 1; -5,0,7; 0,2, 1; T; 1,6; -1; -4];B二[13, -9, 6,0]';[Q, R]二qr (A);X二R\ (Q\b)Or using QR decomposition of the second formats, as follows:[Q, R, E] =qr (A):X二E* (R\ (Q\b))(3)Cholesky decompositionIf the matrix X is symmetric and positive definite, the Cholesky decomposition decomposes the matrix X into the product of a lower triangular matrix and upper triangular matrix・ Set the triangle matrix to R,Then the lower triangular matrix is transposed, that is, X二R' R・ The MATLAB function Choi (X) is used for Cholesky decompositionof the matrix X, and its call format is:R二chol (X): produces an upper triangular array R that makes R'R二X ・If the X is an asymmetric positive definite, an error message is output ・[R, p]二chol (X): this command format will not output error messages・ When X is symmetric positive definite, then p二0 and R are the same as those obtained in the above format: otherwise, P is a positive integer ・If X is a full rank matrix, then R is an upper triangular matrix of order q=p-l and satisfies R'R二X (l:q, l:q)・After the Cholesky decomposition, the linear equation group Ax二b becomes R 'Rx二b, so x二R\ (R, \b ')・Example 4 decomposes the system of linear equations in example 7-1 by Cholesky decomposition.The commands are as follows:A二[2,1, -5, 1; 1; -5, 0,7; 0,2, 1; T; 1,6; -1; -4];B 二[13, —9,6,0]';R二chol (A)Error using Chol =>???Matrix, must, be, positive, definiteWhen the command is executed, an error message appears indicating that the A is a non positive definite matrix・2. iteration methodIterative method is very suitable for solving large coefficient matrix equations・ In numerical analysis, the iterative methods mainly include Jacobi iterative method, Gauss-Serdel iterative method, over relaxationiterative method and two step iterative method・Jacobi iteration methodFor linear equations Ax二b, if A is a nonsingular square, that is, (i=l, 2,・・・(n), A can be decomposed into A 二D-L-U, where D is a diagonal matrix, and its elements are diagonal elements of A, L and U are lower triangular and upper triangular matrices of A, so Ax二b becomes・・:The corresponding iteration formula is:This is the Jacobi iteration formula・If the sequence converges to x, then x must be the solution of equation Ax二b・The MATLAB function file of the Jacobi iteration method Jacobi.m is as follows:Function, [y, n]二jacobi (A, B, xO, EPS)If nargin=3Eps=1.Oe-6;Elseif nargin〈3ErrorReturnEndD=diag (diag (A)) -% A diagonal matrixL=-tril (A, -1); the lower triangular array of% AU二-triu (A, 1); the upper triangular array of% AB二D\ (L+U);F二D\b;Y二B*xO+f:N二1;% iterationsWhile norm (y-xO) 〉=epsXO二y;Y二B*xO+f:N二n+1;EndExample 5 uses the Jacobi iterative method to solve the following linear equations・The initial value of iteration is 0, and the iteration accuracy is 10-6・Call the function file "Jacobi.nT in the command. The command is as follows:A二[10, -1,0; -1, 10; -2; 0; -2, 10];B二[9, 7,6]';[x, n]二jacobi (A, B, [0,0,0]', 1. Oe-6)Gauss-Serdel iteration methodIn the Jacobi iteration process, the calculations have been obtained and need not be reused, i.e., the original iterative formula Dx (k+1)二(L+U) x (k) +b can be improved to Dx (k+1) 二Lx (k+1) +Ux (k) +b and thus obtained:X (k+1)二(D-L) -lUx (k) + (D-L) TbThis formula is the Gauss-Serdel iterative formula・ Compared with the Jacobi iteration,The Gauss-Serdel iteration replaces the old components with new ones, with higher accuracy・The MATLAB function f订e of the Gauss-Serdel iteration method gauseidel.m is as follows:Function, [y, n]=gauseidel (A, B, xO, EPS)If nargin=3Eps二1. 0e-6;Elseif nargin<3ErrorReturnEndD=diag (diag (A)) -% A diagonal matrixL=-tril (A, -1); the lower triangular array of% AU=-triu (A, 1); the upper triangular array of% AG二(D-L) \U;F二(D-L) \b;Y二G*xO+f;N=l;% iterationsWhile norm (y-xO) >=epsXO二y;Y二G*xO+f:N二n+1;EndExample 6 uses the Gauss-Serdel iterative method to solve the followinglinear equations・The initial value of iteration is 0, and the iteration accuracy is 10-6・Call the function file z,gauseidel.m" in the command. The command is as follows:A二[10, -1,0; -1, 10; -2; 0; -2, 10];B二[9, 7,6]';[x, n]二gauseidel (A, B, [0,0,0]', 1.0e~6)Example 7, Jacobi iteration and Gauss-Serdel iteration method are used to solve the following linear equations, to see whether convergence・The commands are as follows:A二[1,2, -2; 1, 1, 1; 2, 2,11;B二[9; 7; 6];[x, n]=jacobi (a, B, [0; 0; 0])[x, n]=gauseidel (a, B, [0; 0; 0])Two. Numerical solution of nonlinear equations1 solving the single variable nonlinear equationIn MATLAB, a fzero function is provided that can be used to find the roots of a single variable nonlinear equation. The call format of this functionis: z二fzero ('fname', xO, tol, trace)Where fname is the root to be a function of the file name, xO as the search starting point・ A function may have more than one root, but the fzero function only gives the root nearest to the x0・ The relative accuracy of the TOL control results, by default, take tol二eps, trace, specify whether the iteration information is displayed in the operation, and when 1 is displayed, 0 is not displayed, and the trace=0 is taken by default・Example 8 ask for roots in the neighborhood.Steps are as follows:(1) establishment of function file funx・m.Function fx二funx (x)Fx二xTO. x+2;(2) fzero function call root.Z=fzero (' funx', 0. 5)二ZZero point three seven five eight2. solving nonlinear equationsFor nonlinear equations F (X) =0, the numerical solution is obtained by using the fsolve function. The call format of the fsolve function is:X二fsolve (' fun,, X0, option)Where X is the return of the solution, fun is used to define the demand for solutions of nonlinear equations function of the file name, X0 is the initial rooting process, option optimization toolbox options・ The Optimization Toolbox provides more than 20 options that users can display using the optimset command・If you want to change one of the options, you can call the optimset () function to complete it. For example, Display display option decision function calls intermediate results, in eluding 〃off〃does not show, 〃ITER〃said each show,'final5 shows only the final results・ Optimset ('Display', 'off') will set the Display option to 'off'.Example 9 find the numerical solution of the following nonlinear equations in (0.5,0.5) neighborhood・(1)establishment of function file myfun. m.Function q=myfun (P)X二p (1);Y二p (2);Q (1) =x-0・6*sin (x) -0.3*cos (Y);Q (2)二y-0・6*cos (x) +0. 3*sin (Y);(2)under the given initial value x0=0・5 and y0=0・5, call the fsolve function to find the root of the equation.X二fsolve C myfun,, [0.5,0. 5]', optimset ('Display'off'))二xZero point six three five fourZero point three seven three fourThe solution is returned to the original equation, and it can be checked whether the result is correct or not:Q二myfun (x)1.0e-009 *0. 2375, 0. 2957We can see the result of higher precision.Three・ Numerical solution of initial value problems for ordinary differential equations1. introduction of Runge Kutta method2., the realization of Runge Kutta methodBased on Runge Kutta method, MATLAB provides the function of finding numerical solutions of ordinary differential equations:[t, y]二ode23 C fname,, tspan, Y0)[t, y]二ode45 C fname,, tspan, Y0)Where fname is the function file name that defines f (T, y), and the function file must return a column vector・ The tspan form is [tO, tf], which represents the solution interva. 1. Y0 is the initial state column vector ・ The time vectors and corresponding state vectors are given by T and Y respectively.Example 10 has an initial value problem,Try to find the numerical solution and compare it with the exact solution (the exact solution is y (T)二).(1)establishment of function file funt. m.Function yp二funt (T, y)Yp= (y"2-t-2) /4/ (t+1);(2)solving differential equations・TOO; tf二10;¥0=2;[t, y]=ode23 ('funt', [tO, tf], Y0) ;% for numerical solutionYl=sqrt (t+1) +1;% refinement; exact solutionPlot (T, y, 'B・',t, Yl, ?)% are compared by graphThe numerical solution is represented by a blue dot, and the exact solution is expressed in red solid lines・ As shown. It can be seen that the two results approximate・ CloseFour. Function extremumMATLAB provides functions based on the simplex algorithm for solving extremal functions Fmin and fmins, which are used respectively for minimum values of univariate functions and multivariate functions:X二fmin (' fname,, xl, x2)X二fmins (' fname' , xO)The call formats of the two functions are similar・ Among them, the Fmin function is used to find the minimum point of a single variable function. Fname is the object function name that is minimized, and XI and X2 limit the range of arguments・ The fmins function is used to find the minimum point of a multivariable function, and xO is the initial value vector of the solution.MATLAB provides no special function to find the maximum function, but as long as the attention to -f (x) in the interval (a, b) is the minimum value of F (x) in (a, b) of the maximum value, so Fmin (F, xl, x2) f (x) function in the interval (xl the maximum value, X2)・Example 13 asks in [0,Minimum point in 5]・(1)establishment of function file mymin. m.Function fx二mymin (x)Fx=x.八3-2*x-5;(2)call the Fmin function to find the minimum point・Zero point eight one six fiveThree・Matlab numerical integration and differentiationI. numerical integration1.basic principles of numerical integrationNumerical methods for solving definite integration are various, such as simple trapezoidal method, Xin Pusheng (Simpson) method, Newton Cortes (Newton-Cotes) method, etc・,are often used・Their basic idea is to divide the whole integral interval [a and b] into n sub intervals [[, ], i=l, 2],・・・ N, in which,・ In this way, the problem of determining integral is decomposed into summation problem・2.realization method of numerical integrationVariable step symplectic methodBased on the variable step long Xin Pusheng method, MATLAB gives the quad function to find the definite integra 1. The call format of this function is:[I, n]二quad ('fname', a, B, tol, trace)Where fname is the product function name・A and B are the lower bound and upper bound of the definite integra 1. TOL is used to control the integration accuracy, and the tol=0.001 is taken by default・ Does the trace control show the integration process? If you take the non 0, it will show the integral process, take 0 instead of the default, and take the trace=0 bydefault・ Returns the parameter I, the fixed integral value, and the call number of n for the integrand・Finding definite integral(1)establish the integrand function file fesin.m.Function f二fesin (x)F二exp (一0.5*x)・ *sin (x+pi/6);(2)call the numerical integral function quad to find the definite integra1.[S, n]二quad ('fesin', 0, 3*pi)二SZero point nine Zero Zero eight二nSeventy-sevenThe Newton Cotes methodNewton Cotes method based on MATLAB, gives the quad8 function to find the definite integra 1. The call format of this functionis: [I, n]=quad8 C fname,, a, B, tol, trace)The meaning of the parameter is similar to that of the quad function, but only the default value of the tol. The function can more accurately calculate the value of the definite integral, and in general, the number of steps of the function call is less than the quad function, thus ensuring the higher efficiency to find the required integral value・Finding definite integral(1)the integrand function file fx. m・Function f二fx (x)F二x. *sin (x) / (1+cos (x)・*cos (x));(2)call the function quad8 to find the definite integral.I二quad8 (' fx' , 0, PI)二ITwo point four six seven fourExample 3 uses the quad function and the quad8 function respectively to find the approximate value of the integral, and compares the number of calls of the function under the same integral accuracy.Call the function quad to find the definite integral:Format long;Fx二inline ('exp (-x));[I, n]二quad ('FX', 1,2. 5, le-10)二IZero point two eight five seven nine four four four two fivefour seven six six二nSixty-fiveCall the function quad8 to find the definite integral:Format long;Fx二inline ('exp (-x));[I, n] =quad8 (FX, 1,2. 5, le-10)二IZero point two eight five seven nine four four four two fivefour seven five fourThirty-threeThe integrand is defined by a tableIn MATLAB, the problem of determining the function relations defined in tabular form is called trapz (X, Y) functions. The vector X, Y defines the function relation Y二f (X).Example 8-4 calculates definite integral with trapz function.The commands are as follows:X=l:0. 01:2.5:Y二exp (-X);% generated function relational data vectorTrapz (X, Y)二ansZero point two eight five seven nine six eight two four one six three nine threeNumerical solution of 3. double definite integralConsider the following double definite integral problem:By using the dblquad function provided by MATLAB, the numerical solution of the above double definite integral can be obtaineddirectly. The call format of this function is:I=dblquad (F, a, B, C, D, tol, trace)The function asks f (x, y) to double definite integral on the [a, b] * [c, d] regions・The parameter tol, trace is used exactly the same as function quad・Example 8~5 calculates the double definite integral(1)build a function file fxy.m:Function f二fxy (x, y)Global ki;Ki=ki+1:%ki is used to count the number of calls to the integrandF二exp (-x.八2/2). *sin (x. 2+y);(2)call the dblquad function to solve・Global ki; ki二0;I二dblquad (' fxy' , -2, 2, -1, 1)Ki1.57449318974494 (data format related)二kiOne thousand and thirty-eightTwo. Numerical differentiation1numerical difference and difference quotient2the realization of numerical differentiationIn MATLAB, there is no function that provides direct numerical derivatives・ Only the function diff, which calculates the forward difference, is called:DX二diff (X) : calculates the forward difference of vector X, DX (I), =X (i+1), -X (I), i二1,2,・・.N-l.DX二diff (X, n) : calculates the forward difference of the n order of X. For example, diff (X, 2)二diff (diff (X)).DX二diff (A, N, dim): calculates the n order difference of the matrix A, the dim=l (default state), calculates the difference by column, and dim=2 calculates the difference by line・6 cases of Vandermonde matrix generation based on vectorV= [ 1, 2, 3, 4, 5, 6], according to the column difference operation. The commands are as follows:V=vander (1:6)DV二diff (V)% calculates the first order difference of V 二V111111321684212438127931102425664164131256251252551777612962163661二DV31157310211 65 19 5 1 0781 175 37 7 1 02101 369 61 9 1 04651 671 91 11 1 0用不同的方法求函数f(X)的数值导数,并在同一个坐标系中做出f (X)的图像。
MATLAB解方程与函数极值(IV)
使用Matlab的`syms`和`solve`函数求解符 号方程,例如:x^2-2=0。
函数极值实例
一元函数极值
使用Matlab的`fminbnd`函数求解一元函数的极小值,例如 :f(x)=x^2。
多元函数极值
使用Matlab的`fminsearch`函数求解多元函数的极小值,例 如:f(x,y)=(x-1)^2+(y-2)^2。
变量与数据类型
在MATLAB中,变量名必须以字母开头,可以 包含字母、数字和下划线。
01
数值型变量可以是标量、向量或矩阵,可 以进行各种数值运算。
03
02
MATLAB支持多种数据类型,包括数值型、 字符型、逻辑型和结构体等。
04
字符型变量用于存储文本数据,可以进行 字符串操作。
逻辑型变量用于存储布尔值,可以进行逻 辑运算。
MATLAB具有高效的数值计算能力,支持多种编程语言和操作系统。
Matlab编程基础
01
MATLAB是一种解释型语言,语法相对简单, 易于学习。
03
MATLAB提供了丰富的函数库,可以方便地实现各 种算法和数据处理。
02
MATLAB支持向量和矩阵运算,可以进行高效 的数值计算。
04
MATLAB的编程风格简洁明了,易于阅读和维护。
积分方程求解
数值积分
使用Matlab的数值积分函数,如 `quad`、`quadl`等,对函数进行积 分。这些函数返回积分的近似值。
符号积分
使用Matlab的符号计算工具箱进行符号 积分。例如,`syms x`和`int(f, x)`,其 中`f`是函数句柄,表示对函数进行积分。
03 函数极值
单变量函数极值
MATLAB解方程与函数极值
1.解方程1.1 线性方程组求解(1) 左除运算符的直接解法x=A\b(2) 迭代解法迭代解法非常适合求解大型系数矩阵的方程组。
迭代解法主要包括 Jacobi 迭代法、Gauss-Serdel迭代法、两步迭代法。
①Jacobi迭代法对于线性方程组Ax=b,如果A为非奇异方阵,即aii≠0(i=1,2,…,n),则可将A分解为A=D-L-U,其中D为对角阵,其元素为A的对角元素,L与U为A的下三角阵和上三角阵,于是Ax=b化为:x=D-1(L+U)x+D-1b与之对应的迭代公式为:x(k+1)=D-1(L+U)x(k)+D-1b 这就是Jacobi迭代公式。
A=[10,-1,5;-1,10,-2;6,-4,50];b=[53 6]';[y,n]=jacobi(A,b,[0. 0. 0.]',1.0e-6)A\by =0.49150.36720.0904n =13ans =0.49150.36720.0904②Gauss-Serdel迭代法在Jacobi迭代过程中,计算时,已经得到,不必再用,即原来的迭代公式D x(k+1)=(L+U) x(k)+b可以改进为D x(k+1)=L x(k+1)+U x(k)+b,于是得到:x(k+1)=(D-L)-1Ux(k)+(D-L)-1b[y,n]=gauseidel(A,b,[0. 0. 0.]',1.0e-6)y =0.49150.36720.0904n =61.2 非线性方程数值求解①单变量非线性方程求解fzero函数可以用来求单变量非线性方程的根。
该函数的调用格式为:z=fzero(fname,x0,tol,trace)fname是待求根的函数文件名,x0为搜索的起点。
一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。
tol控制结果的相对精度,缺省时取tol=eps,trace•指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。
第7章 MATLAB解方程与函数极值.ppt.Convertor
线性方程组求解非线性方程数值求解常微分方程初值问题地数值解法函数极值线性方程组求解直接解法.利用左除运算符地直接解法对于线性方程组,可以利用左除运算符“\”求解:\例用直接解法求解下列线性方程组.命令如下:[];[]';\.利用矩阵地分解求解线性方程组矩阵分解是指根据一定地原理用某种算法将一个矩阵分解成若干个矩阵地乘积.常见地矩阵分解有分解、分解、分解,以及分解、分解、奇异分解等.文档来自于网络搜索() 分解矩阵地分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵地乘积形式.线性代数中已经证明,只要方阵是非奇异地,分解总是可以进行地.文档来自于网络搜索提供地函数用于对矩阵进行分解,其调用格式为:[]():产生一个上三角阵和一个变换形式地下三角阵(行交换),使之满足.注意,这里地矩阵必须是方阵.文档来自于网络搜索[]():产生一个上三角阵和一个下三角阵以及一个置换矩阵,使之满足.当然矩阵同样必须是方阵.文档来自于网络搜索实现分解后,线性方程组地解\(\)或\(\),这样可以大大提高运算速度.文档来自于网络搜索例用分解求解例中地线性方程组.命令如下:[];[]';[]();\(\)或采用分解地第种格式,命令如下:[ ]();\(\*)() 分解对矩阵进行分解,就是把分解为一个正交矩阵和一个上三角矩阵地乘积形式.分解只能对方阵进行.地函数可用于对矩阵进行分解,其调用格式为:文档来自于网络搜索[]():产生一个一个正交矩阵和一个上三角矩阵,使之满足.[]():产生一个一个正交矩阵、一个上三角矩阵以及一个置换矩阵,使之满足.文档来自于网络搜索实现分解后,线性方程组地解\(\)或(\(\)).例用分解求解例中地线性方程组.命令如下:[];[]';[]();\(\)或采用分解地第种格式,命令如下:[]();*(\(\))() 分解如果矩阵是对称正定地,则分解将矩阵分解成一个下三角矩阵和上三角矩阵地乘积.设上三角矩阵为,则下三角矩阵为其转置,即'.函数()用于对矩阵进行分解,其调用格式为:文档来自于网络搜索():产生一个上三角阵,使'.若为非对称正定,则输出一个出错信息.[]():这个命令格式将不输出出错信息.当为对称正定地,则,与上述格式得到地结果相同;否则为一个正整数.如果为满秩矩阵,则为一个阶数为地上三角阵,且满足'().文档来自于网络搜索实现分解后,线性方程组变成‘,所以\(’\).例用分解求解例中地线性方程组.命令如下:[];[]';()??? >命令执行时,出现错误信息,说明为非正定矩阵.迭代解法迭代解法非常适合求解大型系数矩阵地方程组.在数值分析中,迭代解法主要包括迭代法、迭代法、超松弛迭代法和两步迭代法.文档来自于网络搜索.迭代法对于线性方程组,如果为非奇异方阵,即≠(,…),则可将分解为,其中为对角阵,其元素为地对角元素,与为地下三角阵和上三角阵,于是化为:文档来自于网络搜索()与之对应地迭代公式为:()()()这就是迭代公式.如果序列{()}收敛于,则必是方程地解.迭代法地函数文件如下:[]();<(()); 求地对角矩阵(); 求地下三角阵(); 求地上三角阵\();\;*;; 迭代次数()>;*;;例用迭代法求解下列线性方程组.设迭代初值为,迭代精度为.在命令中调用函数文件,命令如下:[];[]';[](,[]').迭代法在迭代过程中,计算时,已经得到,不必再用,即原来地迭代公式()()()可以改进为()()(),于是得到:文档来自于网络搜索()()()()该式即为迭代公式.和迭代相比,迭代用新分量代替旧分量,精度会高些.文档来自于网络搜索迭代法地函数文件如下:[]();<(()); 求地对角矩阵(); 求地下三角阵(); 求地上三角阵()\;()\;*;; 迭代次数()>;*;;例用迭代法求解下列线性方程组.设迭代初值为,迭代精度为.在命令中调用函数文件,命令如下:[];[]';[](,[]')例分别用迭代和迭代法求解下列线性方程组,看是否收敛.命令如下:[];[];[](,[])[](,[])非线性方程数值求解单变量非线性方程求解在中提供了一个函数,可以用来求单变量非线性方程地根.该函数地调用格式为:('')其中是待求根地函数文件名,为搜索地起点.一个函数可能有多个根,但函数只给出离最近地那个根.控制结果地相对精度,缺省时取,•指定迭代信息是否在运算中显示,为时显示,为时不显示,缺省时取.文档来自于网络搜索例求()在附近地根.步骤如下:() 建立函数文件.().^;() 调用函数求根.('')非线性方程组地求解对于非线性方程组(),用函数求其数值解.函数地调用格式为:('')其中为返回地解,是用于定义需求解地非线性方程组地函数文件名,是求根过程地初值,为最优化工具箱地选项设定.最优化工具箱提供了多个选项,用户可以使用命令将它们显示出来.如果想改变其中某个选项,则可以调用()函数来完成.例如,选项决定函数调用时中间结果地显示方式,其中‘’为不显示,‘’表示每步都显示,‘’只显示最终结果.(‘’,‘’)将设定选项为‘’.文档来自于网络搜索例求下列非线性方程组在() 附近地数值解.() 建立函数文件.()();();()*()*();()*()*();() 在给定地初值下,调用函数求方程地根.('',[]'('',''))文档来自于网络搜索将求得地解代回原方程,可以检验结果是否正确,命令如下:*可见得到了较高精度地结果.常微分方程初值问题地数值解法龙格-库塔法简介龙格-库塔法地实现基于龙格-库塔法,提供了求常微分方程数值解地函数,一般调用格式为:[]('')[]('')其中是定义()地函数文件名,该函数文件必须返回一个列向量.形式为[],表示求解区间.是初始状态列向量.和分别给出时间向量和相应地状态向量.文档来自于网络搜索例设有初值问题,试求其数值解,并与精确解相比较(精确解为()).() 建立函数文件.()(^)();() 求解微分方程.;;[]('',[]); 求数值解(); 求精确解'''为数值解,为精确值,显然两者近似.例求解著名地方程.例有模型地状态方程,试绘制系统相平面图.函数极值提供了基于单纯形算法求解函数极值地函数和,•它们分别用于单变量函数和多变量函数地最小值,其调用格式为:文档来自于网络搜索('')('')这两个函数地调用格式相似.其中函数用于求单变量函数地最小值点.是被最小化地目标函数名,和限定自变量地取值范围.函数用于求多变量函数地最小值点,是求解地初始值向量.文档来自于网络搜索没有专门提供求函数最大值地函数,但只要注意到()在区间()上地最小值就是()在()地最大值,所以()返回函数()在区间()上地最大值.文档来自于网络搜索例求()在[]内地最小值点.() 建立函数文件.().^*;() 调用函数求最小值点.('')。
MATLAB编程与工程应用——第7章 MATLAB解方程与函数极值
MATLAB解方程与函数极值
7.1 线性方程组求解
二、迭代解法
迭代解法非常适合求解大型系数矩阵的方程组。在数值 分析中,迭代解法主要包括 Jacobi迭代法、GaussSerdel迭代法、超松弛迭代法和两步迭代法。 Jacobi迭代法 1.Jacobi迭代法 对于线性方程组Ax=b,如果A为非奇异方阵,即aii≠0, 则A可分解为A=D-L-U,其中D为对角阵,其元素为A的对 角元素,L与U为A的下三角阵和上三角阵,于是Ax=b化为: x=D-1(L+U)x+D-1b 与之对应的迭代公式为: x(k+1)=D-1(L+U)x(k)+D-1b 利用jacobi jacobi迭代法求方程的解 例7.4 利用jacobi迭代法求方程的解 exp7_4.m jacobi.m
如s=2时
j =1 j =1
i 1
i 1
1 ym +1 = ym + h[ f ( xm , ym ) + f ( xm + h, ym + h)] 2
matlab 极值点
matlab 极值点Matlab极值点文档Matlab是一种非常著名的数学软件,它广泛应用于各个领域,如数学、工程、计算机科学等。
在Matlab中找到函数的极值点是非常重要的,因为它在很多情况下可以提供有价值的信息。
本文将详细介绍Matlab中如何找到极值点。
1. 函数图像在Matlab中,首先要绘制函数的图像。
通过绘制函数的图像,我们可以直观地看到函数的最大值和最小值。
绘制函数图像的函数是“plot”。
例如,要绘制函数y=sin(x)的图像,可以使用以下代码:x = linspace(0, 2*pi, 100); y = sin(x); plot(x, y);上述代码中,“linspace”是用于生成一个等间隔的向量,用于x轴的值;sin函数用于计算每个x值的y值;然后使用“plot”函数绘制函数的图像。
2. 寻找极值在Matlab中,有几个函数用于寻找函数的极值:a) “max”和“min”函数“max”和“min”函数可以用来计算向量或矩阵的最大值和最小值。
例如,要计算函数y=sin(x)在区间[0,2π]中的最大值和最小值,可以使用以下代码:x = linspace(0, 2*pi, 100); y = sin(x); max_y = max(y); min_y = min(y);上述代码中,“max”和“min”函数分别计算y向量的最大值和最小值。
b) “fminbnd”函数“fminbnd”函数用于寻找单变量函数的全局最小值。
例如,对于函数y=x^2,要求在区间[0, 1]中的全局最小值,可以使用以下代码:f = @(x)x^2; [xmin, fmin] = fminbnd(f, 0, 1);上述代码中,定义了匿名函数“f”,然后使用“fminbnd”函数计算函数在[0,1]中的全局最小值。
它返回xmin和fmin,xmin是函数达到最小值时的x值,fmin是函数的最小值。
c) “fminsearch”函数“fminsearch”函数用于寻找多变量函数的全局最小值。
《MATLAB程序设计教程》第7章_MATLAB解方程与函数极值
《MATLAB程序设计教程》第7章_MATLAB解方程与函数极值《MATLAB程序设计教程》第7章主要介绍了MATLAB解方程和寻找函数极值的方法和技巧。
本章包括方程求解的基本原理和方法、使用MATLAB求解方程的一般步骤、常见方程求解函数的使用、函数极值的概念和求解方法等内容。
第一节介绍了方程求解的基本原理和方法。
方程是指等式中含有未知数的数学表达式,求解方程就是找到满足该方程的未知数的值。
主要介绍了一元方程和多元方程的求解方法,包括代数法、图形法、逼近法和迭代法等。
其中,迭代法是指通过不断逼近解的方法,使得方程两边的差异越来越小,最终得到近似解。
第二节介绍了使用MATLAB求解方程的一般步骤。
通过引用MATLAB中的方程求解函数,可以快速、准确地求解各种方程。
主要包括定义方程、选择合适的求解函数、输入参数、调用函数求解方程、查看结果等几个步骤。
通过实例演示了如何使用MATLAB求解一元方程和多元方程。
第三节介绍了常见方程求解函数的使用。
MATLAB提供了多种求解方程的函数,如符号计算工具箱中的solve函数、数值计算工具箱中的fsolve函数、优化工具箱中的fmincon函数等。
主要介绍了这些函数的基本用法和输入输出参数。
第四节介绍了函数极值的概念和求解方法。
函数极值是指函数的最大值和最小值,在数学和工程领域中具有重要的应用价值。
主要介绍了一元函数极值的求解方法,包括使用MATLAB中的fminbnd函数和fminsearch 函数。
通过实例演示了如何使用这些函数求解一元函数的极值。
通过学习本章内容,读者可以了解方程求解和函数极值的基本原理和方法,并掌握使用MATLAB进行方程求解和函数极值求解的技巧和方法。
这对于数学建模、优化问题求解和工程实际应用等方面都具有重要的指导意义。
matlab进退法法求函数极值 -回复
matlab进退法法求函数极值-回复Matlab进退法(Interval Halving Method)是一种常用的求解函数极值的数值方法。
它基于迭代过程,通过不断缩小搜索区间来逼近函数极值。
在本文中,我将一步一步地解释如何使用Matlab编程实现进退法来求解函数的极值。
首先,我们需要了解进退法的基本原理。
进退法假设函数在一个确定的区间上是单调递增或者单调递减的。
该方法通过首先确定一个初始搜索区间(如[a, b]),然后计算区间中点c,以确定目标函数在该点的取值。
如果函数在c点的取值比在区间两端的取值都大(或者都小),则我们可以缩小搜索区间为[a, c]或者[c, b]。
如此反复迭代,直到搜索区间长度小到一定程度,或者满足了预定的停止准则,我们就可以得到近似的极值点。
接下来,我们将通过一个具体的例子来演示如何使用Matlab实现进退法求解函数的极值。
假设我们有一个简单的一元函数f(x) = x^2 - 4x + 3,在区间[a, b] = [0, 4]上求其极小值。
我们可以使用以下步骤来完成这个任务:步骤1:定义目标函数在Matlab中,我们需要先定义目标函数f(x)。
可以使用函数句柄来表示这个函数,如下所示:matlabf = @(x) x^2 - 4*x + 3;步骤2:初始化搜索区间然后,在进退法中,我们需要选择一个初始搜索区间[a, b]。
根据题目要求,我们选择[a, b] = [0, 4]。
步骤3:求解极值接下来,我们使用进退法算法来求解极值。
具体步骤如下:3.1:计算区间中点首先,我们需要计算区间中点c,即c = (a + b) / 2。
matlabc = (a + b) / 2; 计算区间中点3.2:计算目标函数的值然后,我们计算目标函数在中点c处的取值。
matlabfc = f(c); 计算目标函数在c点的取值3.3:根据目标函数的取值判断根据目标函数在c点与区间两端点的取值大小关系,我们可以决定是将搜索区间缩小为[a, c]还是[c, b]。
MATLAB解方程和函数极值
实例演示----矩阵的特征值分解 实例演示 矩阵的特征值分解
单位阵的特征值分解 a=[-149 -50 -154; 537 180 546;-27 -9 -25] [v,d]=eig(a) 双矩阵的特征值分解 b=[2 10 2;10 5 -8;2 -8 11]; [v,d]=eig(a,b)
附:复数特征值对角阵与实数特征值对 复数特征值对角阵与实数特征值对 角阵的转换
实例演示
计算两多项式的乘除法 >>p=[2 -5 6 -1 9]; >>poly2sym(p); >>d=[3 -90 -18]; >>ploy2sym(d) >>pd=conv(p,d)%多项式p与d相乘 >>poly2sym(pd) >>pl=deconv(pd,d)%多项式pd除以d
(三)多项式运算
(二)多项式的创建
3.由根创立多项式 由根创立多项式 给定的根也可产生其相应的多项式,此功能还是 由函数poly实现 例:>>root=[-5 -3+4i -3-4i]; >>root=[-5 >>p=poly(root) >>poly2sym(p) 注:若要生成实系数多项式,则根中的复数比为对 称共轭复数
(三)多项式运算
1.求多项式的值 求多项式的值 求多项式的值可以由两种形式 (1)输入变量值代入多项式计算时是以数组为单 元的,此时函数为polyval (2)以矩阵为计算单元,进行矩阵式运算以求的多 项式的值,此时的函数为polyvalm 注:这两种计算在数值上由很大差别。 当进行矩阵运算时,变量矩阵须为方阵。
P = [ a 0 , a 1 ,L , a n −1 , a n ]
函数的极值与matlab应用
函数的极值与matlab应用函数的极值与matlab应用一、什么是函数的极值在数学中,函数的极值指的是在给定的定义域中函数的最大值和最小值。
当函数的导数为0或不存在时,函数就有可能有极值。
具体来说,当函数在该点的导数为0,或该点左侧的导数为正、右侧导数为负,或左侧导数为负、右侧导数为正时,该点就是函数的极值点。
极大值指的是函数在该点的值比周围点更大,而极小值则代表函数在该点的值更小。
二、如何通过matlab求解函数的极值matlab是一种数学软件,它支持各种数学操作,包括求解函数的极值。
在matlab中,我们可以使用fminbnd和fminsearch函数来找到函数的最小值,使用fmaxbnd和fminimax函数来找到函数的最大值。
这些函数使用类似于梯度下降的算法来搜索函数的最值,一旦找到极值点,就可以使用fmincon函数来求解该点的极值。
三、matlab实例下面给出一个matlab实例,该实例演示了如何使用matlab求解函数的极值。
假设我们要求解以下函数的极小值:f(x) = sin(x) + cos(2x) + x^2我们可以使用fminbnd函数来求解该函数的最小值:f = @(x) sin(x) + cos(2*x) + x^2;x0 = 1;xmin = fminbnd(f, -5, 5, x0)上述代码会计算出函数在x=-1.2673时的最小值,此时f(x)约等于-0.925。
类似地,我们可以使用fmaxbnd函数来求解该函数的最大值:f = @(x) sin(x) + cos(2*x) + x^2;x0 = 1;xmax = fmaxbnd(@(x) -f(x), -5, 5, x0)上述代码会计算出函数在x=-3.3706时的最大值,此时f(x)约等于3.829。
最后,我们可以使用fmincon函数来求解极值点的详细信息:f = @(x) sin(x) + cos(2*x) + x^2;[xmin, fval] = fmincon(f, -5, [], [], [], [], -5, 5)上述代码会计算出函数的全局最小值(因为定义域为[-5,5],所以与之前的结果相同),此时f(x)约等于-1.056。
matlab多元函数求极值
matlab多元函数求极值Matlab是一种强大的数学软件,它不仅可以进行数值计算,还可以进行符号计算、绘图等操作。
在Matlab中,我们可以使用多元函数求极值。
本文将介绍如何使用Matlab进行多元函数求极值的方法及其应用。
在Matlab中,求多元函数极值的方法有两种:一种是使用Matlab 自带的优化工具箱中的函数,另一种是使用Matlab的符号计算工具箱中的函数。
下面将分别介绍这两种方法。
1. 使用优化工具箱函数求多元函数极值Matlab的优化工具箱中提供了多个函数,可以用来求解多元函数的极值。
其中最常用的是fmincon函数,它可以用来求解有约束条件的多元函数极值问题。
使用fmincon函数求解多元函数极值的一般步骤如下:1) 定义目标函数和约束条件;2) 设定初始点;3) 调用fmincon函数求解极值。
以下是一个具体的例子,假设要求解以下目标函数的极值:f(x1, x2) = x1^2 + x2^2约束条件为:x1 + x2 = 1定义目标函数和约束条件:function f = objfun(x)f = x(1)^2 + x(2)^2;endfunction [c,ceq] = confun(x)c = [];ceq = x(1) + x(2) - 1;end然后,设定初始点:x0 = [0, 0];调用fmincon函数求解极值:options = optimoptions('fmincon','Display','iter');[x,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);其中,options用于设定一些选项,如是否显示迭代过程等。
2. 使用符号计算工具箱函数求多元函数极值除了使用优化工具箱函数,Matlab的符号计算工具箱中也提供了一些函数,可以用来求解多元函数的极值。
matlab极值点
matlab极值点【最新版】目录1.MATLAB 简介2.极值点的概念3.MATLAB 中求解极值点的方法4.应用实例正文一、MATLAB 简介MATLAB(Matrix Laboratory)是一款强大的数学软件,广泛应用于科学计算、数据分析、可视化等领域。
它基于矩阵运算,可以方便地处理大量数据,同时提供了丰富的工具箱和函数,为用户提供了极大的便利。
二、极值点的概念极值点,又称为临界点,是指函数在某一点处取得最大值或最小值的点。
在数学、物理等科学领域中,寻找极值点是研究函数性质的一个重要任务。
三、MATLAB 中求解极值点的方法在 MATLAB 中,有多种方法可以求解极值点。
这里我们介绍两种常用的方法:fsolve 函数和 fmincon 函数。
1.fsolve 函数fsolve 函数可以用于求解非线性方程组或方程的根。
对于求解极值点问题,我们可以将极值点的条件转化为方程或方程组,然后使用 fsolve 函数求解。
例如,对于函数 f(x) = x^3 - 6x^2 + 9x,我们可以通过求解 f(x)= 0 得到极值点。
使用 fsolve 函数,代码如下:```matlabf = @(x) x^3 - 6*x^2 + 9*x;x0 = -1;[x, fval] = fsolve(f, x0);```2.fmincon 函数fmincon 函数可以用于求解带约束的最小值问题。
在求解极值点时,我们可以将极值点的条件转化为优化问题,并添加相应的约束条件,然后使用 fmincon 函数求解。
例如,对于函数 f(x) = x^3 - 6x^2 + 9x,我们可以通过求解 f(x) 的最小值得到极值点。
使用 fmincon 函数,代码如下:```matlabf = @(x) x^3 - 6*x^2 + 9*x;A = [1, -6, 9];b = [0, 0, 0];Aeq = [];beq = [];lb = [];ub = [];[x, fval] = fmincon(f, [], [], A, b, Aeq, beq, lb, ub);```四、应用实例假设我们要研究函数 g(x) = x^4 - 4x^3 + 3x^2 在区间 [0, 10] 上的极值点。
第7章 MATLAB解方程与函数极值
迭代法求解下列线性方程组. 例7-5 用Jacobi迭代法求解下列线性方程组.设迭代初值为 , 迭代法求解下列线性方程组 设迭代初值为0, 迭代精度为10 迭代精度为 -6. 在命令中调用函数文件Jacobi.m,命令如下: 在命令中调用函数文件 ,命令如下: A=[10,-1,0;-1,10,-2;0,-2,10]; b=[9,7,6]'; [x,n]=jacobi(A,b,[0,0,0]',1.0e-6)
Jacobi迭代法的 迭代法的MATLAB函数文件 函数文件Jacobi.m如下: 如下: 迭代法的 函数文件 如下 function [y,n]=jacobi(A,b,x0,eps) if nargin==3 eps=1.0e-6; elseif nargin<3 error return end D=diag(diag(A)); %求A的对角矩阵 求 的对角矩阵 L=-tril(A,-1); %求A的下三角阵 求 的下三角阵 U=-triu(A,1); %求A的上三角阵 求 的上三角阵 B=D\(L+U); f=D\b; y=B*x0+f; n=1; %迭代次数 迭代次数 while norm(y-x0)>=eps x0=y; y=B*x0+f; n=n+1; end
迭代法求解下列线性方程组. 例7-6 用Gauss-Serdel迭代法求解下列线性方程组.设迭代 迭代法求解下列线性方程组 初值为0,迭代精度为10 初值为 ,迭代精度为 -6. 在命令中调用函数文件gauseidel.m,命令如下: 在命令中调用函数文件 ,命令如下: A=[10,-1,0;-1,10,-2;0,-2,10]; b=[9,7,6]'; [x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章 MATLAB解方程与函数极值7.1 线性方程组求解7.1.1 直接解法1.利用左除运算符的直接解法对于线性方程组Ax=b,可以利用左除运算符“\”求解:x=A\b例7-1 用直接解法求解下列线性方程组。
命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';x=A\b2.利用矩阵的分解求解线性方程组矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。
常见的矩阵分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。
(1) LU分解矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。
线性代数中已经证明,只要方阵A是非奇异的,LU分解总是可以进行的。
MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式为:[L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。
注意,这里的矩阵X必须是方阵。
[L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。
当然矩阵X同样必须是方阵。
实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或x=U\(L\Pb),这样可以大大提高运算速度。
例7-2 用LU分解求解例7-1中的线性方程组。
命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';[L,U]=lu(A);x=U\(L\b)或采用LU分解的第2种格式,命令如下:[L,U ,P]=lu(A);x=U\(L\P*b)(2) QR分解对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。
QR分解只能对方阵进行。
MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式为:[Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。
[Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R以及一个置换矩阵E,使之满足XE=QR。
实现QR分解后,线性方程组Ax=b的解x=R\(Q\b)或x=E(R\(Q\b))。
例7-3 用QR分解求解例7-1中的线性方程组。
命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';[Q,R]=qr(A);x=R\(Q\b)或采用QR分解的第2种格式,命令如下:[Q,R,E]=qr(A);x=E*(R\(Q\b))(3) Cholesky分解如果矩阵X是对称正定的,则Cholesky分解将矩阵X分解成一个下三角矩阵和上三角矩阵的乘积。
设上三角矩阵为R,则下三角矩阵为其转置,即X=R'R。
MATLAB函数chol(X)用于对矩阵X进行Cholesky分解,其调用格式为:R=chol(X):产生一个上三角阵R,使R'R=X。
若X为非对称正定,则输出一个出错信息。
[R,p]=chol(X):这个命令格式将不输出出错信息。
当X为对称正定的,则p=0,R与上述格式得到的结果相同;否则p为一个正整数。
如果X为满秩矩阵,则R为一个阶数为q=p-1的上三角阵,且满足R'R=X(1:q,1:q)。
实现Cholesky分解后,线性方程组Ax=b变成R‘Rx=b,所以x=R\(R’\b)。
例7-4 用Cholesky分解求解例7-1中的线性方程组。
命令如下:A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];b=[13,-9,6,0]';R=chol(A)??? Error using ==> cholMatrix must be positive definite命令执行时,出现错误信息,说明A为非正定矩阵。
7.1.2 迭代解法迭代解法非常适合求解大型系数矩阵的方程组。
在数值分析中,迭代解法主要包括 Jacobi迭代法、Gauss-Serdel迭代法、超松弛迭代法和两步迭代法。
1.Jacobi迭代法对于线性方程组Ax=b,如果A为非奇异方阵,即aii≠0(i=1,2,…,n),则可将A分解为A=D-L-U,其中D为对角阵,其元素为A的对角元素,L与U为A的下三角阵和上三角阵,于是Ax=b化为:x=D-1(L+U)x+D-1b与之对应的迭代公式为:x(k+1)=D-1(L+U)x(k)+D-1b这就是Jacobi迭代公式。
如果序列{x(k+1)}收敛于x,则x必是方程Ax=b的解。
Jacobi迭代法的MATLAB函数文件Jacobi.m如下:function [y,n]=jacobi(A,b,x0,eps)if nargin==3eps=1.0e-6;elseif nargin<3errorreturnendD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵B=D\(L+U);f=D\b;y=B*x0+f;n=1; %迭代次数while norm(y-x0)>=epsx0=y;y=B*x0+f;n=n+1;end例7-5 用Jacobi迭代法求解下列线性方程组。
设迭代初值为0,迭代精度为10-6。
在命令中调用函数文件Jacobi.m,命令如下:A=[10,-1,0;-1,10,-2;0,-2,10];b=[9,7,6]';[x,n]=jacobi(A,b,[0,0,0]',1.0e-6)2.Gauss-Serdel迭代法在Jacobi迭代过程中,计算时,已经得到,不必再用,即原来的迭代公式Dx(k+1)=(L+U)x(k)+b可以改进为Dx(k+1)=Lx(k+1)+Ux(k)+b,于是得到:x(k+1)=(D-L)-1Ux(k)+(D-L)-1b该式即为Gauss-Serdel迭代公式。
和Jacobi迭代相比,Gauss-Serdel迭代用新分量代替旧分量,精度会高些。
Gauss-Serdel迭代法的MATLAB函数文件gauseidel.m如下:function [y,n]=gauseidel(A,b,x0,eps)if nargin==3eps=1.0e-6;elseif nargin<3errorreturnendD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵G=(D-L)\U;f=(D-L)\b;y=G*x0+f;n=1; %迭代次数while norm(y-x0)>=epsx0=y;y=G*x0+f;n=n+1;end例7-6 用Gauss-Serdel迭代法求解下列线性方程组。
设迭代初值为0,迭代精度为10-6。
在命令中调用函数文件gauseidel.m,命令如下:A=[10,-1,0;-1,10,-2;0,-2,10];b=[9,7,6]';[x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)例7-7 分别用Jacobi迭代和Gauss-Serdel迭代法求解下列线性方程组,看是否收敛。
命令如下:a=[1,2,-2;1,1,1;2,2,1];b=[9;7;6];[x,n]=jacobi(a,b,[0;0;0])[x,n]=gauseidel(a,b,[0;0;0])7.2 非线性方程数值求解7.2.1 单变量非线性方程求解在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。
该函数的调用格式为:z=fzero('fname',x0,tol,trace)其中fname是待求根的函数文件名,x0为搜索的起点。
一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。
tol控制结果的相对精度,缺省时取tol=eps,trace•指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。
例7-8 求f(x)=x-10x+2=0在x0=0.5附近的根。
步骤如下:(1) 建立函数文件funx.m。
function fx=funx(x)fx=x-10.^x+2;(2) 调用fzero函数求根。
z=fzero('funx',0.5)z =0.37587.2.2 非线性方程组的求解对于非线性方程组F(X)=0,用fsolve函数求其数值解。
fsolve函数的调用格式为:X=fsolve('fun',X0,option)其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。
最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。
如果想改变其中某个选项,则可以调用optimset()函数来完成。
例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。
optimset(‘Display’,‘off’)将设定Display选项为‘off’。
例7-9 求下列非线性方程组在(0.5,0.5) 附近的数值解。
(1) 建立函数文件myfun.m。
function q=myfun(p)x=p(1);y=p(2);q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y);(2) 在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。
x=fsolve('myfun',[0.5,0.5]',optimset('Display','off'))x =0.63540.3734将求得的解代回原方程,可以检验结果是否正确,命令如下:q=myfun(x)q =1.0e-009 *0.2375 0.2957可见得到了较高精度的结果。
7.3 常微分方程初值问题的数值解法7.3.1 龙格-库塔法简介7.3.2 龙格-库塔法的实现基于龙格-库塔法,MATLAB提供了求常微分方程数值解的函数,一般调用格式为:[t,y]=ode23('fname',tspan,y0)[t,y]=ode45('fname',tspan,y0)其中fname是定义f(t,y)的函数文件名,该函数文件必须返回一个列向量。