Forum Konstruktor budowlany Strona Główna Konstruktor budowlany
Forum projektantów
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Python dla inżynierów

 
Napisz nowy temat   Odpowiedz do tematu    Forum Konstruktor budowlany Strona Główna -> Programowanie
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
vz
Doświadczony Forumowicz



Dołączył: 20 Lip 2009
Posty: 100
Przeczytał: 58 tematów

Pomógł: 4 razy
Ostrzeżeń: 0/5

PostWysłany: Wto 22:42, 26 Wrz 2017    Temat postu: Python dla inżynierów

Witam. Chciałem zachęcić Kolegów i Koleżanki do nauki programowania w Pythonie Smile

Przygotowuję cykl postów Python dla inżynierów na blogu [link widoczny dla zalogowanych] , gdzie będę krok po kroku pokazywać jak programować w Pythonie i jak wykorzystać go w projektowaniu konstrukcji.

Python to bardzo popularny, łatwy i wydajny język programowania, który pozwala szybko tworzyć kod i wykonywać obliczenia. Sam używam go na co dzień od kilku lat. Świetnie się sprawdza w sytuacjach nietypowych, kiedy mam policzyć coś, czego nie da się załatwić komercyjnymi softami.

Dziś pokażę Wam jak się zabrać za programowanie w Pythonie i jak wykonać pierwsze działania na liczbach. Zapraszam!
LEKCJA 1 ➡️ [link widoczny dla zalogowanych]


Post został pochwalony 0 razy

Ostatnio zmieniony przez vz dnia Pią 12:10, 27 Paź 2017, w całości zmieniany 3 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
lukaszlab
Doświadczony Forumowicz



Dołączył: 15 Maj 2006
Posty: 185
Przeczytał: 21 tematów

Pomógł: 6 razy
Ostrzeżeń: 0/5
Skąd: Kraków

PostWysłany: Pon 12:35, 16 Paź 2017    Temat postu:

Twój przykład z bloga byłby bardziej inżynierski i zachęcający gdybyś obliczenia wykonał w jednostkach SI
Przykładowo używając paczki Unum
Kod:

import unum.units as u
# Dane
fck = 30E6*u.Pa
# Obliczenia wg EC2
fcm = fck + 8E6*u.Pa # Średnia wytrzymałość betonu na ściskanie
Ecm = 22 * (0.1 * fcm / (1E6*u.Pa))**0.3 * 1E6*u.Pa # Sieczny moduł sprężystości betonu
# Wynik
print (Ecm)

lub definiując dodatkowo MPa którego domyślnie brak w Unum
Kod:

import unum.units as u
from unum import Unum as _Unum
u.MPa = _Unum.unit('MPa', 1E6 * u.Pa) # [MPa] unit definition
# Dane
fck = 30*u.MPa
# Obliczenia wg EC2
fcm = fck + 8*u.MPa # Średnia wytrzymałość betonu na ściskanie
Ecm = 22 * (0.1 * fcm / u.MPa)**0.3 * u.MPa # Sieczny moduł sprężystości betonu
# Wynik
print (Ecm)

Dokumentacja Unum
[link widoczny dla zalogowanych]
[link widoczny dla zalogowanych]
instalacja
Kod:
pip install unum

Komplet potrzebnych jednostek najlepiej zdefiniować sobie w oddzielnym module
[link widoczny dla zalogowanych]
i używać przez importowanie
[link widoczny dla zalogowanych]

Piszę to gdyż widzę, że w kursie przechodzisz do stringów i ktoś może pomyśleć, że to tak bezwymiarowo będzie wyglądać to inżynierskie obliczanie w Pythonie.


Post został pochwalony 0 razy

Ostatnio zmieniony przez lukaszlab dnia Pon 12:36, 16 Paź 2017, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
adam_47
Doświadczony Forumowicz



Dołączył: 05 Cze 2010
Posty: 746
Przeczytał: 13 tematów

Pomógł: 16 razy
Ostrzeżeń: 0/5

