歡迎訪問 Forcal程序設計

求隱函數方程、非線性方程的全部解

說明:本文所用的求解函數isolve只求得全部實數解,若要求取全部復數解,請使用solve函數。

例子1 求方程的全部解(所有解):f(x)=x^6-5*x^5+3*x^4+x^3-7*x^2+7*x-20;

    Forcal代碼:

f(x)=x^6-5*x^5+3*x^4+x^3-7*x^2+7*x-20;
fcopt::isolve[HFor("f")];

    結果(每行中前面的數是解,最后一個數是誤差。下同。):

-1.402463030422577 3.552713678800501e-015
4.333755446919994  -2.984279490192421e-013
2.

例子2 求方程的全部解(當y為1時,求x的全部解):f(x,y)=(x^2+y^2)^3-36*(x^2-y^2)^2;

    Forcal代碼:

!using("fcopt");
f(x,y)=(x^2+y^2)^3-36*(x^2-y^2)^2;
isolve[HFor("f"),optpara,1];

    結果:

-5.530393535267971  1. -3.637978807091713e-012
-1.32936186218296   1. -7.105427357601002e-015
-0.8047014256478491 1. -1.776356839400251e-015
0.8047014256478491  1. -1.776356839400251e-015
1.32936186218296    1. -7.105427357601002e-015
5.530393535267971   1. -3.637978807091713e-012
6.

例子3 求方程的全部解(x取1.1,求y的全部解):f(x,y)=(x^2+y^2)^3-36*(x^2-y^2)^2;

    Forcal代碼:

!using("fcopt");
f(x,y)=(x^2+y^2)^3-36*(x^2-y^2)^2;
isolve[HFor("f"), optthis,1, optpara,1.1];

    結果:

1.1 -5.413569621185505  0.
1.1 -1.52029233271966   0.
1.1 -0.8671650244626143 8.881784197001252e-016
1.1 0.8671650244626143  8.881784197001252e-016
1.1 1.52029233271966    0.
1.1 5.413569621185504   0.
6.

例子4 為隱函數繪圖準備數據(x取1~5,y取1~5,z取1~5):f(x,y,z)=(x+y+z)*(x*y+x*z+y*z)-10*x*y*z;

    Forcal代碼:

!using("fcopt");
f(x,y,z)=(x+y+z)*(x*y+x*z+y*z)-10*x*y*z;
init(:x,y,i)=
{
    i=0,
    x=1,while{x<=5,
        y=1,while{y<=5,
            i=i+isolve[HFor("f"), optrange,1,5, optthis,2, optpara,x,y],
            y=y+0.5
        },
        x=x+0.5
    },
    i
};

    結果:

1.  1.  2.                0.
1.  1.5 2.226208734813002 0.
1.  2.  1.                0.
1.  2.  2.000000000000003 0.
1.5 1.  2.226208734813001 0.
1.5 1.5 3.                0.
1.5 2.  3.307164115457961 0.
1.5 2.5 1.135767284302285 0.
1.5 2.5 3.301732715697718 0.
1.5 3.  1.499999999999999 0.
1.5 3.  3.000000000000002 0.
2.  1.  1.                0.
2.  1.  2.                0.
2.  1.5 3.307164115457961 0.
2.  2.  1.                0.
2.  2.  4.                0.
2.  2.5 1.149218940641788 0.
2.  2.5 4.350781059358212 0.
2.  3.  1.347582530373998 0.
2.  3.  4.452417469626004 0.
2.  3.5 1.611932882193128 0.
2.  3.5 4.342612572352325 0.
2.  4.  2.000000000000001 0.
2.  4.  3.999999999999998 0.
2.5 1.5 1.135767284302285 0.
2.5 1.5 3.301732715697716 0.
2.5 2.  1.149218940641788 0.
2.5 2.  4.350781059358212 0.
2.5 2.5 1.25              0.
2.5 2.5 4.999999999999998 0.
2.5 3.  1.394515580490411 0.
2.5 3.5 1.577202478216426 0.
2.5 4.  1.804522914534424 0.
2.5 4.5 2.09541126457111  0.
2.5 5.  2.5               0.
2.5 5.  5.                0.
3.  1.5 1.499999999999999 0.
3.  1.5 2.999999999999998 0.
3.  2.  1.347582530373998 0.
3.  2.  4.452417469626001 0.
3.  2.5 1.394515580490411 0.
3.  3.  1.5               0.
3.  3.5 1.641371232518947 0.
3.  4.  1.814243197655509 0.
3.  4.5 2.021373795560996 0.
3.  5.  2.271534568604568 0.
3.5 2.  1.611932882193128 0.
3.5 2.  4.342612572352325 0.
3.5 2.5 1.577202478216426 0.
3.5 3.  1.641371232518947 0.
3.5 3.5 1.75              0.
3.5 4.  1.889112461544296 0.
3.5 4.5 2.055177184113075 0.
3.5 5.  2.249335186315033 0.
4.  2.  2.000000000000001 0.
4.  2.  3.999999999999998 0.
4.  2.5 1.804522914534426 0.
4.  3.  1.814243197655508 0.
4.  3.5 1.889112461544297 0.
4.  4.  2.                0.
4.  4.5 2.137407852977751 0.
4.  5.  2.298437881283576 0.
4.5 2.5 2.095411264571111 0.
4.5 3.  2.021373795560997 0.
4.5 3.5 2.055177184113076 0.
4.5 4.  2.137407852977751 0.
4.5 4.5 2.25              0.
4.5 5.  2.386074153449667 0.
5.  2.5 2.500000000000001 0.
5.  2.5 4.999999999999996 0.
5.  3.  2.271534568604568 0.
5.  3.5 2.249335186315031 0.
5.  4.  2.298437881283576 0.
5.  4.5 2.386074153449668 0.
5.  5.  2.5               0.
75.

