HP Forums

Full Version: Programming solve function
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I am having trouble programming the SOLVE and fsolve functions, and I am not sure of what I am doing wrong. I can run solve on the HP Prime, but I can't programmatically solve the equation.
[Image: solve1.png] [9/17/19. Replaced tinypic image]

EDIT 6/4/18 corrected error in code with the radius, but still can't get code to work.
Code:
EXPORT OldAAngleSetting,theta,radius,x,q,v;

EXPORT SolveProgramExamples()
BEGIN
OldAAngleSetting:=AAngle; //save apps angle mode setting
AAngle:=1; //Switch to apps radian angle mode

// SOLVE Example ----------------------------------------
//initialize variables
X:=0;
theta:=0;
//input
V:=2;
R:=0.75;
Q:=3.1;
Solve.SOLVE(X-SIN(X)=2*Q/(V*R^2),X,3);
theta:=X;
PRINT();
PRINT("SOLVE example");
PRINT("X="+X);
PRINT("theta="+theta);

// fsolve Example ------------------------------
//initialize variables
x:=0;
theta:=0;
//input
v:=2;
radius:=0.75;
q:=3.1;
theta:=CAS("fsolve(x-SIN(x)=2*q/(v*radius^2),x=3)");
PRINT(" ");
PRINT("fsolve example");
PRINT("x="+x);
PRINT("theta="+theta);

AAngle:=OldAAngleSetting; //restore previous apps angle mode setting
END;
The value returned by SOLVE was not stored.
The CAS has a 'radius' command, so it will not be able to directly capture the exported variable of the program.

Code:
EXPORT OldAAngleSetting,theta,rads,q,v; //← x isn't necessary, radius → rads

EXPORT SolveProgramExamples()
BEGIN
OldAAngleSetting:=AAngle; //save apps angle mode setting
AAngle:=1; //Switch to apps radian angle mode

// SOLVE Example ----------------------------------------
//initialize variables
theta:=0;
//input
V:=2;
R:=0.75;
Q:=3.1;
X:=Solve.SOLVE(X-SIN(X)=2*Q/(V*R^2),X,3); //←
theta:=X;
PRINT();
PRINT("SOLVE example");
PRINT("X="+X);
PRINT("theta="+theta);

// fsolve Example ------------------------------
//initialize variables
theta:=0;
//input
v:=2;
rads:=0.75;
q:=3.1;
theta:=fsolve("x-SIN(x)=2*q/(v*rads^2),x=3"); //←
PRINT(" ");
PRINT("fsolve example");
PRINT("x="+theta); // ←
PRINT("theta="+theta);

AAngle:=OldAAngleSetting; //restore previous apps angle mode setting
END;
If you persist in using "radius", you can evade the name resolution CAS-Home by manufacturing the data in strings before sending it to the CAS, in this way it can be done for similar cases.

Code:
theta:=fsolve(EVAL("x-SIN(x)=2*q/(v*"+radius+"^2),x=3"));
Thanks. Your "fsolve" equation changes also work with the "solve" command, which is what I initially wanted to do. I used "radius" to differentiate the pipe radius from the hydraulic radius "r". Geez...
Reference URL's