차수 3 다항식의 실수근여러분, 안녕하세요,
누구든지 방법을 알고 있습니까 JMP 스크립팅으로 차수 3 다항식의 실제 근을 계산하려면?
나는 가지고있다 계수 방정식: 0 = A + BX + C.X² + DX^3. 나에게 필요한 것은 진정한 해결책입니다.
원하는 값에 최대한 근접하기 위해 행이 많은 새 데이터 테이블을 만들기 시작했지만 시간이 너무 많이 걸립니다.
감사,
Re: 차수 3 다항식의 실수근내 JMP 버전에 적합한 답변을 선택했습니다.
도움을 주셔서 감사합니다!
Re: 차수 3 다항식의 실수근Minimize()와 Nonlinear 플랫폼을 모두 시도했습니다. 둘 다 다항식을 푸는 데는 잘 작동하지만 잘못된 초기 값으로 인해 하나 이상의 근을 놓치기 쉽습니다. 그래프를 보면 도움이 됩니다.
R이 설치되어 있는 경우 다음 JSL 기능을 시도할 수 있습니다.
Names Default To Here(1);
// Function calling R, returns real roots of polynomials
// Input: a matrix of coefficients [x^0 ... x^n]
realroots = Function({p},
R Init();
R Send(p);
R Submit("roots=polyroot(p); real=Re(roots[which(round(Im(roots),12)==0)])");
real = R Get(real);
R Term();
real;
);
// Try it!
p1 = [-4 0 1]; // two real roots: ±2^2=4
p2 = [-27 0 0 1]; // one real root: 3^3=27
p3 = [7 -8 4 1]; // one real root
p4 = [1 -3 1 1]; // three real roots
ex1 = realroots(p1);
ex2 = realroots(p2);
ex3 = realroots(p3);
ex4 = realroots(p4);
Show(ex1, ex2, ex3, ex4);
Re: 차수 3 다항식의 실수근(수학자가 아니라 여기에 약간의 결함이 있다고 확신합니다...) 원래 아이디어와 유사하지만 JSL이 작업을 수행하도록 합니다. 저는 Minimize가 JMP 10 이후로 약간의 개선을 보았다고 확신합니다. https://community.jmp.com/t5/JMPer-Cable/Minimize-and-Maximize-Functions-in-JSL/ba-p/36355/jump-to/first-unread-message
a = -2;
b = -3;
c = 5;
d = 1;
f = Function( {x},
a + b * x + c * x * x + d * x * x * x
);
lo = -1e99;
hi = 1e99;
vlo = f( lo );
vhi = f( hi );
v = 1;
nn=0;
While( (abs(v)>1e-15) ,
test = (lo + hi) / 2;
v = f( test );
If( v > 0,
If(
vhi > 0, hi = test,
vlo > 0, lo = test
),
If(
vhi < 0, hi = test,
vlo < 0, lo = test
)
);
);
New Window( "Example",
Graph Box(
X Scale( -10, 10 ),
Y Scale( -30, 30 ),
Pen Color( "red" );
Y Function( f(x), x );
pencolor("black");
V Line( test );
hline(0);
)
);
Found a zeroFound a zero0을 찾았습니다
^2 및 ^3 항의 계수가 너무 크면 -1e99 ~ 1e99 간격을 더 작게 만들어야 합니다.
Re: 차수 3 다항식의 실수근JMP 10 이후로 개선이 있을 수 있습니다. 허용 오차와 같은 매개변수를 실험해 볼 수 있습니다.Re: 차수 3 다항식의 실수근최소화 기능은 좋은 방법으로 보이지만 작동하게 만들 수는 없습니다.
나는 당신의 스크립트를 시도했지만 행 3에서 ( minFromLeft = 최소화 ( 이름 Expr ( 에프 ) , { 엑스 } ) ; )
다음 경고가 표시됩니다.
"최적화 실패: 실패: 목적 함수를 줄일 수 없음"
JMP 버전 10.0.0이 있습니다.
그것과 관련이 있습니까?
Re: 차수 3 다항식의 실수근Minimize() 함수가 도움이 될 수 있습니다. 0이 아닌 최소값을 찾기 때문에 0이 최소값이 되도록 3차 행렬을 변환해야 합니다.최소 함수가 도함수를 취한다고 하기 때문에 아마도 제곱이 절대값보다 더 나을 것입니다.
f = Expr( Power( -2 - 3 * x + 5 * Power( x, 2 ) + Power( x, 3 ), 2 ) );
x = -100;
minFromLeft = Minimize( Name Expr( f ), {x} );
xFromLeft = x;
x = 100;
minFromRight = Minimize( Name Expr( f ), {x} );
xFromRight = x;
show(xFromLeft, minFromLeft, xFromRight, minFromRight);
// result:
xFromLeft = -5.5995441248061;
minFromLeft = 1.07130883787516e-10;
xFromRight = 0.276987650239635;
minFromRight = 2.4771578468284;
이러한 경계를 알고 있는 경우 왼쪽과 오른쪽에서 검색하면 적어도 하나의 실수근을 찾아야 하며 문제는 2차 문제가 됩니다.
Re: 차수 3 다항식의 실수근답변해 주셔서 감사합니다.
그것은 실제로 수행하는 방법이지만 스크립트를 사용할 때마다 작동하지 않을까봐 두렵습니다. 음수의 제곱근이 그 이유입니다.
Excel에서는 할 수 있지만 JMP에서는 할 수 없으며 하나의 스크립트에 두 개의 소프트웨어를 사용하지 않는 것이 좋습니다.
누구든지 그것을하는 다른 방법이 있습니까?
Re: 차수 3 다항식의 실수근당신은 이것을 사용할 수 있습니다 공식 첫 번째 근을 얻으려면 해당 x 값을 표현식에 대입하여 다항식 차수를 2로 줄이고 2차 해를 사용하여 나머지 근을 구합니다.