例子5 求如下函數在-10~10內的全部解:

f(x)=1+cos(x*0.5)*cosh(x*0.5)-1.2*x*(sin(x*0.5)*cosh(x*0.5)-cos(0.5*x)*sinh(x*0.5))/0.2-0.13885*x^3*(sin(x*0.5)*cosh(x*0.5)+cos(x*0.5)*sinh(0.5*x))/0.2+1.2*0.1388*x^4*(1-cos(0.5*x)*cosh(0.5*x))/0.04;

    Forcal代碼:

!using("fcopt");
f(x)=1+cos(x*0.5)*cosh(x*0.5)-1.2*x*(sin(x*0.5)*cosh(x*0.5)-cos(0.5*x)*sinh(x*0.5))/0.2-0.13885*x^3*(sin(x*0.5)*cosh(x*0.5)+cos(x*0.5)*sinh(0.5*x))/0.2+1.2*0.1388*x^4*(1-cos(0.5*x)*cosh(0.5*x))/0.04;
isolve[HFor("f"), optrange,-10,10];

    結果:

-9.49676657269838  5.020410753786564e-010
-2.238482381162303 7.105427357601002e-015
-1.154772991142475 7.771561172376096e-016
1.154772991142476  8.326672684688674e-016
2.238482381162303  -3.552713678800501e-015
9.49676657269838   5.020410753786564e-010
6.

例子6 求隱函數限定范圍內的全部解:A*sin(a-x)+B*cos(a-x)-p*tan(y)=0;

    取A=1,B=1,p=1,a=1;y取-0.3~0.3,間隔為0.1;求x在-2pi~2pi內的全部解。

    解法1:

!using["fcopt","math"];
f(x,y:A,B,p,a)= A=1,B=1,p=1,a=1, A*sin(a-x)+B*cos(a-x)-p*tan(y);
main(:y)= y=-3, while{y<=3, isolve[HFor("f"), optpara,y/10, optmax,1000, optrange,-2*pi,2*pi], y++};

    結果:

-4.277270526150085 -0.3 -1.110223024625157e-016
-1.576711107824398 -0.3 -3.33066907387547e-016
2.005914781029501  -0.3 2.220446049250313e-016
4.706474199355188  -0.3 0.
-4.353954080596088 -0.2 -4.440892098500626e-016
-1.500027553378395 -0.2 0.
1.929231226583498  -0.2 -1.110223024625157e-016
4.783157753801191  -0.2 -4.440892098500626e-016
-4.426780162371511 -0.1 1.110223024625157e-016
-1.427201471602972 -0.1 -1.110223024625157e-016
1.856405144808076  -0.1 -1.110223024625157e-016
4.855983835576614  -0.1 2.220446049250313e-016
-4.497787143782138 0.   -3.33066907387547e-016
-1.356194490192345 0.   1.110223024625157e-016
1.785398163397448  0.   1.110223024625157e-016
4.926990816987241  0.   -2.220446049250313e-016
-4.568794125192766 0.1  5.551115123125783e-016
-1.285187508781718 0.1  -3.33066907387547e-016
1.714391181986821  0.1  -1.110223024625157e-016
4.997997798397869  0.1  5.551115123125783e-016
-4.641620206968188 0.2  -1.110223024625157e-016
-1.212361427006295 0.2  2.220446049250313e-016
1.641565100211399  0.2  -1.110223024625157e-016
5.070823880173291  0.2  -1.110223024625157e-016
-4.718303761414191 0.3  -5.551115123125783e-016
-1.135677872560292 0.3  0.
1.564881545765395  0.3  -2.220446049250313e-016
5.147507434619294  0.3  -3.33066907387547e-016

    解法2:

