0

これが私がしなければならないことの要点です。Pythonでは、パラメトリック関数f(x(t、omega)、y(t、omega))があり、omegaには5つの特定の値があります(不規則な間隔で)。私がやりたいのは、基本的に、オメガの5つの値のそれぞれについて同じプロットにこの関数fをプロットすることです。

今、私はこれのための実用的なコードを持っていますが、それはもっと簡潔になるかもしれないと思います(そして私はこの演習からPythonについてできるだけ多くを学びたいので、それがもっと簡潔になる方法を知ることに非常に興味があります) 、そしてまた、ここでx(t、omega)の範囲を修正する方法がわかりません!この最後の点が最も問題です。

これが私の「動作する」コードです:

x=linspace(0,10,100)
H0=71
omega0=1.01
Rc=0.5*(omega0/(omega0-1))*(1-cos(x))
tc=(0.5/H0)*(omega0/(omega0-1)**(3/2))*(x-sin(x))
plot(tc,Rc)
omega0=1.1
Rc=0.5*(omega0/(omega0-1))*(1-cos(x))
tc=(0.5/H0)*(omega0/(omega0-1)**(3/2))*(x-sin(x))
plot(tc,Rc)
omega0=1.5
Rc=0.5*(omega0/(omega0-1))*(1-cos(x))
tc=(0.5/H0)*(omega0/(omega0-1)**(3/2))*(x-sin(x))
plot(tc,Rc)
omega0=2.0
Rc=0.5*(omega0/(omega0-1))*(1-cos(x))
tc=(0.5/H0)*(omega0/(omega0-1)**(3/2))*(x-sin(x))
plot(tc,Rc)
omega0=3.0
Rc=0.5*(omega0/(omega0-1))*(1-cos(x))
tc=(0.5/H0)*(omega0/(omega0-1)**(3/2))*(x-sin(x))
plot(tc,Rc)
show()

ご覧のとおり、tcとRcはx(t、omega)とy(t、omega)として機能し、パラメトリック変数としてxを使用しました。 。これをプロットすると、すべての行が技術的にそこにあるとしても、そこから多くの情報を取得するのは難しいことがわかります。どんな助けでも大歓迎です!

編集:私は必要なものを手に入れました。同様の問題があるためにこのスレッドに出くわした人のために、私の改訂されたコードは、主に以下の回答といくつかのさらなる検索のおかげです:

import numpy as np
import pylab as pl
from pylab import *

x=linspace(0,50,1000)
H0=71 #units km/s/Mpc
omegas = [1.01,1.1,1.5,2.0,3.0]
Rcs = [0.5*(omega0/(omega0-1))*(1-cos(x)) for omega0 in omegas]
tcs = [(0.5/H0)*(omega0/(omega0-1)**(3/2))*(x-sin(x)) for omega0 in omegas]
for pair in zip(tcs,Rcs):
        pl.plot(pair[0],pair[1])
pl.xlim(0,0.55)
pl.ylim(0,60)
pl.show()
4

1 に答える 1

0

コードの冗長性を減らす最も明白な方法は、for ループまたはリスト内包表記を使用することです。

x=linspace(0,10,100)
H0 = 71
omegas = [1.01,1.1,1.5,2.0,3.0]
rcs = [0.5*(omega0/(omega0-1))*(1-cos(x)) for omega0 in omegas]
tcs = [(0.5/H0)*(omega0/(omega0-1)**(3/2))*(x-sin(x)) for omega0 in omegas]
for pair in zip(tcs,rcs):
    plot(pair[0],pair[1])
show()
于 2013-03-10T22:40:18.523 に答える