Matlab函数与方程求解

您所在的位置:网站首页 matlab计算函数零点 Matlab函数与方程求解

Matlab函数与方程求解

2024-01-05 13:04| 来源: 网络整理| 查看: 265

关于Matlab的一些基本操作在另一篇博客里有提及

https://blog.csdn.net/Netceor/article/details/95043332

目录

想查找相关内容也可在页面按ctrl+F搜索文字

1.线性方程求解

2.非线性方程求解

3.多项式求解

4.函数创建和应用

5.一元函数的零根

6.符号微积分

7.Taylor级数展开

8.符号公式的替换与数值演算

9.常微分方程

10.高阶微分方程

1.线性方程求解

指令x=A\b可求线性方程组Ax=b的特解。 (假如A不是可逆阵,即方程组有可能是欠定或超定的,则x是众多解中(含0最多)的一个或最小二乘解。)

用x=lsqnonneg(A,b)可求出方程组Ax=b的一个非负最小二乘解。

2x+y+3z=5x+3y+2z=10 A=[2 1 3;1 3 2]; b=[5;10]; x=lsqnonneg(A,b)

求通解可对增广矩阵用化最简阶梯形rref([A,b])实现高斯消元法。

2.非线性方程求解

MATLAB求‘Fun(x)=0’解的指令一般格式:

[x,fval,exitflag,output]=fsolve(Fun,x0,options,p1,p2,...)

示例:求解方程组

sin(x)+y+z^{2}e^{x}-4=0x+xy=0xyz=0 %创建函数funs function F=funs(x) F(1)=sin(x(1))+x(2)+x(3)^2*exp(x(1))-4; F(2)=x(1)+x(1)*x(2); F(3)=x(1)*x(2)*x(3); %解方程 funs=@(x) [sin(x(1))+x(2)+x(3)^2*exp(x(1))-4; x(1)+x(1)*x(2); x(1)*x(2)*x(3)] [x,fv]=fsolve(funs,[1,1,1]) %输出 x = 0.0000 0.1291 1.9675 fv = 1.0e-14 * -0.1332 0.0110 0.0025 3.多项式求解 p=[1 -7 10] %表示x²-7x+10 r=roots(p) %求根 p=poly(r) %由根创建多项式 A=ones(3) , poly(A) %方阵A的特征多项式 d=eig(A),[v,d]=eig(A) %求方阵A的特征值d与特征向量 polyval(p,[5 0;1 2]) %多项式求值 polyval(p,x) 将x代入p d=polyder(p) %多项式的的导数 a=[1 -2],b=[1 -5], c=polyder(a,b) %多项式a和b乘积的导数 [q,d]=polyder(a,b) %多项式的商a/b的导数 %用最小二乘法对定点(xi,yi)按n阶多项式拟合 p=polyfit(x,y,n) x=[1 2 3 4 5],y=[5.5 43.1 128 290.7 498.4] p=polyfit(x,y,3) 4.函数创建和应用

匿名函数y=@(x,a) ...  是Matlab为定义较简单的用户函数(对应一个形式返回参数的表达式)所提供的方便法门;调用时用y(x,a)取得实际返回值。另外,Matlab中对多元函数习惯用向量函数形式表示。

%MATLAB中求y=f(x)在指定区间[a,b]上的局部极小值 fun=@(x) 2*sin(x)-1 %创建与x变量有关的名为fun的函数 [x,f]=fminbnd(fun,3,6) %返回取极小值时自变量值x与函数值f %求多元函数在向量x0所表示的点附近的极小值 %[x,f]=fminsearch(fun,x0) 或[x,f]=fminunc(fun,x0) funf=@(x) x(1)^2+2.5*sin(x(2))-x(1)*x(2)^2*x(3)^2; [x,f]=fminsearch(funf,[1,-1,0]) %Matlab中对多元函数习惯用向量函数形式表示 z=@(x,a,b) a*sin(x(1))+b*cos(x(2)) [x,f]=fminsearch(@(x) z(x,2,1),[0,0]) %将一个新匿名函数做参数传入 5.一元函数的零根

查找fun函数在x0附近的零点x及对应的函数值fval,可返回

当x0=[a,b]则表示求[a,b]内的根

 [x,fval,exitflag,output] = fzero(fun,x0,options)

