 [BASIC HELP] CAS.fsolve problem [Solved] - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html) +--- Forum: HP Prime (/forum-5.html) +--- Thread: [BASIC HELP] CAS.fsolve problem [Solved] (/thread-12664.html) [BASIC HELP] CAS.fsolve problem [Solved] - Ziz - 03-22-2019 01:17 PM Hello, I'm trying to do a little program to solve an equation but the fsolve returns an error. Pws(T) BEGIN T:=T+273.15; LOCAL C1,C2,C3,C4,C5,C6,C7; LOCAL Ps,P; C1:=-5.6745359*10^3; C2 := 6.3925247*10; C3 := −9.6778430/10^(3); C4 := 6.2215701/10^(7); C5 := 2.0747825/10^(9); C6 := −9.4840240/10^(13); C7 := 4.1635019*10; Ps:=CAS.fsolve(C1/T+C2+C3*T+C4*T^2+C5*T^3+C6*T^4+C7*ln(T)=ln(P),P,1000); PRINT("Ps="+Ps); RETURN Ps; END; RE: [BASIC HELP] CAS.fsolve problem - roadrunner - 03-22-2019 04:09 PM You have to send CAS commands as a string and then EVAL the string and the variable you are solving for can't be local. Make those two changes and you get: PHP Code: `EXPORT Pws(T)BEGIN T:=T+273.15; LOCAL C1,C2,C3,C4,C5,C6,C7; LOCAL Ps; C1:=-5.6745359*10^3; C2 := 6.3925247*10; C3 := −9.6778430/10^(3); C4 := 6.2215701/10^(7); C5 := 2.0747825/10^(9); C6 := −9.4840240/10^(13); C7 := 4.1635019*10; Ps:=CAS.EVAL("fsolve(C1/T+C2+C3*T+C4*T^2+C5*T^3+C6*T^4+C7*ln(T)=ln(P),P,1000)"); PRINT("Ps="+Ps); RETURN Ps;END; ` which returns an answer. edit: Hmm, it appears you dont' have to EVAL the string because this: Ps:=CAS("fsolve(C1/T+C2+C3*T+C4*T^2+C5*T^3+C6*T^4+C7*ln(T)=ln(P),P,1000)"); also works. -road RE: [BASIC HELP] CAS.fsolve problem - Helge Gabert - 03-22-2019 04:30 PM Either that, or write it as a CAS program to begin with. I started doing the latter for most of my programs, as the back and forth CAS conversions in a regular program just became too cumbersome and error-prone. There may be a downside to that (speed? - - are CAS programs slower than Home programs?), but it sure is convenient! In your example, you could have perhaps also used FNROOT() without leaving the Home environment. RE: [BASIC HELP] CAS.fsolve problem - DrD - 03-22-2019 04:35 PM I see that Road has a workable program, and I was just about to post the same thing. The big issues are: 1. EXPORT the program. 2. T and P are RESERVED variables, so don't make a local variable P. 3. Use a string inside the CAS command. Here is what I ended up with: Pws(5) ==> 3.45704603787ᴇ119 Code: ``` EXPORT Pws(T) BEGIN   LOCAL C1,C2,C3,C4,C5,C6,C7;   LOCAL Ps;  //  Omitted Var P, as it is a reserved variable   T:=T+273.15;  // T is reserved variable also   C1:=-5.6745359*10^3;   C2 := 6.3925247*10;   C3 := −9.6778430/10^(3);   C4 := 6.2215701/10^(7);   C5 := 2.0747825/10^(9);   C6 := −9.4840240/10^(13);   C7 := 4.1635019*10;   Ps:=CAS.fsolve("C1/T+C2+C3*T+C4*T^2+C5*T^3+C6*T^4+C7*ln(T)=ln(P),P,1000"); // Note:  Usage of double quotes in CAS command // PRINT("Ps="+Ps);   RETURN Ps; END;``` RE: [BASIC HELP] CAS.fsolve problem - Ziz - 03-23-2019 08:04 PM Thank you! This clarifies the things. (03-22-2019 04:35 PM)DrD Wrote:  I see that Road has a workable program, and I was just about to post the same thing. The big issues are: 1. EXPORT the program. 2. T and P are RESERVED variables, so don't make a local variable P. 3. Use a string inside the CAS command. Here is what I ended up with: Pws(5) ==> 3.45704603787ᴇ119 Code: ``` EXPORT Pws(T) BEGIN   LOCAL C1,C2,C3,C4,C5,C6,C7;   LOCAL Ps;  //  Omitted Var P, as it is a reserved variable   T:=T+273.15;  // T is reserved variable also   C1:=-5.6745359*10^3;   C2 := 6.3925247*10;   C3 := −9.6778430/10^(3);   C4 := 6.2215701/10^(7);   C5 := 2.0747825/10^(9);   C6 := −9.4840240/10^(13);   C7 := 4.1635019*10;   Ps:=CAS.fsolve("C1/T+C2+C3*T+C4*T^2+C5*T^3+C6*T^4+C7*ln(T)=ln(P),P,1000"); // Note:  Usage of double quotes in CAS command // PRINT("Ps="+Ps);   RETURN Ps; END;``` RE: [BASIC HELP] CAS.fsolve problem - Ziz - 03-23-2019 08:08 PM Thank you! You solved my problem. I spent some time trying to make the code work. (03-22-2019 04:09 PM)roadrunner Wrote:  You have to send CAS commands as a string and then EVAL the string and the variable you are solving for can't be local. Make those two changes and you get: PHP Code: `EXPORT Pws(T)BEGIN T:=T+273.15; LOCAL C1,C2,C3,C4,C5,C6,C7; LOCAL Ps; C1:=-5.6745359*10^3; C2 := 6.3925247*10; C3 := −9.6778430/10^(3); C4 := 6.2215701/10^(7); C5 := 2.0747825/10^(9); C6 := −9.4840240/10^(13); C7 := 4.1635019*10; Ps:=CAS.EVAL("fsolve(C1/T+C2+C3*T+C4*T^2+C5*T^3+C6*T^4+C7*ln(T)=ln(P),P,1000)"); PRINT("Ps="+Ps); RETURN Ps;END; ` which returns an answer. edit: Hmm, it appears you dont' have to EVAL the string because this: Ps:=CAS("fsolve(C1/T+C2+C3*T+C4*T^2+C5*T^3+C6*T^4+C7*ln(T)=ln(P),P,1000)"); also works. -road