Scilab è ottimo. Per tante cose. Io l’ho scoperto per i grafici, lo sto utilizzando e in questo post vorrei riassumere cosa ho scoperto.
Intanto è ottimo, lo uso e lo consiglio a tutti.
Pero non è facilissimo, è un prodotto grosso (proteiforme), si evolve (giustamente) e qualche istruzione diventa obsoleta (com’è giusto che sia).
Non sempre i manuali sono aggiornati e per quel che ho trovato manca un “Getting Started” o un “How To” per le singole branche in cui può essere suddiviso. In particolare per il plotting ho dovuto scorrere bazillioni di files .html e .pdf e in nessuno ho trovato tutto quello che cercavo.
Tra i tanti considero fondamentali:
- Scilab: Graphics di Anuradha Amrutkar dell’Indian Institute Of Technology, Bombay, 15th April, 2010, disponibile qui;
- Graphics: Getting started, qui e naturalmente qui cercando Graphics Library (e c’è tutto il resto del manuale online, da perdersi).
Allora ecco cosa ho ottenuto. Il mio sogno sarebbe stato quello di costruire uno script che, lanciato da terminale, generasse automaticamente il grafico richiesto; non è esattamente quello che sono riuscito a fare, difatti lanciando l’interprete di Scilab ottengo:
e, ovviamente, si apre il terminale di Scilab. Trascinando uno script, qualunque script, su quest’ultimo mi compare questo messaggio d’errore:
Ci sono due cose: 1) un messaggio solo parzialmente visibile, che fa riferimento a ecanvas"*
che non so cosa sia, e 2) la variabile mostra
non definita. Strano che c’entri una variabile con il nome italiano, non citata da nessuna parte.
Ho provato a inserire istruzioni relative a driver(), xinit() e usecanvas() senza risultato. Per mostra basta settarla a %t o %f (non so qualse sia quella giusta).
In genere la prima esecuzione dello script abortisce, completamente o produce solo parte del grafico, basta ridroppare lo script una seconda volta e tutto funziona.
Questi sono alcuni esempi, presi dalla documentazione citata.
mostra = %T; t=linspace(0,%pi,20); a=gca();a.data_bounds=[t(1) -1.8;t($) 1.8]; plot2d(t,[cos(t'),cos(2*t'),cos(3*t')],[-5,2 3]); e=gce(); e1=e.children(1);e1.thickness=2;e1.polyline_style=4;e1.arrow_size_factor = 1/2; e2=e.children(2);e2.line_style=4;e2.thickness=3; e3=e.children(3);e3.line_mode='on';e3.mark_background=5; hl=legend(['cos(t)';'cos(2*t)';'cos(3*t)']); xs2png(0, "e4.png")
mostra = %F; t = linspace(-%pi, %pi,30); function z = mysurface(x,y); z = x * sin(x) ^ 2 * cos(y); endfunction contour(t,t,mysurface,10) xs2png(0, "aa2.png")
mostra = %F; x = [0 : 0.1 : 2 * %pi]'; plot2d(x, [sin(x) sin(2*x) sin(3*x)], .. [1,2,3], leg = "L1@L2@L3", nax = [2,10,2,10],rect = [0,-2,2*%pi,2]); xs2png(0, "scp4.png")
mostra = %f; t=-%pi:0.1:%pi; m=sin(t)'*cos(t); clf() xset("colormap",jetcolormap(64)) colorbar(-1,1) Sgrayplot(t,t,m, strf="041") xs2png(0, "scp6.png")
mostra = %f; n = 30; nt = 100; x = linspace(0,2*%pi,n); y = linspace(0,%pi,n/2); z = sin(x')*sin(y); t = linspace(0,4*%pi,nt); show_window(); clf() f=gcf(); f.color_map=jetcolormap(64); f.pixmap='on'; colorbar(-1,1) Sgrayplot(x,y,cos(t(1))*z, strf="042", zminmax=[-1,1]) c=gce(),e=c.children xtitle("Kaa''s eyes") for i = 1:nt e.data(:,3)=matrix(cos(t(i))*z,-1,1); show_pixmap() end f.pixmap='off'; xs2png(0, "scp7.png")
(quest’ultima è dinamica, provate…).
Bon. Per adesso Scilab lo uso così.
Ho trascurato altre cose, per esempio lo sapete che è uscita la nuova versione di newLISP, la 10.3? Lo sapevo che non interessa nessuno 😦
Ho trascurato anche Python, ma restate sintonizzati, prossimamente…
E poi tante altre cose nuove 8) e nuovi collaboratori 8)