PostWysłany: Pon 22:56, 16 Paź 2017    Temat postu:

Proponuję poświęcić trochę więcej tekstu na sposoby zainstalowania samego środowiska programistycznego i możliwości uruchamiania kodu. I to tak "krok po kroku".

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
vz
Doświadczony Forumowicz



Dołączył: 20 Lip 2009
Posty: 100
Przeczytał: 58 tematów

Pomógł: 4 razy
Ostrzeżeń: 0/5

PostWysłany: Wto 12:22, 17 Paź 2017    Temat postu:

@lukaszlab dzięki za uwagi!
Jak pewnie czytałeś w opisie przykładu jest to pierwszy wprowadzający przykład, który ma odpowiadać temu, co pokazałem w lekcji. Siłą rzeczy, żeby przykład był czytelny, musi być prosty dla poznających Pythona.

Paczkę Unum mogę oczywiście wrzucić i wiele innych też, ale nie o to tutaj chodzi. Pisałem w poście, że o dodatkowych modułach, funkcjach etc. będę pisać w następnych lekcjach. Racja, powinienem to może wyraźniej zaznaczyć w przykładzie (info, że pracę na jednostkach pokażę później).

Jeśli chodzi o pracę na jednostkach SI, to mam też inne podjeście - w mojej ocenie bardziej efektywne i prostsze (specyfika obliczeń statycznych w bud.), ale o tym później Wink

Co do pracy na osobnych modułach (jednostki tam, obliczenia tu itp.) to się z Tobą zgadzam w 100%. Jest to chyba najlepsze podejście, żeby ogarnąć kod. Też będę to pokazywać w następnych wpisach.

---

@adam_47 Dzięki za feedback!
Widziałeś instrukcje instalacji Pythona i edytora kodu (Sublime) na początku wpisu (akapit "Uruchamianie i obsługa Pythona")? Za mało dokładne PDFy? Myślałem, że pokazałem krok po kroku co i jak.


Post został pochwalony 0 razy

Ostatnio zmieniony przez vz dnia Wto 12:29, 17 Paź 2017, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
adam_47
Doświadczony Forumowicz



Dołączył: 05 Cze 2010
Posty: 746
Przeczytał: 13 tematów

Pomógł: 16 razy
Ostrzeżeń: 0/5

PostWysłany: Wto 18:11, 17 Paź 2017    Temat postu:

Przepraszam, nie zauważyłem. Masz rację - wystarczająco dokładnie.

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
vz
Doświadczony Forumowicz



Dołączył: 20 Lip 2009
Posty: 100
Przeczytał: 58 tematów

Pomógł: 4 razy
Ostrzeżeń: 0/5

PostWysłany: Pon 8:25, 23 Paź 2017    Temat postu:

Zapraszam do drugiej lekcji "Python dla inżynierów". W tej lekcji nauczysz się jak tworzyć w Pythonie napisy i operować na nich.
Aby wykorzystać w projekcie stworzone przez Ciebie algorytmy obliczeniowe w Pythonie, potrzebujesz odpowiednio sformatowanego tekstu, który będziesz mógł dowolnie zmieniać i następnie wklejać tam gdzie chcesz. Nauczę Cię jak radzić sobie z napisami w Pythonie, ponieważ jest to bardzo przydatne! Nauczę Cię też jak tworzyć własne raporty obliczeniowe do wykorzystania bezpośrednio w Twoich obliczeniach statycznych.

Zapraszam! LEKCJA 2 ➡ [link widoczny dla zalogowanych]


Post został pochwalony 0 razy

Ostatnio zmieniony przez vz dnia Pią 12:10, 27 Paź 2017, w całości zmieniany 2 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
lukaszlab
Doświadczony Forumowicz



Dołączył: 15 Maj 2006
Posty: 185
Przeczytał: 21 tematów

Pomógł: 6 razy
Ostrzeżeń: 0/5
Skąd: Kraków

