非线性方程求解

非线性方程求解

1、对于简单的二元一次方程组,可直接调用solve函数求解,示例如下:

[x,y]=solve(x+y==1,x-y==0)

解得x=1/2
y=1/2。

2、当需要求解复杂的多项式方程求解,需调用vpasolve函数,示例如下:

syms x y;
syms x y;
[x,y]=vpasolve(x^2/2+x+3/2+2*1/y+5/(2*y)+3*1/x^3==0,y/2+3/(2*x)+1/x^4+5*x^4==0)

解得:
x =

0.32931104213639413243573804865509 - 0.66773074124799088768528979988865i
0.32931104213639413243573804865509 + 0.66773074124799088768528979988865i
0.78011530893790334966046755711182 + 0.38750567576843382578641341026874i
0.78011530893790334966046755711176 - 0.38750567576843382578641341026876i
- 1.004666839172735149664614857416 + 1.6825009701144900828330464086859i

  • 1.0046668391727351496308383846685 - 1.6825009701144900826975608417946i
    0.65565410606384961637567040906989 + 0.81597055704862095808065856211707i
    0.65565410606384961637567039948991 - 0.8159705570486209580806585878874i
  • 0.29724571161782339005631322675445 + 0.832223822216615105601714127977i
  • 0.29724571161782339005631322675445 - 0.832223822216615105601714127977i
  • 0.74022759065369936878192250228966 + 0.22935076883166251976493334164894i
  • 0.74022759065369936878192250228966 - 0.22935076883166251976493334164894i
    -1.4458806313877783796919686600904

y =

0.69867541579585327488187559055958 - 0.29448763281158966507670321077682i
0.69867541579585327488187559055958 + 0.29448763281158966507670321077682i

  • 0.59286676393625630062676373674434 - 0.66586526203012785635306228782235i
  • 0.59286676393625630062676373674434 + 0.66586526203012785635306228782235i
    81.974233326720327163468943314427 - 121.72834828151131744354751347631i
    81.974233326720327163468943314427 + 121.72834828151131744354751347631i
    10.608417877247060063626726907702 + 6.5822949640291075832837155683235i
    10.608417877247060063626726907702 - 6.5822949640291075832837155683235i
  • 0.70844943975782344577924530419558 + 0.43283716911842984974607060144328i
  • 0.70844943975782344577924530419558 - 0.43283716911842984974607060144328i
    0.39713172328795011482852489583113 - 0.66290116378580214114744977796865i
    0.39713172328795011482852489583113 + 0.66290116378580214114744977796865i
    -42.087617612047555074133456668492
    调用size(x)即可得到解的个数:
size(x)

ans =
13 1
解的检验可以用norm函数。

3、非线性方程的图解法

可以用fimplicit和ezplot画出隐函数的图像,较为直观,但只能求解最多两个变量的方程。

4、一般非线性方程的数值解法

可直接调用fsolve求解[x,f1,flag]=fsolve(funname,x0,options],
其中x为方程的解,f1为误差,flag若是正整数则求解成功。
示例如下;
非线性方程求解_第1张图片
值得注意的是:该函数只能包含x的未知参数,故应将y用x替换,
在这里插入图片描述
方程描述如下:

f=@(x)[x(1)^2*exp(-x(1)*x(2)^2/2)+...
exp(-x(1)/2)*sin(x(1)*x(2));x(2)^2*cos(x(2)+x(1)^2)+x(1)^2*exp(x(1)+x(2))];
x0=rand(2,1);
    x=fsolve(f,x0);
    f(x)

ans=
1.0e-04 *

0.0975
0.2465可通过以下设置来限制求解答的误差限:

    f=@(x)[x(1)^2*exp(-x(1)*x(2)^2/2)+exp(-x(1)/2)*sin(x(1)*x(2));x(2)^2*cos(x(2)+x(1)^2)+x(1)^2*exp(x(1)+x(2))];
x0=rand(2,1);
    x=fsolve(f,x0);
    f(x);
    ff=optimset;
    ff.tolx=1e-20;
    ff.tolfun=1e-20;
    x=fsolve(f,x0,ff);
    f(x)

ans =
1.0e-04 *
0.1072
0.2909

你可能感兴趣的:(非线性方程求解,matlab)