matlab求解一个非线性方程问题.....

现在遇到一个比较复杂的非线性方程,如下:tan(theta)=(D+A)*((1-D^2)*(1-A^2))^(-1/2);D=sqrt((2*z-1)/z^2);A=1... 现在遇到一个比较复杂的非线性方程,如下:
tan(theta)=(D+A)*((1-D^2)*(1-A^2))^(-1/2);
D=sqrt((2*z-1)/z^2);
A=1/(2*z-1)^(1/2*k);

其中,theta=46.5*pi/180; k=0.21
最终求出z的值。(z应该是大于1的值)
思路:我用solve求解了半天没有算出结果,可能是没有解析解;用fsolve求解初值不知道如何选取;请大神帮助啊....
展开
 我来答
evolmath
2014-07-22 · TA获得超过2745个赞
知道小有建树答主
回答量:413
采纳率:100%
帮助的人:241万
展开全部

由D,A可知z>1/2

将原非线性方程转化为tan²θ*(1-D²)*(1-A²)=(D+A)²

其中,D=√[(2*z-1)/z²]=√(2*z-1)/z,A=1/(2*z-1)^(1/2*k)

令f(z)=tan²θ*(1-D²)*(1-A²)-(D+A)²,z>1/2

找z的初值可先绘制函数f(z)的图像

 

%f(z)在[0.505,1.5]上的图像

clear

z=0.505:0.001:1.5;

k=0.21;

theta=46.5*pi/180;

D=sqrt(2*z-1)./z;

A=1./(2*z-1).^(k/2);

f=tan(theta)^2*(1-D.^2).*(1-A.^2)-(D+A).^2;

plot(z,f)

grid on

 

明显函数在该区间无零点.注意到函数有一极大值和一极小值

用fminbnd命令可求出极值点与极值:

当z=0.559071364951272时,极大值f(z)=-3.873681569517792

当z=0.797989261049623时,极小值f(z)=-4.101806518882230

可以看到当z>0.797989261049623时,曲线上升,将作图区间改为[0.505,60],得到下图

 

 

容易看出方程的根在z=50附近.下面用fzero命令求解(相对fsolve效果较好)

 

function f=nl(z,k,theta)

D=sqrt(2*z-1)./z;

A=1./(2*z-1).^(k/2);

f=tan(theta)^2*(1-D.^2).*(1-A.^2)-(D+A).^2;

 

clear

k=0.21;

theta=46.5*pi/180;

z0=fzero(@(z)nl(z,k,theta),50)

 

z0 =50.809922902973383,即为原方程的根.

z0是否为方程的唯一实根?

考察当z>0.797989261049623时,函数f(z)的单调性

直接对f(z)求导比较麻烦,容易判断的是:当z充分大时,D与A均单调递减

故f(z)=tan²θ*(1-D²)*(1-A²)-(D+A)²,z>1/2单调递增.当z→+∞时,f(z)→tan²θ≈1.1105

z= tan²θ为该曲线的水平渐近线

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式