x = fzero(@cos,[1 2]) %求cos(x)在1和2之间的零点 x=fzero(@(x)x.^3-2*x-5,2) %求f(x) = x^3-2*x- 5在2附近的根 y=@(x) fzero(@(y) (exp(y)+x^y)^(1/y)-x^2*y,1) f=arrayfun(y,1:20) 6.符号微积分 syms x y c % 定义了三个基本的符号对象(变量) f=2*x^2+y^3-c*x*y % 由基本符合对象组成符号表达式 limit(f,y,1) %求极限 limit(f,v,a) diff(f,x), diff(f,y,2) %求导数、偏导数 diff(f,v,n),默认一阶 int(f,y) %对f关于变量y的原函数 s=int(f,x,1,2) %求定积分 S = solve(eqn,var) %非线性方程组符号求解 %示例 syms a u v x S= solve(a*u^2 + v^2 == 0, u - v == 1, a^2 + 6 == 5*a) %S为结构变量 S.u,S.v,S.a S=solve(x^3-a,x) S=solve(x^3-1,'Real',true) 7.Taylor级数展开

taylor(f)  求符号函数f对默认变量的5阶马克劳林展开

taylor(f,v,‘ExpansionPoint’,a,‘Order’,n)  %展开到(v-a) ^(n-1)项

syms x y t u v a b M5=taylor(exp(-x)) f=a*sin(x)*y^x+u*cos(v); g=exp(v)+b*v^u; T7=taylor(f,'Order',8,'ExpansionPoint',1) T2= taylor(g,v,'ExpansionPoint',a,'Order',3) 8.符号公式的替换与数值演算

为了使表达式简洁易读,常用用符号变量替换子表达式, MATLAB提供指令subexpr、 subs实现对表达式的替换

syms x y; f=x^2*y*sin(x-y); ES=diff(diff(f,y),x,2) [RS,ssub]=subexpr(ES,'ssub') %%用符号变量ssub置换相同的表达式,重写ES为RS RES=subs(ES,x-y,'ttt') % 用ttt置换ES中x-y,产生RES。

对符号推演得到的公式,常需代入具体参数计算其数值,这是可用串演算指令eval('字符串表达式或符号表达式'),其功能是将字符串或符号公式当作Matlab指令、表达式执行。

x=1,y=1 dzdxy11=eval(ES) 9.常微分方程

常微分方程:含有未知函数及其导数或微分的方程。若未知函数是一元函数则称常微分方程。微分方程中出现的最高阶导数为n阶,则称n阶微分方程。

微分方程的解:代入微分方程后,使微分方程成为恒等式的已知函数。n阶微分方程的解函数中含n个独立任意常数,则称通解;若通解中的任意常数都被确定,则称特解。

Matlab求常微分方程解析解指令:

dsolve('deq1==0,...,deqn==0','...定解条件...'[,'指定自变量'])

y=dsolve('D2y+2*Dy-3*y-cos(x)==0','y(0)=4/5,Dy(0)=11/10','x') S=dsolve('Dx==2*y,D2y=Dy/t'), S.x,S.y %函数默认自变量为t

求公式解较困难,大多无公式解;实用中常求近似的数值解,即用数表法表示解函数

常微分方程的数值解

通常用法:

[T,Y] = solver(@odefun,tspan,y0)

sol = solver(odefun,[t0 tf],y0...)

其中: 求解函数是 ode45, ode23, ode113, ode15s, ode23s, ode23t, or ode23tb中的一个。

odefun:微分方程y’=f(t,y)的右端函数.

tspan:指定数值解中时间t的范围[t0,tf],若要获取指定时刻的数值解y的值,用 tspan = [t0,t1,...,tf]来描述指定时刻。(可以是区间,也可以是点)

y0 :描述初始条件的向量。(tspan左端点对应的函数值,即y1(0)=0,y2(0)=1,y3(0)=1)

[T,Y]:T为返回数值解中的自变量取值(向量),Y为返回数值解中相应时间T的Y值(向量)

 

dy=@(t,y) [y(2) * y(3);-y(1) * y(3);-0.51 * y(1) * y(2)] [T,Y] = ode45(dy,[0 12],[0 1 1]); %t取值范围:0-12,端点函数值分别0、1、1 plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.') %figure1 %[T,Y] = ode45(@odef,[0 12],[0 1 1]); %plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.') 10.高阶微分方程

高阶微分方程可化为一阶微分方程组求解



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3