Ich habe das kürzlich veröffentlichte iPad Air 4 gekauft. Der Verwendungszweck besteht hauptsächlich darin, handschriftliche Memos zu erstellen. In vielen Fällen werden Memos jedoch während der Berechnung erstellt. Wenn das handgeschriebene Memo nur aus Text und Zahlen besteht, können Sie es mit einem Texteditor eingeben, ohne sich die Mühe machen zu müssen, es zu schreiben. Wenn Sie jedoch ein erklärendes Diagramm benötigen, ist die Handschrift dennoch praktisch. Wenn ich rechnen muss, habe ich Python auf iMac gestartet und es berechnen lassen, während ich handgezeichnete Skizzen und Memos auf dem iPad erstellt habe. Es ist jedoch umständlich, iMac zu starten, obwohl ich ein iPad habe. Nicht klug. Ich habe in letzter Zeit noch nichts davon gehört, aber ich habe mich für Pythonista 3 entschieden, das ich für das iPad mini 4 gekauft hatte.
Pythonista 3 enthält Numpy und Matplotlib, die mit ziemlicher Sicherheit funktionieren. Sie sollten denken, dass andere Bibliotheken wie Scipy und Pandas nicht verwendet werden können. Aus diesem Grund ist Code, der nur numpy und matplotlib verwendet, auch für komplizierte Berechnungen praktisch. Es scheint, dass Sie auch die GUI verwenden können, aber ich habe sie selbst noch nicht verwendet. Deshalb habe ich versucht, ein einfaches Berechnungsprogramm, das ich häufig verwende, in einen App-Stil zu verwandeln, damit es auf dem iPad verwendet werden kann. (Der Punkt ist, dass ich gerne das iPad Air 4 kaufe, also werde ich verschiedene Dinge damit machen.)
Ich schreibe das "Programm zum Finden der gleichen Tiefe steiler Wasserstraßen" auf meinem Mac für Pythonista neu, damit es mit der GUI funktioniert. Der ursprüngliche Code wurde unten in "Hatena" veröffentlicht.
https://damyarou.hatenablog.com/entry/2020/10/23/073643
Da dieses Programm nichtlineare Gleichungen löst, verwendet das Mac-Programm scipy, Pythonista kann scipy jedoch nicht verwenden, sodass der Dichotomieteil zum Lösen nichtlinearer Gleichungen von selbst neu geschrieben wird. Außerdem ist dies meine erste Herausforderung, aber ich habe versucht, sie über die GUI wie eine App zu beenden.
Das Ausführungsergebnis ist wie in der Abbildung unten dargestellt. Geben Sie die Daten in die oberen vier Quadrate ein und drücken Sie die Taste `` `Ausführen```. Das Ergebnis wird im unteren Quadrat angezeigt.
Ich habe beim Erstellen des Programms auf die folgenden Websites verwiesen.
Wenn Sie in Pythonista 3 die UI-Programmierung angeben, stehen Ihnen zwei Dateien zur Verfügung. Im Bild unten. Sie können die Dateien `py_uniflow.py``` und
py_uniflow.pyui``` sehen. "Xxx.py" ist ein Programm, das Code schreibt, und "xxx.pyui" ist eine Datei, die das Layout und die Eigenschaften der Benutzeroberfläche definiert.
Eine Liste der Objekte, die platziert werden können, wird angezeigt, indem Sie auf die Markierung + drücken, die vom oberen linken Quadrat auf `` `py_uniflow.pyui``` umgeben ist und die Platzierung und Eigenschaften der Benutzeroberfläche definiert. Wählen Sie daher das Objekt aus, das Sie verwenden möchten. wählen.
Dieses Programm verwendet die folgenden vier Objekttypen.
Für Etikett und Buttan py_uniflow.Hier ist ein Bild des angegebenen charakteristischen Wertes in Pyui.
```textfield```Wann```textview```Passt nur die Position und Größe an, sodass das Foto weggelassen wird.
![IMG_0005.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129300/050b4847-d387-186d-1498-0d8ea9c0e10e.jpeg)
![IMG_0006.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129300/52a2c7b4-adb0-0a9e-2048-3af40521b09b.jpeg)
Ich werde das Programm auf dem iPad so beenden.
## Code
#### **`py_uniflow.Der vollständige Code für py ist unten. Funktion def klicken_Die gesamte Hauptverarbeitung ist in der Schaltfläche gepackt.`**
```Der vollständige Code für py ist unten. Funktion def klicken_Die gesamte Hauptverarbeitung ist in der Schaltfläche gepackt.
```python
# Calculation of normal depth
import ui
import numpy as np
def cal_hc(q,b,cs):
# critical depth
g=9.8
hc=(q**2/g/b**2/cs)**(1/3)
return hc
def func(h,q,b,n,sn):
f=q-b*h/n*(b*h/(b+2*h))**(2/3)*sn**(1/2)
return f
def bisection(q,b,n,sn,ha,hb):
for k in range(100):
hi=0.5*(ha+hb)
fa=func(ha,q,b,n,sn)
fb=func(hb,q,b,n,sn)
fi=func(hi,q,b,n,sn)
if fa*fi<0: hb=hi
if fb*fi<0: ha=hi
#print(fa,fi,fb)
if np.abs(hb-ha)<1e-10: break
return hi
def click_button(sender):
tf1=v['textfield1']
tf2=v['textfield2']
tf3=v['textfield3']
tf4=v['textfield4']
q=float(tf1.text) # discharge
b=float(tf2.text) # channel width
n=float(tf3.text) # Manning's roughness coefficient
i=float(tf4.text) # invert gradient
theta=np.arctan(i)
sn=np.sin(theta)
cs=np.cos(theta)
ha=0.0 # lower initial value for bisection method
hb=10.0 # upper initial value for bisection method
hn=bisection(q,b,n,sn,ha,hb)
vn=q/b/hn
hc=cal_hc(q,b,cs)
# hn: normal depth
# vn: flow velocity
# hc: critical depth
tv=v['textview1']
ss='ang={0:.3f} deg.\n'.format(np.degrees(theta))
ss=ss+'hn={0:.3f} m\n'.format(hn)
ss=ss+'vn={0:.3f} m/s\n'.format(vn)
ss=ss+'hc={0:.3f} m'.format(hc)
tv.text=ss
v = ui.load_view()
v.name='Uniform flow'
v.present('sheet')
das ist alles