MATLAB-非线性方程(组)求解

求非线性方程或方程组解的问题也就是求函数零点的问题。对于任意函数,在求解范围内可能有零点,也可能没有;可能只有一个零点,也可能有多个甚至无数个零点。MATLAB没有可以求解所有函数零点的通用命令,下面将分别讨论一元函数和多元函数零点的求解问题。

一元函数的零点

在所有函数中,一元函数是最简单的。在MATLAB中,可以使用fzero 函数来计算一元函数的零点,具体调用方法如下。

x =fzero( fun, x0) %在x0点附近寻找函数fun的零点

x =fzero( fun , x0 , options) %options为使用optimsect 函数设定优化器参数的选项

x =fzero( fun ,[ x0,x1]) %在[ x0,x1]区间寻找函数fun的零点

optimset 函数的具体调用方法如下。

optimset%显示优化器的现有参数名及其参数值

options = optimset( " paraml',value1 ,' param2 ' ,value2,...)%使用参数名和参数值设定优化器的参数

options = optimset( oldopts, ' paraml ' ,value1,...)%在现有优化器oldopts的基础上,使用参数名和参数值变更优化器参数

optimset 函数中可以设置的主要优化器参数见表。

例:计算一元函数fx )= (x^2)*cosx一x+1在[-3,3]区间上的零点。

首先绘制函数的曲线,在命令行窗口中输入如下语句。

>>x=-3:0.1:3;

y =x.*x.*cos( x)-x+1;

plot(x,y,'r ')

xlabel( 'x ');ylabel('fx)');

title( 'The zero of function ')

hold on

h=line([-3,3],[0,0]);

set( h, 'color '.'g')

grid;

图形窗口中的输出结果如图所示。

在求解函数零点之前,先绘制函数的图形,这样在后面的步骤中使用fzero命令时,方便选择初始数值x0。由上图不难看出,曲线在[ -3,3]区间内包含2个零点。

计算函数在某点附近的零点,在命令窗口中输入如下语句。

>>f=@(x)x*x * cos(x)-x+1;

X1 =fzero(f,-2)

X2=fzero(f,1)

命令行窗口中的输出结果如下所示。

X1=

-2.2621

X2=

1.3719

多元函数的零点

非线性方程组的标准形式为F(x)=0,其中x为向量,F(x)为函数向量。在MATLAB中,使用fsolve命令求解多元函数,具体调用方法如下。

X=fsolve( fun,xo) %在向量x附近寻找函数fun的解

X=fsolve( fun,xo , options) %使用options设定优化器参数

例:求解二元方程组的零点。

首先绘制函数的曲线,在命令行窗口中输人如下语句。

>>x=[-5:0.1:5];

y=x;

[X,Y] = meshgrid(x,y);

Z=2*X-Y-exp( -X);

surf(X,Y,Z)

xlabel( 'x ')

ylabel( 'y')

zlabel('z ')

title( 'The figure of the function ')

图形窗口中的输出结果如图所示。

编写对非线性方程组进行函数描述的M文件,输人代码如下。

function F= fsolvefun(x)

F=[2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp( -x(2))];

将上述程序代码保存为fsolvefun. m文件。

下面求解二元函数的零点,在命令行窗口中输人如下语句。

>>x0=[-5;-5];

options =optimset( 'Display ','iter ');

x= fsolve( @ fsolvefun, x0 ,options)

命令行窗口中的输出结果如下所示。

例:求解

编写对非线性方程组进行函数描述的M文件,并保存为myfun6. _8. m,如下所示。

function T= myfun6_ 8(x)

T=x^4-[2,5;-8,7];

然后求解非线性方程组,在命令行窗口中输人如下语句。

>>x0=[3 1;2 1];

options= optimset( 'Display',' of');

X= fsolve( @ myfun6 8, x0 options)

命令行窗口中的输出结果如下所示。

X=

1.4438 0.3202

-0. 5123 1.7640

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习不好的电气仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值