!using["fcopt","math"];
f(x,y,A,B,p,a)= A*sin(a-x)+B*cos(a-x)-p*tan(y);
main(:y)= y=-3, while{y<=3, isolve[HFor("f"), optpara,y/10,1,1,1,1, optmax,1000, optrange,-2*pi,2*pi], y++};

    結果:

-4.277270526150085 -0.3 1. 1. 1. 1. -1.110223024625157e-016
-1.576711107824398 -0.3 1. 1. 1. 1. -3.33066907387547e-016
2.005914781029501  -0.3 1. 1. 1. 1. 2.220446049250313e-016
4.706474199355188  -0.3 1. 1. 1. 1. 0.
-4.353954080596088 -0.2 1. 1. 1. 1. -4.440892098500626e-016
-1.500027553378395 -0.2 1. 1. 1. 1. 0.
1.929231226583498  -0.2 1. 1. 1. 1. -1.110223024625157e-016
4.783157753801191  -0.2 1. 1. 1. 1. -4.440892098500626e-016
-4.426780162371511 -0.1 1. 1. 1. 1. 1.110223024625157e-016
-1.427201471602972 -0.1 1. 1. 1. 1. -1.110223024625157e-016
1.856405144808076  -0.1 1. 1. 1. 1. -1.110223024625157e-016
4.855983835576614  -0.1 1. 1. 1. 1. 2.220446049250313e-016
-4.497787143782138 0.   1. 1. 1. 1. -3.33066907387547e-016
-1.356194490192345 0.   1. 1. 1. 1. 1.110223024625157e-016
1.785398163397448  0.   1. 1. 1. 1. 1.110223024625157e-016
4.926990816987241  0.   1. 1. 1. 1. -2.220446049250313e-016
-4.568794125192766 0.1  1. 1. 1. 1. 5.551115123125783e-016
-1.285187508781718 0.1  1. 1. 1. 1. -3.33066907387547e-016
1.714391181986821  0.1  1. 1. 1. 1. -1.110223024625157e-016
4.997997798397869  0.1  1. 1. 1. 1. 5.551115123125783e-016
-4.641620206968188 0.2  1. 1. 1. 1. -1.110223024625157e-016
-1.212361427006295 0.2  1. 1. 1. 1. 2.220446049250313e-016
1.641565100211399  0.2  1. 1. 1. 1. -1.110223024625157e-016
5.070823880173291  0.2  1. 1. 1. 1. -1.110223024625157e-016
-4.718303761414191 0.3  1. 1. 1. 1. -5.551115123125783e-016
-1.135677872560292 0.3  1. 1. 1. 1. 0.
1.564881545765395  0.3  1. 1. 1. 1. -2.220446049250313e-016
5.147507434619294  0.3  1. 1. 1. 1. -3.33066907387547e-016

例子7 求解含積分的方程:

    取Ф0=45.03,c=0.2277,z1=2100, z2=2730, z3=0;求z4?

    Forcal代碼:

!using["fcopt","IMSL"];
mvar:
Ф0=45.03, c=0.2277, z1=2100, z2=2730, z3=0;
fun(x)=1-Ф0*exp(-c*x);
f(z4)=QDAGS[HFor("fun"),z3,z4,0,1e-6,0]-QDAGS[HFor("fun"),z1,z2,0,1e-6,0];
isolve[HFor("f")];

    結果:

-6.320928620456309 0.
827.7602108036891  0.
2.


版權所有© Forcal程序設計 2002-2011,保留所有權利
E-mail: [email protected]
  QQ:630715621
最近更新: 2011年01月30日

欧冠杯