• Register

Samodejni izpis

+2 votes
169 views

Spisal sem modul za izračun sil, ki pa ne deluje povsem. Težava se pojavi pri izpisu rešitev. 
Kodo napake sem poguglal vendar nisem našel nič pametnega.

Morda kdo ve kako bi spremenil zadnji del modula, da bi samodejno izpisal rešitve? Če jih izpišem ročno, se rešitve izpišejo.  

 

asked Dec 29, 2015 by JanJ (2,580 points)
retagged Dec 29, 2015 by Marko Mihalec

1 Answer

+1 vote
Napaka se pojavi že prej.

"smerx" naj bi bila reakcija v smeri x. To naj bi bila zolj ena sama (float) številka. V vašem primeru pa smerx vrne dolg array različnih števil.

Za začetek je torej treba popraviti kodo tako, da bomo v format vnesli zgolj eno samo število in ne celotnega array-a.
answered Dec 29, 2015 by Marko Mihalec (8,700 points)
V bistvu želim, da smerx vrne array različnih vrednosti, saj se ta vrednost spreminja (ena izmed točk na vrvi se spreminja) in s tem se spreminjajo vrednosti reakcij v sistemu.

Prilagam še kodo:
import numpy as np
np.seterr(divide='ignore', invalid='ignore')

def resi(podatki={'F1': 100, 'F2': 150, 'F3': 100, 'l': 8, 'h': 5}):
    """
    Preračuna reakcije v podporah in sile v vrvi
    
    :param podatki: Slovar potrebnih spremenljivk.
                    Potrebujemo: F1 [kp], F2 [kp], F3 [kp], l [m], h [m].
    :return:        Vrne rešitve naloge
    """
    
    F1 = podatki['F1']
    F2 = podatki['F2']
    F3 = podatki['F3']
    l = podatki['l']
    h = podatki['h']
    L1 = np.linspace(-8, 8, 32)
    h1 = np.linspace(-0.5, 0.5, 32)             
    
    t = (h*F3*L1 -F1*l -F2*(l+L1) -F3*3*l)/(h*(L1 +l) -4*l)
    smerx = (-F1*l -F2*(L1+l) -F3*3*l + t*4*l)/h
    smerEy = (F3*L1 + smerx*(h -h1))/(L1 +l)
    smerAy = (F1 +F2 +F3 -smerEy)
    silavrvie = np.sqrt((smerx)**2 + (smerEy)**2)
    silavrvia = np.sqrt((smerx)**2 + (smerAy)**2)
    return dict([(['Ex', smerx]), (['Ay', smerAy]), (['Ey', smerEy]), (['SmaxA', silavrvia]), (['SmaxE', silavrvie])])

if __name__ == '__main__':
    resitve = [resi()]
    
    smerx = resitve['Ex']
    smerAy = resitve['Ay']
    smerEy = resitve['Ey']    
    silavrvia = resitve['SmaxA']
    silavrvie = resitve['SmaxE']
    
    print('Reakcija v smeri x znaša:'(smerx))
    print('Reakcija y v točki A znaša: {:g} kp.'.format(smerAy))
    print('Reakcija y v točki E znaša: {:g} kp.'.format(smerEy))
    print('Sila v vrvi AB znaša: {:g} kp'.format(silavrvia))
    print('Sila v vrvi ED znaša: {:g} kp'.format(silavrvie))
seveda je "smerx" lahko array, vendar pa v tem primeru ne morete enostavno printati celotnega array-a, saj tudi rezultate nebi bili pregledni.
Predlagam, da v enem koraku izpišete zgolj eno vrednost iz posameznega arraya. V kolikor jih želite izpisati več, razmislite morda o uporabi kakšne for zanke.
...