Kirjoittaja Aihe: Julia ei piirrä käppyrää  (Luettu 3468 kertaa)

ilkant

  • Käyttäjä
  • Viestejä: 1380
  • Kubuntu
    • Profiili
Julia ei piirrä käppyrää
« : 16.01.23 - klo:15.46 »
Kubuntu 22.10, Julia 1.8.4. Näytönohjain MSI GeForce GT 1030 2GH LF OC. Näyttö LG 34GK950F. Näytölle ei tulostu mitään. Aiemmin on tulostunut. Koodaajan omalla koneella näkyy käppyrä.

Julia-ohjelma:
Koodia: [Valitse]
using Plots
t = range(0, 2*pi, length=500);
x = @. (2+cos(3*t))*cos(2*t);
y = @. (2+cos(3*t))*sin(2*t);
z = @. -sin(3*t);
points = [x,y,z] ;
Plots.plot(points[1,:],points[2,:], points[3,:], seriestype=:scatter, markersize = 2,legend=false)

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: Julia ei piirrä käppyrää
« Vastaus #1 : 16.01.23 - klo:16.18 »
Graafi pitää piirtää näytölle display() tai gui() -funktiolla ja sen jälkeen estää Juliaa sulkeutumasta esimerkiksi odottamalla syötettä readline()-funktion avulla:

Koodia: [Valitse]
using Plots
t = range(0, 2*pi, length=500);
x = @. (2+cos(3*t))*cos(2*t);
y = @. (2+cos(3*t))*sin(2*t);
z = @. -sin(3*t);
points = [x,y,z] ;
p = Plots.plot(points[1,:],points[2,:], points[3,:], seriestype=:scatter, markersize = 2,legend=false)
display(p)
readline()

readlinen sijaan voit myös pyytää Juliaa käynnistymään interaktiivisessa tilassa, jolloin se jää odottelemaan omassa kehotteessaan skriptin suorituksen jälkeen:

Koodia: [Valitse]
julia -i skripti.jl

Julia ei nähtävästi ole vielä edennyt siihen vaiheeseen, että kehittäjät pitäisivät sitä varsinaisena sovellusohjelmointikielenä. Niinpä pidemmälle viedyt ratkaisut tähän plottien sulkeutumisongelmaan on toistaiseksi torpattu.

ilkant

  • Käyttäjä
  • Viestejä: 1380
  • Kubuntu
    • Profiili
Vs: Julia ei piirrä käppyrää
« Vastaus #2 : 16.01.23 - klo:20.09 »
Huomasin, että noin viikko sitten on Juliasta tullut versio 1.8.5. Asensin sen ja aloin ajaa tuota skriptiä. Kului mielettömän kauan aikaa Plots-kirjaston kääntämiseen ja lopulta Ctrl-C:llä lopetin sen. Ei mitään virheilmoitusta. Liekö tämän raudan joku juttu, jota Julia ei osaa nyt käsitellä?

Koodia: [Valitse]
$ julia -i solmu2.jl
[ Info: Precompiling Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80]
^CERROR: LoadError: InterruptException:
Stacktrace:
 [1] poptask(W::Base.InvasiveLinkedListSynchronized{Task})
   @ Base ./task.jl:921
 [2] wait()
   @ Base ./task.jl:930
 [3] wait(c::Base.GenericCondition{Base.Threads.SpinLock})
   @ Base ./condition.jl:124
 [4] readuntil(x::Base.TTY, c::UInt8; keep::Bool)
   @ Base ./stream.jl:1012
 [5] readline(s::Base.TTY; keep::Bool)
   @ Base ./io.jl:543
 [6] readline(s::Base.TTY) (repeats 2 times)
   @ Base ./io.jl:542
 [7] top-level scope
   @ /mnt/sda1/JuliaProjects/solmu2.jl:8
in expression starting at /mnt/sda1/JuliaProjects/solmu2.jl:8
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.8.5 (2023-01-08)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia>

