Ich versuche, die Inverse der GLog-Funktion zu erhalten. Gibt es eine Möglichkeit, die Formel dafür zu exportieren?
Hier ist ein kleines Skript, das erstellt, dass einen nicht transformierten Wert aus einer gespeicherten transformierten Formel zurückgibt. Sagen Sie mir, ob Sie das für nützlich halten
Names Default to Here( 1 );
dt=open("$SAMPLE_DATA\semiconductor Capability.jmp");
Dis =dt << Distribution(invisible,
Continuous Distribution(
Column( :NPN1 ),
Fit Distribution(
GLog(
Spec Limits(
LSL( 104.412948990151 ),
USL( 131.893493064355 ),
Target( 118.153221027253 )
)
)
)
),
SendToReport(
Dispatch(
{"NPN1"},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 4 ), {Font( "Arial Unicode MS", 9, "Plain" )} ),
DispatchSeg( LabelSeg( 5 ), {Font( "Arial Unicode MS", 9, "Plain" )} ),
DispatchSeg( LabelSeg( 6 ), {Font( "Arial Unicode MS", 9, "Plain" )} )}
)
)
);
Dis<< Fit Distribution( GLog( Save Transformed ) );
Dis << Delete Window;
Wait(0);
RawFormula = "";
RawFormula = char(column(N Cols(dt))<<GET formula=""> 0,
While( Contains( TheFormula, ColonColName ) > 0, TheFormula = Munger( TheFormula, 1, ColonColName, "(__Value__)" ) ),
Dialog(
" The column specified as",
"the Transformed Column does",
" not contain a reference",
" to the original column.",
" in it's formula.",
" ",
" Please rerun and select",
" the correct column"
);
Throw();
);
TheFormula;
);
/***********************************************************************/
/* */
/* The gettrans function evaluates the formula in the transformed */
/* and converts the formula into a generic form for repeated use in */
/* running of the script. */
/* */
/***********************************************************************/
gettrans = Function( { ColName,RawFormula,TheTarget},
{TheFormula, High, Low, TheTarget, TheMax, Themin, __value__},
TheFormula = getformula(ColName,RawFormula);
// The program uses successive approximations to determine the different
// parametrics. The way it works is that it calculates the needed parameter
// such as Mean, or Standard Deviation, and then by using successive
// approximations from the original column's values, and passing those
// values through the columns formula, when the approximation value matches
// the calculated value from the transformed column, the retransformed value
// has been found
// Set the extreem valuesH
High = 999999999999999999999999;
Low = -999999999999999999999999;
// Check to see if negative values fail
__value__= -1;
if(isMissing(try(eval(parse(theformula)),.))==1,Low=0;);
// Make a guess at the first value
__value__ = Mean( High, Low );
// Iterate the guessing for up to 100 times, adjusting by 1/2 on each loop
For( i = 1, i <= 100, i++,
TheResult = Eval( Parse( theformula ) );
If(
TheResult > TheTarget, High = __value__,
TheResult < TheTarget, Low = __value__,
Break()
);
If( High == Low, Break() );
__value__ = Mean( High, Low );
);
__value__; // Expose the return value
); // End of function gettrans
trans=gettrans(ColName,rawformula,Target);
show(column(dt,ColName)[1],trans);</GET>Ich bin mir dessen nicht bewusst. Was ich in der Vergangenheit verwendet habe, ist ein kleines Stück JSL, das eine B-Baum-Suche verwendet, um genaue Annäherungen vorzunehmen, um das Ergebnis zu bestimmen.