Thank you for getting back to me so quickly!
I am actually excited about this program, but it seems like I will need to 
learn a thing or two about numerical analysis.
Our class is supposed to use TK Solver, and it seems to work OK. However, I 
really didn't understand how it worked, or why I was getting the bugs I 
had. 
In addition, TK is only a numerical solver. As far as I can tell it will 
NOT present an answer as a function of other variables.

I feel like in the long the run, developing and building my own suite (and 
hopefully sharing) of functions would save me a lot of time in the future, 
especially if I plan on doing engineering design work.

I attached a revised version of the solver.py file, and the input file.
Everything works perfectly. I have 32 linear functions, 4 non-linear 
functions and 36 unknown variables. It takes my program about 1.1s to run 
and solve.

I would like to add the following equations to the file 
"P5-9-Reactions.txt":

Na = Sy/Sa
Nb = Sy/Sb
Nc = Sy/Sc
Nd = Sy/Sd
Sy = 400*10^6
Sa^2 = 3*T14^2
Sb^2 = 3*T12^2
Sc^2 = 3*T43^2
Sd^2 = 3*T32^2
T14 = F14/A
T12 = F12/A
T43 = F43/A
T32 = F32/A
A = pi*d^2/4
d = .008


It seems to me that system is still determinant, with 51 unknowns and 51 
equations.
However, as far as I can tell, the system hangs/runs indefinitely. 
Because sympy is capable of delivering symbolic answers, I don't mind a 
long execution time, as long as it is actually converging onto a solution, 
not just running off to infinity...
That being said, I do not understand the underpinnings of a numerical 
solver, much less a symbolic run. In a class I am taking online we have 
gone over linear gradient descent and thats about all I know  about the 
subject - besides just doing symbolic analysis by hand.

Any ideas on how I can get this to solve? I have grown attached to sympy, 
numpy, and matplotlib. I think they are very powerful, and I would like to 
see more tools become free and open source :P