Sitten huomasin, että joulukuussa on ilmestynyt Julian versio 1.9.0 beta. Sekin asennettu nyt. Google-haulla löytyy tietoa, että se voi olla paljon nopeampi kuin aiemmat versiot.

Ja nämä ovat nyt solmujen testausohejlmia, joita huvikseen tekee. Ei kiirettä saada ohjelmaa toimimaan. Varsin mielenkiintoinen matemaattinen lause on, että triviaalit solmut aukeavat 4:ssä ulottuvuudessa. Eli kengännauhoja ei voi solmia solmuun neljännessä ulottuvuudessa. Ja toisekseen avaruusasioissa on käytetty jopa 26-ulotteisia matemaattisia avaruuksia (Tähdet ja avaruus 6/2009).

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: Julia ei piirrä käppyrää
« Vastaus #3 : 16.01.23 - klo:20.50 »
Stacktrace näyttää siltä, että Plots oli kääntynyt jo ajat sitten ja julia odotteli syötettä  readline-funktiossa. Suoritus olisi loppunut enterillä. Jos kuvaajaa ei näkynyt, oliko sinulla nyt varmasti skriptissä display- tai gui-komento? Näytä vielä solmu2.jl:n sisältö.

Voit myös kokeilla  asentaa/päivittää Plots-paketin erikseen:

Käynnistä julia:
Koodia: [Valitse]
julia
Suorita nämä komennot:
Koodia: [Valitse]
import Pkg;
Pkg.add(“Plots”);
Pkg.update();

Tuo asentaa Plots-kirjaston ja tarvittavat riippuvuudet ~/.julia-hakemistoon. Ainakin minulla kokonaisuus oli vajaat 600 megaa erilaisia enemmän tai vähemmän aiheeseen liittyviä kirjastoja. Aika massiivinen möhkäle käppyröiden piirtoon.
« Viimeksi muokattu: 16.01.23 - klo:20.53 kirjoittanut nm »

ilkant

  • Käyttäjä
  • Viestejä: 1380
  • Kubuntu
    • Profiili
Vs: Julia ei piirrä käppyrää
« Vastaus #4 : 16.01.23 - klo:22.02 »
Enterin painalluksella ohejlman suoritus meni loppuun. Edelleenkään käppyrää koordinaatistolla ei tullut näytölle.

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: Julia ei piirrä käppyrää
« Vastaus #5 : 16.01.23 - klo:23.32 »
Enterin painalluksella ohejlman suoritus meni loppuun. Edelleenkään käppyrää koordinaatistolla ei tullut näytölle.

Mitä tiedosto solmu2.jl sisältää:

Koodia: [Valitse]
cat solmu2.jl

ilkant

  • Käyttäjä
  • Viestejä: 1380
  • Kubuntu
    • Profiili
Vs: Julia ei piirrä käppyrää
« Vastaus #6 : 18.01.23 - klo:02.46 »
Mitä tiedosto solmu2.jl sisältää:

Se on tuolla ensimmäisessä viestissä. Siitä oli jäänyt viimeinen rivi pois. Laitan tähän uudelleen sisällön. Aiemmin nuo Julia-ohjelmat ovat piirtäneet ne käppyrät. Vaikuttaa siltä, että Kubuntun päivityksissä on tullut jotain, joka estää nyt piirroksen näkymisen. Tai Julian uudemmissa versioissa on jotain, joka Kubuntun kanssa ei nyt toimi. Itse ohjelma kyllä suoriutuu. Kokeilin muitakin käppyränpiirtämisiä eikä niitäkään tullut näkyviin. Plots asennusohjeen mukaan asensin Plots-moduulin uudestaan.

Koodia: [Valitse]
using Plots
t = range(0, 2*pi, length=500);
x = @. (2+cos(3*t))*cos(2*t);
y = @. (2+cos(3*t))*sin(2*t);
z = @. -sin(3*t);
points = [x,y,z] ;
Plots.plot(points[1,:],points[2,:], points[3,:], seriestype=:scatter, markersize = 2,legend=false)
readline()

