J'ai acheté l'iPad Air 4 récemment sorti. Le but de l'utilisation est principalement de créer des mémos manuscrits, mais dans de nombreux cas, les mémos sont créés lors du calcul. Si le mémo manuscrit n'est que du texte et des chiffres, vous pouvez le saisir avec un éditeur de texte sans avoir à vous soucier de l'écrire à la main, mais si vous avez besoin d'un diagramme explicatif, l'écriture manuscrite est toujours pratique. Lorsque j'avais besoin de calculer, j'avais l'habitude de démarrer Python sur iMac et de le laisser calculer tout en faisant des croquis et des mémos dessinés à la main sur iPad, mais il est difficile de démarrer iMac même si j'ai un iPad. Pas intélligent. Donc, je n'en ai pas entendu parler récemment, mais j'ai décidé d'utiliser Pythonista 3, que j'avais acheté pour l'iPad mini 4.
Pythonista 3 inclut numpy et matplotlib, qui fonctionnent presque certainement. Vous devez penser que d'autres bibliothèques telles que scipy et pandas ne peuvent pas être utilisées. Pour cette raison, un code qui n'utilise que numpy et matplotlib est pratique même pour des calculs compliqués. Il semble que vous puissiez également utiliser l'interface graphique, mais je ne l'ai jamais utilisé moi-même auparavant, j'ai donc essayé de créer un programme de calcul simple que j'utilise fréquemment dans un style d'application afin qu'il puisse être utilisé sur l'iPad. (Le fait est que je suis heureux d'acheter l'iPad Air 4, donc je vais faire diverses choses avec.)
Ce que je fais, c'est réécrire le "programme pour trouver l'iso-profondeur des cours d'eau raides" sur mon Mac pour Pythonista afin qu'il fonctionne avec l'interface graphique. Le code original a été publié dans "Hatena" ci-dessous.
https://damyarou.hatenablog.com/entry/2020/10/23/073643
Puisque ce programme résout des équations non linéaires, le programme Mac utilise scipy, mais Pythonista ne peut pas utiliser scipy, donc la partie dichotomie pour résoudre les équations non linéaires est réécrite par elle-même. De plus, c'est mon premier défi, mais j'ai essayé de le terminer en utilisant l'interface graphique comme une application.
Le résultat de l'exécution est comme indiqué dans l'image ci-dessous. Entrez les données dans les quatre carrés supérieurs et appuyez sur le bouton `` Exécuter '', et le résultat sera affiché dans le carré inférieur.
J'ai fait référence aux sites suivants lors de la création du programme.
Dans Pythonista 3, si vous spécifiez la programmation de l'interface utilisateur, vous aurez deux fichiers. Dans l'image ci-dessous. Vous pouvez voir les fichiers
py_uniflow.py et` `` py_uniflow.pyui
. "Xxx.py" est un programme qui écrit du code et "xxx.pyui" est un fichier qui définit la disposition et les caractéristiques de l'interface utilisateur.
Une liste des objets pouvant être placés s'affiche en appuyant sur la marque + entourée du carré supérieur gauche sur `` py_uniflow.pyui '' qui définit le placement et les caractéristiques de l'interface utilisateur, alors sélectionnez celui que vous souhaitez utiliser à partir de là. sélectionner.
Ce programme utilise les quatre types d'objets suivants.
Pour l'étiquette et le butan, py_uniflow.Voici une image de la valeur caractéristique spécifiée dans pyui.
```textfield```Quand```textview```Ajuste simplement la position et la taille, de sorte que la photo est omise.
![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)
Je vais terminer le programme sur l'iPad comme ça.
## code
#### **`py_uniflow.Le code complet pour py est ci-dessous. Fonction def clic_Tout le traitement principal est emballé dans le bouton.`**
```Le code complet pour py est ci-dessous. Fonction def clic_Tout le traitement principal est emballé dans le bouton.
```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')
c'est tout
Recommended Posts