On Thursday, June 11, 2015 at 12:05:11 PM UTC-7, Ondřej Čertík wrote:
>
> Hi Brett, 
>
> On Thu, Jun 11, 2015 at 12:26 PM, Brett Smith <[email protected] 
> <javascript:>> wrote: 
> > Hello All, 
> > New to the forum, but I have used Sympy on a few projects in the past. 
> > I am currently enrolled in a machine design course, and often times we 
> have 
> > to solve large systems of equations. 
> > I do not really like how any of the solver we use in class work, so I 
> > thought I'd right my own. 
> > If it works well enough Id like to add a GUI front end and incorporate 
> > commonly used engineering functions. 
> > I have had success compiling systems of linear equations up to about 40 
> > equations & 40 unknowns. 
> > However adding any non-linear equations seems to break its back... 
>
> Can you post the file P5-9-FOS.txt, so that we can run solver.py? 
>
> Is anything else needed to run it? 
>
> What kind of equations are those? It seems these are numerical 
> equations, but they are non linear, is that right? What solvers do you 
> use in class? 
>
> Ondrej 
>
> > 
> > I was wondering if anybody here had a better way of going about this 
> > project. 
> > Right now it just reads a text file full of equations, parses the 
> strings 
> > into sympy Functions, and then runs sympy.solve, and prints the solution 
> to 
> > a new file. 
> > 
> > So currently operations looks like: 
> > 
> > import solver 
> > eqn = [] #holds all functions in file 
> > symb = [] #holds unique symbols 
> > sln = []  #holds all solution sets 
> > og  = [] #holds original, unparsed functions for printing to output file 
> > in_file = "problem_file.txt" 
> > out_file = "solution_file.txt" 
> > 
> > eqn , og = solver.parse_input(in_file) 
> > symb = solver.sort_symbols(eqn) 
> > sln = solver.solver(eqn) 
> > print_output(out_file,sln,og) 
> > 
> > Ill post the code below for easy reading, but I'll also attach a few 
> demo 
> > files. 
> > Any ideas on how to make this more powerful (i.e. more equations, or 
> more 
> > non-linear equations)??? 
> > Running this in my sublime editor a couple times also slows my whole 
> system 
> > WAY down from time to time (Ubuntu 14.04) 
> > Thanks Gang!! 
> > 
> > 
> > 
> > from sympy import * 
> > from sympy.parsing.sympy_parser import parse_expr 
> > from IPython.display import display_pretty 
> > import string 
> > import time 
> > import os 
> > 
> > init_printing(use_latex = True) 
> > 
> > #Vars 
> > sig_figs = 6 
> > 
> > 
> > def sort_symbols(_functions): #Returns unique Sympy sybols from array of 
> > functions 
> > _symbols  = [] 
> > temp = [] 
> > symbol_str = [] 
> > symbols_sorted = [] 
> > 
> > for i in _functions: 
> > _symbols.append(i.atoms(Symbol)) 
> > 
> > for i in _symbols: #Puts all occurences of all symbols in 1 list 
> > temp += (set.union(i)) 
> > 
> > temp = list(set(temp))         #Eliminate duplicates 
> > 
> > for i in temp: #Convert to string so symbols may be sorted 
> >    symbol_str.append(str(i)) 
> > 
> > symbol_str = sorted(symbol_str) 
> > 
> > for i in symbol_str:   #Convert string back to sympy symbols 
> > symbols_sorted.append(parse_expr(i)) 
> > 
> > return symbols_sorted 
> > 
> > def parse_input(_file): #Converts file into array of Sympy Functions 
> > _functions = [] 
> > original_functions = [] 
> > lines = [] 
> > with open(_file,'r+') as f: 
> > lines = f.readlines() 
> > for line in lines: 
> > line = line[:-1] 
> > comment = line[0] == '#' 
> > if not comment: 
> > if "#" in line: #remove comments 
> > split = string.find(line,"#") 
> > line = line[0:split] 
> > 
> > original_functions.append(line) #Store original syntax 
> > 
> > line = string.replace(line," ","") #remove white space 
> > line = string.replace(line," ","") 
> > 
> > if "^" in line: #Convert conventional equation syntax in sympy syntax 
> > line = string.replace(line,"^","**") 
> > 
> > if "=" in line: 
> > split = string.find(line,'=') 
> > line = "Eq(" + line[0:split] + "," + line[split + 1:len(line)] + ")" 
> > temp = parse_expr(line) 
> > _functions.append(temp) 
> > return _functions, original_functions 
> > 
> > 
> > def solver(_functions): 
> > _solution = solve(_functions[0:len(_functions)],manual=True)     #Pass 
> > functions to solver #,symbols[0:len(symbols)] #passes symbols 
> > print _solution 
> > return _solution 
> > 
> > def print_output(_solutions): 
> > 
> > print "The submitted functions:" 
> > for i in original_functions: 
> > pretty_print(i) 
> > 
> > print "Have the following unique variables" 
> > for i in sort_symbols(): 
> > pretty_print(i) 
> > 
> > print "And have solutions set(s):" 
> > for i in _solutions: 
> > for u in i: 
> > print str(u) + " = " + str(Float(i[u],sig_figs)) 
> > 
> > def print_to_file(f,_solutions,_functions): 
> > ##Print File Header 
> > _file = open(f,'w+') 
> > header = "Brett's Sympy Solver!\nSolution Created : " + 
> > time.strftime("%d/%m/%Y") + "\n" 
> > _file.write(header) 
> > header = "Equation File : " + os.getcwd() + "/" + in_file + "\n\n" 
> > _file.write(header) 
> > 
> > ##Some nice underscoring 
> > max_length = 0 
> > 
> > for i in _solutions: 
> > for u in i: 
> > length = len(str(Float(i[u],sig_figs))+" = "+ str(u)) #find longest 
> equation 
> > if length > max_length: 
> > max_length = length 
> > 
> > for i in _functions: 
> > length = len(str(i)) 
> > if length > max_length: 
> > max_length = length 
> > 
> > underscore = "_" 
> > for i in range (0,(max_length-20)/2): 
> > underscore += "_" 
> > 
> > _file.write(underscore +"SOLUTIONS"+ underscore +"\n") 
> > for i in _solutions: 
> > for u in i: 
> > _file.write(str(u) + " = " + str(Float(i[u],sig_figs))+"\n") 
> > 
> > _file.write("\n" + underscore +"EQUATIONS"+ underscore +"\n") 
> > #_file.write("Compiler Assumes All Equations = 0 Unless specified\n") 
> > print len(_functions) 
> > for i in _functions: 
> > _file.write(str(i)+"\n") 
> > _file.write("\n\n\n\n") 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "sympy" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to [email protected] <javascript:>. 
> > To post to this group, send email to [email protected] 
> <javascript:>. 
> > Visit this group at http://groups.google.com/group/sympy. 
> > To view this discussion on the web visit 
> > 
> https://groups.google.com/d/msgid/sympy/89416b65-b1b1-40e4-b608-1d4a93be9a1f%40googlegroups.com.
>  
>
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/0ca6f806-1316-4903-8cc2-99732b6b9e07%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to