2017-10-02 11 views
0

파생 함수가 0 인 함수의 값을 찾고 싶습니다.심장 함수 diff가 0과 같습니다.

function val = Heart(x1, x2) 
    val=(1.25*x2-sqrt(abs(x1))).^2+x1.^2-1; 
endfunction; 

나는 numderivative 기능을 사용해 보았습니다. Gracias.

답변

1

Heart()은 암시 적 함수이기 때문에 Scilab은 함수가 현재 정의 된 방식으로이 문제를 해결할 수 없습니다. here으로 답변 한 바와 같이 Scilab은 암시 적 차별화를 수행 할 수 없습니다. 또한 방정식은 실제로 3D 표면을 정의하므로 실제로 계산할 수있는 것은 부분 파생 값입니다. 당신이 암시 곡선 0=Heart(x1,x2)x1 관련 파생 상품이 제로되는 x1 값을 찾으려면

, 당신은이 문제를 해결하기 위해 자신의 이전 질문에서 this answer에서 제시 한 방법을 사용할 수 있습니다.

심장 곡선의 플롯을 검사하면 파생 변수가 0 인 두 개의 점 (최대 값 2 개)이 있습니다. 곡선의 상단 부분에 있으며 x1=-0.6x1=0.6 근처에 있으며, 각기. 이러한 점을 더 대략적인 값을 찾으려면 다음을 수행해야합니다

  1. 는 (그것을 찾기 위해 사용 Wolfram|Alpha) 새로운 함수를 정의 심장의 위쪽 부분을 가져 가라.
  2. numderivative()을 사용하여 그 미분을 정의하십시오 (d_heart()). 우리가 찾고있는 대답은이 함수의 0입니다.
  3. 0=d_heart(x1)을 푸는 데 fsolve()을 사용하십시오. 두 가지 추측을 입력해야하며 -0.6과 0.6이 될 수 있습니다. 이 같은

뭔가 :

function y = heart_up(x1) 
    y = 4/5 * (sqrt(abs(x1))+sqrt(1-x1.^2)) 
endfunction 

function y = d_heart(x1) 
    y = numderivative(heart_up, x1); 
endfunction 

x1 = fsolve(-0.6, d_heart); y1 = heart_up(x1); 
x2 = fsolve(0.6, d_heart); y2 = heart_up(x2); 

당신은 heart_up() 것을 시각화 할 수 있습니다 정말 마음의 상단 부분이며, 그 결과를 플롯으로 바로 것을 :

x = -1:0.01:1; 
contour2d(x, 2*x, Heart, [0 0]); 
plot2d(x, heart_up(x), 2); 
plot2d([x1 x2], [y1 y2], -2); 

4

0

이 스크립트를 단축 (개선) 할 수 있습니까? 나는 Jacobian Heart 함수를 생각하고 그것을 평가하고 그것이 0 인 점을 찾는다. 약간의 타는 것! !! luispauloml의 지시에 따라

:

[function val = Heart(x1, x2) 
    val=(1.25*x2-sqrt(abs(x1))).^2+x1.^2-1; 
endfunction; 


function y = heart_up(x1) 
    y = 4/5 * (sqrt(abs(x1))+sqrt(1-x1.^2)) 
endfunction 
function y = heart_down(x1) 
    y = 4/5 * (sqrt(abs(x1))-sqrt(1-x1.^2)) 
endfunction 

function y = du_heart(x1) 
    y = numderivative(heart_up, x1); 
endfunction 
function y = dd_heart(x1) 
    y = numderivative(heart_down, x1); 
endfunction 

x1 = fsolve(-0.6, du_heart); y1 = heart_up(x1);disp(y1,"y1",x1,"x1"); 
x2 = fsolve(0.6, du_heart); y2 = heart_up(x2);disp(y2,"y2",x2,"x2"); 
x3 = fsolve(0.0, du_heart); y3 = heart_up(x3);disp(y3,"y3",x3,"x3"); 
x4 = fsolve(0.0, dd_heart); y4 = heart_down(x4);disp(y4,"y4",x4,"x4"); 

x = -1:0.01:1; 
contour2d(x, 2*x, Heart, \[0 0\]); 
plot(\[x1 x2\],\[y1 y2\],'gd'); 
plot(\[x3 x4\],\[y3 y4\],'rx'); 
replot(\[-1.415,-1,1.415,1.415\]);][1] 

또 다른 가능한 해결책은 다음과 같습니다 이 기능으로 우리는 Scilab 자신을 숙지하기 시작했다. 내가 제안한 스크립트에서 심장 기능의 중대한 또는 극한 점을 발견했습니다. 의견을 읽으면서주의를 환기시킵니다 !!!!

function val = Hxyg(x,y) 
    val=(1.25*y-sqrt(abs(x))).^2+x.^2-1; 
endfunction; 
x = -1:0.01:1; 
contour2d(x, 2*x, Hxyg, [0 0]); 
replot([-1.415,-1,1.415,1.415]); 

//We define the Hxy function with x as additional input argument(as a parameter) 
//Since y, will be our unknown, we have interposed x and y in the argument list of the Hxy function 
//(y it is the unknown and x is the parameter). 
//This will be necessary to determine the intersects on the Y axis 
function val = Hxy(y,x) 
    val=(1.25*y-sqrt(abs(x))).^2+x.^2-1; // switched .^ to^to handle vectors 
endfunction; 
function [val] = HH(v)//v:(y,x) 
    x=v(2); 
    y=v(1); 
    val=Hxy(y,x); 
endfunction; 

function Jpx=dfx(v)//v:(y,x) 
Jpx=numderivative(HH,v); 
Jpx=Jpx(2); 
endfunction 

//Find the local maxima. 
function Z = flm(v)//v:(y,x) 
    Z = [ HH(v) 
     dfx(v) 
     ] 
endfunction 
//v:(y,x) 
xlm1=fsolve([1.4;-0.4],flm) 
disp(xlm1) 
xlm2=fsolve([1.4;0.4],flm) 
disp(xlm2) 
plot([xlm1(2) xlm2(2)],[xlm1(1) xlm2(1)],'gx') 

//Find the y-intercepts. Hxy(y,x) 
//the Hxy function uses x as a parameters. 
//We define the Hxy function with x as additional input argument(as a parameter), 
//which is declared after the y unknown. Then we pass a list as the second input argument 
//of the fsolve function after initial value of Hxy function argument; in this situation only variable y. 
//The first element of the list is the Hxy function. The additional variable x is directly passed to the Hxy function. 
x=0.0; 
yint1=fsolve(1,list(Hxy,x))// --->Hxy(y,x)=>1.5625*y^2-1 
disp(yint1) 
yint2=fsolve(-1,list(Hxy,x))// ---> Hxy(y,x)=>1.5625*y^2-1 
disp(yint2) 
plot([x x],[yint1 yint2],'rx') 

Heart Critical points or extreme points