matlab解方程Word格式.docx

上传人:b****6 文档编号:19177732 上传时间:2023-01-04 格式:DOCX 页数:9 大小:20.06KB
下载 相关 举报
matlab解方程Word格式.docx_第1页
第1页 / 共9页
matlab解方程Word格式.docx_第2页
第2页 / 共9页
matlab解方程Word格式.docx_第3页
第3页 / 共9页
matlab解方程Word格式.docx_第4页
第4页 / 共9页
matlab解方程Word格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

matlab解方程Word格式.docx

《matlab解方程Word格式.docx》由会员分享,可在线阅读,更多相关《matlab解方程Word格式.docx(9页珍藏版)》请在冰豆网上搜索。

matlab解方程Word格式.docx

var1'

var2'

...'

varN'

);

第三步:

求出n位有效数字的数值解x=vpa(x,n);

y=vpa(y,n);

z=vpa(z,n);

...。

如:

解二(多)元二(高)次方程组:

x^2+3*y+1=0

y^2+4*x+1=0

解法如下:

syms 

y;

[x,y]=solve('

x^2+3*y+1=0'

y^2+4*x+1=0'

x=vpa(x,4);

y=vpa(y,4);

结果是:

1.635+3.029*i

1.635-3.029*i

-.283

-2.987

1.834-3.301*i

1.834+3.301*i

-.3600

-3.307。

二元二次方程组,共4个实数根;

还有的同学问,如何用matlab解高次方程组(非符号方程组)?

举个例子好吗?

解答如下:

基本方法是:

solve(s1,s2,…,sn,v1,v2,…,vn),即求表达式s1,s2,…,sn组成的方程组,求解变量分别v1,v2,…,vn。

具体例子如下:

x^2 

x*y 

3

4*x 

解法:

[x,y] 

solve('

3'

0'

运行结果为 

=

-3/2

即x等于1和3;

y等于1和-1.5

3= 

x'

y'

结果一样,二元二方程都是4个实根。

通过这三个例子可以看出,用matlab解各类方程组都是可以的,方法也有多种,只是用到解方程组的函数,注意正确书写参数就可以了,非常方便。

citefrom:

2、变参数非线性方程组的求解

对于求解非线性方程组一般用fsolve命令就可以了,但是对于方程组中某一系数是变化的,该怎么求呢?

%定义方程组如下,其中k为变量

functionF=myfun(x,k)

H=0.32;

Pc0=0.23;

W=0.18;

F=[Pc0+H*(1+1.5*(x

(1)/W-1)-0.5*(x

(1)/W-1)^3)-x

(2);

 

x

(1)-k*sqrt(x

(2))];

%求解过程

x0=[2*W;

Pc0+2*H];

%取初值

options=optimset('

Display'

off'

k=0:

0.01:

1;

%变量取值范围[01]

fori=1:

1:

length(k)

kk=k(i);

x=fsolve(@(x)myfun(x,kk),x0,options);

%求解非线性方程组

x1(i)=x

(1);

x2(i)=x

(2);

end

plot(k,x1,'

-b'

k,x2,'

-r'

xlabel('

k'

legend('

x1'

x2'

3、非线性方程数值求解

matlab里solve如何使用,是否有别的函数可以代替它.

matlab里我解y=9/17*exp(-1/2*t)*17^(1/2)*sin(1/2*17^(1/2)*t)=0这样的方程为什么只得到0这一个解,如何可以的到1/2*17^(1/2)*t=n*(pi)这样一族解?

?

在matlab里面solve命令主要是用来求解代数方程(即多项式)的解,但是也不是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给出很特殊的实数解。

(该问题给出的方程就是典型的超越方程,非代数方程)

从计算机的编程实现角度讲,如今的任何算法都无法准确的给出任意非代数方程的所有解,但是我们有很多成熟的算法来实现求解在某点附近的解。

matlab也不例外,它也只能给出任意非代数方程在某点附近的解,函数有两个:

fzero和fsolve,具体用法请用help或doc命令查询吧。

如果还是不行,你还可以将问题转化为非线性最优化问题,求解非线性最优化问题的最优解,可以用的命令有:

fminbnd,fminsearch,fmincon等等。

*非线性方程数值求解

*单变量非线性方程求解

在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。

该函数的调用格式为:

z=fzero('

fname'

x0,tol,trace)

其中fname是待求根的函数文件名,x0为搜索的起点。

一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。

tol控制结果的相对精度,缺省时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。

例求f(x)=x-10x+2=0在x0=0.5附近的根。

步骤如下:

(1)建立函数文件funx.m。

functionfx=funx(x)

fx=x-10.^x+2;

(2)调用fzero函数求根。

funx'

0.5)

z=

0.3758

**非线性方程组的求解

对于非线性方程组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’。

例 

求下列非线性方程组在(0.5,0.5)附近的数值解。

(1)建立函数文件myfun.m。

functionq=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('

))

x=

0.6354

0.3734

将求得的解代回原方程,可以检验结果是否正确,命令如下:

q=myfun(x)

q=

1.0e-009*

0.2375 

0.2957

可见得到了较高精度的结果。

4、fsolve函数解方程

[X,FVAL,EXITFLAG,OUTPUT,JACOB]=FSOLVE(FUN,X0,...)returnsthe

JacobianofFUNatX. 

Examples

FUNcanbespecifiedusing@:

x=fsolve(@myfun,[234],optimset('

iter'

wheremyfunisaMATLABfunctionsuchas:

functionF=myfun(x)

F=sin(x);

FUNcanalsobeananonymousfunction:

x=fsolve(@(x)sin(3*x),[14],optimset('

IfFUNisparameterized,youcanuseanonymousfunctionstocapturethe

problem-dependentparameters.Supposeyouwanttosolvethesystemof

nonlinearequationsgiveninthefunctionmyfun,whichisparameterized

byitssecondargumentc.HeremyfunisanM-filefunctionsuchas

functionF=myfun(x,c)

F=[2*x

(1)-x

(2)-exp(c*x

(1))

-x

(1)+2*x

(2)-exp(c*x

(2))];

Tosolvethesystemofequationsforaspecificvalueofc,firstassignthe

valuetoc.Thencreateaone-argumentanonymousfunctionthatcaptures

thatvalueofcandcallsmyfunwithtwoarguments.Finally,passthisanonymous

functiontoFSOLVE:

c=-1;

%defineparameterfirst

x=fsolve(@(x)myfun(x,c),[-5;

-5])

1、 

导数

diff(f) 

——函数f对符号变量x或字母表上最接近字母x的符号变量求导数;

diff(f,t)——函数f对符号变量t求导数。

例:

symsabtxy

f=sin(a*x)+cos(b*t);

g=diff(f)

gg=diff(f,t) 

%可以看作二元函数求偏导数)

g=

cos(a*x)*a

gg=

-sin(b*t)*b 

用diff(f,2)求二阶导数

f=sin(a*x*t)+cos(b*t*x^2)-2*x*t^3;

diff(f,2)

diff(f,t,2) 

ans=

-sin(a*x*t)*a^2*t^2-4*cos(b*t*x^2)*b^2*t^2*x^2-2*sin(b*t*x^2)*b*t

-sin(a*x*t)*a^2*x^2-cos(b*t*x^2)*b^2*x^4-12*x*t 

当微分运算作用于符号矩阵时,是作用于矩阵的每个元素,如:

symsax

a=[sin(a*x),cos(a*x);

-cos(a*x),-sin(a*x)]

dy=diff(a) 

a=

sin(a*x), 

cos(a*x)]

[-cos(a*x),-sin(a*x)]

dy=

cos(a*x)*a,-sin(a*x)*a]

sin(a*x)*a,-cos(a*x)*a] 

2、 

积分

int(f)——函数f对符号变量x或接近字母x的符号变量求不定积分;

int(f,t)——函数f对符号变量t求不定积分;

int(f,a,b)——函数f对符号变量x或接近字母x的符号变量求从a到b的定积分;

int(f,t,a,b)——函数f对符号变量t求从a到b的定积分。

symsax

f=sin(a*x)

g=int(f) 

gg=int(f,a) 

f=sin(a*x)

ff=sin(x^3)

g=-1/a*cos(a*x) 

gg=-1/x*cos(a*x) 

g=int(f,0,pi) 

f=

sin(a*x)

g=-(cos(pi*a)-1)/a 

注:

当不定积分无解析表达式时,可用double计算其定积分的数值解。

symx

f=exp(-x^2)

g=int(f)

gg=int(f,0,1)

a=double(gg) 

ans=x

f=exp(-x^2)

g=1/2*pi^(1/2)*erf(x)

gg=1/2*erf

(1)*pi^(1/2)

a= 

0.7468 

3、 

极限

limit(f)——当符号变量x(或最接近字母x的符号变量)—>

0时函数f的极限;

limit(f,t,a)——当符号变量t—>

a时,函数f的极限。

symsxta

f=sin(x)/x

g=limit(f)

limit((cos(x+a)-cos(x))/a,a,0)

limit((1+x/t)^t,t,inf) 

f=sin(x)/x

g=1

ans=-sin(x)

ans=exp(x) 

左、右极限的求法

limit(1/x)

limit(1/x,x,0,'

left'

right'

) 

ans=NaN

ans=-inf

ans=inf 

4、 

级数和

symsum(s,t,a,b)——表示s中的符号变量t从a到b的级数和(t缺省时设定为x或最接近x的字母)

symsxk

symsum(1/x,1,3) 

ans=11/6 

s1=symsum(1/x^2,1,inf)

s2=symsum(x^k,k,0,inf) 

s1=1/6*pi^2

s2=-1/(x-1) 

5、 

泰勒(Taylor)多项式

taylor(f,n,a)——函数f对符号变量x(或最接近字母x的符号变量)在a点的n-1阶泰勒多项式(n缺省时值为6,a缺省值为0)

taylor(sin(x)) 

ans=x-1/6*x^3+1/120*x^5 

f=log(x)

s=taylor(f,4,2) 

f=log(x)

s=log

(2)+1/2*x-1-1/8*(x-2)^2+1/24*(x-2)^3 

代数方程

solve(f,t)——对f中的符号变量t解方程f=0(t缺省值为x或最接近x的字母)

symsabxc

f=a*x^2+b*x+c

s=solve(f) 

ss=solve(f,b) 

f=a*x^2+b*x+c

s=

[1/2/a*(-b+(b^2-4*a*c)^(1/2))]

[1/2/a*(-b-(b^2-4*a*c)^(1/2))] 

ss=-(a*x^2+c)/x 

求解形如f(x)=q(x)形式的方程,则需要用单引号把方程括起来。

s=solve('

cos(2*x)+sin(x)=1'

0]

pi]

[1/6*pi]

[5/6*pi] 

求解方程组

x^2+x*y+y=3'

x^2-4*x+3=0'

[1]

[3]

y=

1]

[-3/2] 

即解为(1,1)和(3,-3/2)

微分方程

dsolve('

S'

s1'

s2'

…,'

其中S为方程,s1,s1,s3,…为初始条件,x为自变量。

方程S中用D表示求导数,D2,D3,…表示二阶、三阶等高阶导数;

初始条件缺省时,给出带任意常数C1,C2,..的通解;

自变量缺省值为t。

也可求解微分方程组。

Dy=1+y^2'

ans=tan(t+C1) 

y=dsolve('

y(0)=1'

y=tan(x+1/4*pi) 

x=dsolve('

D2x+2*D1x+2*x=exp(t)'

x(0)=1'

Dx(0)=0'

x=1/5*exp(t)+3/5*exp(-t)*sin(t)+4/5*exp(-t)*cos(t) 

S=dsolve('

Df=3*f+4*g'

Dg=-4*f+3*g'

%解微分方程组

S=

f:

[1x1sym]

g:

[1x1sym] 

计算结果返回在一个结构S中,为了看到其中f,g的值,有如下指令

f=S.f

g=S.g 

f=exp(3*t)*(cos(4*t)*C1+sin(4*t)*C2)

g=-exp(3*t)*(sin(4*t)*C1-cos(4*t)*C2) 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1