Kokeilin nyt yhtä käppyränpiirto-ohjelmaaa, joka tallettaa kuvan gif-animaatioksi levylle. Se kuva näkyy selaimessa ja käppyrä liikkuu. Eli kyllä Plots sinänsä toimii. En käytä Waylandia. Tulkoon sekin mainittua.

Koodia: [Valitse]
using Plots
# define the Lorenz attractor
Base.@kwdef mutable struct Lorenz
    dt::Float64 = 0.02
    σ::Float64 = 10
    ρ::Float64 = 28
    β::Float64 = 8/3
    x::Float64 = 1
    y::Float64 = 1
    z::Float64 = 1
end

function step!(l::Lorenz)
    dx = l.σ * (l.y - l.x)
    dy = l.x * (l.ρ - l.z) - l.y
    dz = l.x * l.y - l.β * l.z
    l.x += l.dt * dx
    l.y += l.dt * dy
    l.z += l.dt * dz
end

attractor = Lorenz()


# initialize a 3D plot with 1 empty series
plt = plot3d(
    1,
    xlim = (-30, 30),
    ylim = (-30, 30),
    zlim = (0, 60),
    title = "Lorenz Attractor",
    legend = false,
    marker = 2,
)

# build an animated gif by pushing new points to the plot, saving every 10th frame
@gif for i=1:1500
    step!(attractor)
    push!(plt, attractor.x, attractor.y, attractor.z)
end every 10
« Viimeksi muokattu: 18.01.23 - klo:02.49 kirjoittanut ilkant »

nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: Julia ei piirrä käppyrää
« Vastaus #7 : 18.01.23 - klo:11.38 »
Mitä tiedosto solmu2.jl sisältää:
Se on tuolla ensimmäisessä viestissä. Siitä oli jäänyt viimeinen rivi pois. Laitan tähän uudelleen sisällön.

Koodistasi puuttuu edelleen display- tai gui-funktio, joilla kuvan saa näytölle. Vaihtoehtoisesti myös plot-funktion parametri show=true riittää. Eli kolme vaihtoehtoa:

1. display():
Koodia: [Valitse]
p = Plots.plot(points[1,:], points[2,:], points[3,:], seriestype=:scatter, markersize = 2, legend=false);
display(p);
readline();

2. gui():
Koodia: [Valitse]
p = Plots.plot(points[1,:], points[2,:], points[3,:], seriestype=:scatter, markersize = 2, legend=false);
gui(p);
readline();

3. show=true:
Koodia: [Valitse]
p = Plots.plot(points[1,:], points[2,:], points[3,:], seriestype=:scatter, markersize = 2, legend=false, show=true);
readline();


Tai neljäntenä vielä show=true oletusasetuksena, jolloin sitä ei tarvitse erikseen pyytää jokaisessa plot-komennossa:

4. default(show=true):

Koodia: [Valitse]
using Plots;
default(show = true);


Aiemmin nuo Julia-ohjelmat ovat piirtäneet ne käppyrät. Vaikuttaa siltä, että Kubuntun päivityksissä on tullut jotain, joka estää nyt piirroksen näkymisen.

No en tiedä onko joskus muinaisissa Plotsin versioissa ollut vaikkapa oletuksena show=true, mutta nykyisin se on asetettava erikseen tai on piirrettävä display/gui-kutsulla. Voi myös olla, että aiemmissa skripteissäsi oli määritelty default(show = true). Kubuntuun tai Ubuntuun tämä ei kuitenkaan liity.
« Viimeksi muokattu: 18.01.23 - klo:11.42 kirjoittanut nm »

ilkant

  • Käyttäjä
  • Viestejä: 1380
  • Kubuntu
    • Profiili
Vs: Julia ei piirrä käppyrää
« Vastaus #8 : 19.01.23 - klo:03.07 »
Nyt tärppäsi! Kohdan 1 display(p) toimi! Kiitos. Tämän ansiosta tuli tosin päivitettyä Plots uudemmaksi ja ilmeisen monipuolisemmaksi ja myös Julia tuli päiviettyä 1.8.5:ksi ja tutustuttua myös 1.9.0 betaan.