PostWysłany: Pon 11:07, 23 Paź 2017    Temat postu:

@vz
Napisałeś w kursie - 'Metoda jest prosta i pozwala na radzenie sobie z problemami, których nie możesz ogarnąć typowym oprogramowaniem'. Niestety nie wygląda to tak kolorowo i tu pomimo wszystkich zalet tego języka, zaczyna się problem z praktycznym użyciem Pythona przez przeciętnego inżyniera nie będącego zaciętym programistą (dotyczy to też innych języków). Do tworzenia tego raportu użyłeś dość siermiężnej metody przez co nie jest ona prosta i efektywna - np. brak wzorów z których pochodzą wyniki (nie chodzi mi o ich przekopiowanie do print). Normalnie inżynierowie zwykli 'ogarniać' takie obliczenia używając np. Excel czy darmowego Smath i przedstawione podejście raczej nie jest realną alternatywą.
W związku z tym, iż w twoim kursie przyjdzie nam poczekać chwilę zanim przedstawisz bardziej praktyczne know how, wspomnę czytającym ten wątek o takich narzędziach do generowania dynamicznych raportów jak Jupyter, SageMath czy SeePy. W szczególności polecam wypróbować narzędzie SeePy mojego autorstwa które znakomicie rozwiązuje powyższy problem.
[link widoczny dla zalogowanych]


Post został pochwalony 0 razy

Ostatnio zmieniony przez lukaszlab dnia Pon 11:47, 23 Paź 2017, w całości zmieniany 3 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
vz
Doświadczony Forumowicz



Dołączył: 20 Lip 2009
Posty: 100
Przeczytał: 58 tematów

Pomógł: 4 razy
Ostrzeżeń: 0/5

PostWysłany: Pon 20:54, 23 Paź 2017    Temat postu:

@lukaszlab dziękuję za krytyczne uwagi! Widzę, że czekasz niecierpliwie na dalsze lekcje Wink
Lekcje te są przeznaczone dla określonej grupy odbiorców (patrz lekcja 1 - wprowadzenie), więc materiał podaję tak, żeby był dla nich jak najbardziej przystępny.

W ogóle, to ciekawy dylemat w tworzeniu kursów - są tacy, którzy chcą sobie powtórzyć materiał i chcieliby od razu wszystkie kwiatki Pythona zobaczyć, ale są i tacy, którzy jednak potrzebują zobaczyć metodą krok po kroku jak pracować z Pythonem. Wszystkim nie dogodzę Wink Cieszę się jednak z pozytywnego feedbacku również od osób dla których robię ten kurs.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
ZbyszekM
Aktywny Forumowicz



Dołączył: 11 Sie 2011
Posty: 40
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Maków Mazowiecki

PostWysłany: Sob 17:51, 28 Paź 2017    Temat postu:

... są też tacy którzy szukali szkoleń lub korepetycji z LISP-a i nie znaleźli.
Patrz ja Wink

Twój kurs będę obserwował i mam nadzieję się czegoś nauczyć Very Happy


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
vz
Doświadczony Forumowicz



Dołączył: 20 Lip 2009
Posty: 100
Przeczytał: 58 tematów

Pomógł: 4 razy
Ostrzeżeń: 0/5

PostWysłany: Sob 20:51, 28 Paź 2017    Temat postu:

ZbyszekM napisał:
... są też tacy którzy szukali szkoleń lub korepetycji z LISP-a i nie znaleźli.
Patrz ja Wink

Twój kurs będę obserwował i mam nadzieję się czegoś nauczyć Very Happy

Dzięki wielkie ZbyszekM! To mnie dodatkowo motywuje do pracy Smile


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
lukaszlab
Doświadczony Forumowicz



Dołączył: 15 Maj 2006
Posty: 185
Przeczytał: 21 tematów

Pomógł: 6 razy
Ostrzeżeń: 0/5
Skąd: Kraków

PostWysłany: Nie 0:16, 29 Paź 2017    Temat postu:

Wracając jeszcze do sposobu tworzenia tego raportu. Poniżej alternatywne zgrabniejsze i bardziej czytelne rozwiązanie z wykorzystaniem vars() do formatowania wielowierszowego stringu.

Kod:

# -----------------------------------------------------------
# DANE
# -----------------------------------------------------------
b = 0.2                 # Szerokość przekroju w [m]
h = 0.6                 # Wysokość przekroju w [m]
N = 100                 # Siła podłużna w [kN], (+) rozciąganie / (-) ściskanie
My = 25                 # Moment zginający w [kNm], (+) rozciąganie włókien dolnych / (-) rozciąganie włókien górnych
# -----------------------------------------------------------
# OBLICZENIA
# -----------------------------------------------------------
A = b*h                 # Pole powierzchni
Iy = b * h**3 / 12      # Moment bezwładności

z = h/2                 # Współrzędna względem środka ciężkości
Wy = Iy / z             # Wskaźnik wytrzymałości

sigY_gora = (N/A) - (My*z/Iy)
sigY_dol = (N/A) + (My*z/Iy)
sigY_srodek = (N/A)
#------------------TWORZENIE RAPORTU------------

raport = '''
------------------------------------------------
Dane:
------------------------------------------------
   Wymiary przekrou b = %(b).2f m, h = %(h).2f m
   Obciązęnia -  N = = %(N).2f kN, My =%(My).2f kNm
------------------------------------------------
Otrzymane wyniki:
------------------------------------------------
   Napreżenie:
      dolne %(sigY_dol).2f
      górne %(sigY_gora).2f
      środkowe %(sigY_srodek).2f
      itd....
---------------KONIEC---------------------------
'''%vars()

print (raport)


co daje na wyjściu

Kod:

------------------------------------------------
Dane:
------------------------------------------------
   Wymiary przekrou b = 0.20 m, h = 0.60 m
   Obciązęnia -  N = = 100.00 kN, My =25.00 kNm
------------------------------------------------
Otrzymane wyniki:
------------------------------------------------
   Napreżenie:
      dolne 2916.67
      górne -1250.00
      środkowe 833.33
      itd....
---------------KONIEC---------------------------


Czyli zamiast fundować inżynierowi ten horror:
Kod:

line = 60
sep = '-'

print(line*sep)
print('DANE')
print(line*sep)
print('  Przekrój prostokątny: %s = %.2f m/%.2f m' % ('b/h'.rjust(7), b, h))
print('  Wskaźnik wytrzymałości: %s = %.3E m3' % ('Wy'.rjust(5), Wy))
print('')
print(line*sep)
print('WYNIKI OBLICZEŃ')
print(line*sep)
print('  Naprężenia normalne: %s = %+.2f MPa %s' % ('sig.g'.rjust(8), sigY_gora / 1000, '(włókna górne)'.rjust(15)))
print('%s = %+.2f MPa %s' % ('sig.0'.rjust(31), sigY_srodek / 1000, '(oś obojętna)'.rjust(15)))
print('%s = %+.2f MPa %s' % ('sig.d'.rjust(31), sigY_dol / 1000, '(włókna dolne)'.rjust(15)))


mamy nieco już intuicyjne:

Kod:

raport = '''
------------------------------------------------
Dane:
------------------------------------------------
   Wymiary przekrou b = %(b).2f m, h = %(h).2f m
   Obciązęnia -  N = = %(N).2f kN, My =%(My).2f kNm
------------------------------------------------
Otrzymane wyniki:
------------------------------------------------
   Napreżenie:
      dolne %(sigY_dol).2f
      górne %(sigY_gora).2f
      środkowe %(sigY_srodek).2f
      itd....
---------------KONIEC---------------------------
'''%vars()

print (raport)


Post został pochwalony 0 razy

Ostatnio zmieniony przez lukaszlab dnia Nie 0:52, 29 Paź 2017, w całości zmieniany 6 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Konstruktor budowlany Strona Główna -> Programowanie Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin