Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: welmar - 13.01.17 - klo:16.28

Otsikko: Octave
Kirjoitti: welmar - 13.01.17 - klo:16.28
Olen yrittänyt tutkia Octaven ja Matlabin ohjeita lukea mutta en vielä ole ymmärtänyt miten saisin graafisesti kysyttyä jotain ja vastauksen myös samanlaiseen ikkunaan. Hiukan huonosti osaan selittää mutta laitan kuvan jossa on ohjelma jonka tarkoitus kysyä monikulmion kulmien määrää kysymysikkunassa ja sitten saada vastaus myös samankaltaisella ikkunalla. Octave ei myöskään avaa Matlabilla tehtyjä tiedostoja vaan kun yrittää avata niin Octave käynnistyy mutta sammuu heti. Kokeiltu m-tiedostoja jotka on tehty vanhalla olisiko jopa 2009 matlabilla ja uusimmalla versiolla.
EDIT: m-tiedostot sain aukeamaan editoriin kunhan Octave on käynnissä, suoraan tiedostoa klikkaamalla ei onnistu.
Otsikko: Vs: Octave
Kirjoitti: kamara - 13.01.17 - klo:17.33
Tämä on varmaan tuttu, mutta laitetaan nyt kuitenkin...

https://www.gnu.org/software/octave/doc/v4.0.3/Dialog-Box-Functions.html

Koodia: [Valitse]
s=inputdlg("oukki doukki","otsikko2")
Otsikko: Vs: Octave
Kirjoitti: welmar - 14.01.17 - klo:09.31
Joo, eli ton input boxin saan kyllä toimimaan mutta sen jälkeen mikään ei sitten toimikkaan... Eli kun laitan inputikkunaan vaikka kulmien määräksi 5 niin ei tule messagaikkunaa jossa tulos. Ei laske edes konsolissa eli muuttja menee johonkin väärää paikkaan tai muuten vaan väärin. Menen itsekin sekaisin omista selityksistäni  siksi laitoin kuvan edelliseen viestiin jos siitä vois saada paremman käsityksen. Ongelma on kai muuttajan sijoituksessa, tai no parempi taaslaittaa kuva kun en osaa selittää...
EDIT: Nyt ymmärsin että inputboxi tallentaa siis muuttuja paikkaan 1x1. On vielä paljon opeteltavaa...
Otsikko: Vs: Octave
Kirjoitti: kamara - 14.01.17 - klo:13.48
Ymmärsinkö oikein, että ongelma ratkesi ?
Otsikko: Vs: Octave
Kirjoitti: welmar - 14.01.17 - klo:17.03
Ymmärsinkö oikein, että ongelma ratkesi ?
Ei vaan haluaisin vastauksen dialogboxiin mutta nyt ohjelma ei laske mitään. Tälläinen on toimiva ohjelma konsolissa
Koodia: [Valitse]
%Säännöllinen monikulmio
input('Anna kulmien määrä : ')
n = ans
kulmat = ((n-2)/n)*180
disp(kulmat)
Eli ainakin pitäisi keksiä miten saan n = cell 1x1. Noin se ei aikaan toimi ja sitten vielä tulostettua se messageboxiin.
Otsikko: Vs: Octave
Kirjoitti: kamara - 14.01.17 - klo:19.52
Toimiiko seuraava ?

Koodia: [Valitse]
inputdlg('Anna kulmien määrä :',"Säännöllinen monikulmio")
n=base2dec(ans,10)
kulmat = ((n-2)/n)*180
dec2base(kulmat,10)
msgbox(ans)
Otsikko: Vs: Octave
Kirjoitti: welmar - 15.01.17 - klo:00.13
Joo! Kiitos paljion. Mitä noi komennot base2dec ja toisinpäin dec2base oikein tarkoittaa? Ilmeisesti niillä haetaan muuttujaa mutta miten just arvo 10?
EDIT: Jos laittaa kulmia 7 niin ei toimi.
Otsikko: Vs: Octave
Kirjoitti: kamara - 15.01.17 - klo:08.29
Joo! Kiitos paljion. Mitä noi komennot base2dec ja toisinpäin dec2base oikein tarkoittaa? Ilmeisesti niillä haetaan muuttujaa mutta miten just arvo 10?
EDIT: Jos laittaa kulmia 7 niin ei toimi.

Kyseessä on 10-kantainen numero.

Joo näkyy tykkäävän huonoa desimaaleista. Tutkitaan vielä, josko löytyisi parempi funktio.
Otsikko: Vs: Octave
Kirjoitti: kamara - 15.01.17 - klo:08.42
Toimisikohan tämä paremmin... ?
Koodia: [Valitse]
inputdlg('Anna kulmien määrä :',"Säännöllinen monikulmio")
n=str2double(ans)
kulmat = ((n-2)/n)*180
mat2str(kulmat)
msgbox (ans)


Edit - Minulle toi octave ei ole kovinkaan tuttu, vaan googlasin vastauksen. Olen kyllä ollut tietoinen Octaven hienoista ominaisuuksista.
Otsikko: Vs: Octave
Kirjoitti: kamara - 15.01.17 - klo:09.39
Myös seuraava taitaa toimia halutulla tavalla...
Koodia: [Valitse]
inputdlg('Anna kulmien määrä :',"Säännöllinen monikulmio")
n=str2double(ans)
kulmat = ((n-2)/n)*180
num2str(kulmat)
msgbox (ans)
Otsikko: Vs: Octave
Kirjoitti: welmar - 22.02.17 - klo:16.57
Mitähän teen väärin kun plot-komennolla piste menee ihan väärään paikkaan?
Koodia: [Valitse]
clear
%kärkipisteet
A = [0 0]
B = [10 0]
C = [10 -4]
D = [0 -4]

AB = B-A
BC = C-B
norm(BC)
BCk=[-BC(2),BC(1)]%BC vektorin normaali
E = B + BCk
%piirretään suorakulmio
 x=[A(1),B(1),C(1),D(1),A(1)]
 y=[A(2),B(2),C(2),D(2),A(2)]
 figure(1)
 hold on
 plot(x,y,'linewidth',2)
 plot([E],'k+','linewidth',4)
 grid
 axis equal
Octave kyllä laskee E:n arvoksi 14  0 johon haluaisin pisteen tai vektorin mutta jostain syystä se heittää pisteen(tai oikeastaan kaksi pistetä) ihan väärään paikkaan. Tässä tapauksessa 2 ,14  ja 3,0 (noin suunnilleen kuvasta katsottuna) Saan toki jatkettua suorakulmiota oikein näin
Koodia: [Valitse]
x=[A(1),B(1),C(1),D(1),A(1),E(1)]
 y=[A(2),B(2),C(2),D(2),A(2),E(2)]
mutta se ei auta minua ymmärtämään plot-komennon omituisuuksia yhtään paremmin.....
Otsikko: Vs: Octave
Kirjoitti: kamara - 22.02.17 - klo:17.59
Toimisiko seuraava ?

Koodia: [Valitse]
plot([E(1)],[E(2)],'k+','linewidth',4)

Tai seuraava...
Koodia: [Valitse]
plot(E(1),E(2),'k+','linewidth',4)
Otsikko: Vs: Octave
Kirjoitti: kamara - 22.02.17 - klo:18.28
Tarkennusta...
Koodia: [Valitse]
Fnk= [0 15 25 -5 4]
plot(Fnk,'k-','linewidth',4)

On sama kuin...
Koodia: [Valitse]
clear
Fnk= [0 15 25 -5 4]
n=[1 2 3 4 5]
plot(n,Fnk,'k-','linewidth',4)
Otsikko: Vs: Octave
Kirjoitti: welmar - 22.02.17 - klo:18.36
Toimii. Kokeilinkin noin mutta aina ei tullut oikeita kuvia johtuen Octaven häiritsevästä ominaisuudesta ettei se suorita koko koodia loppuun kerralla vaan pitää painaa komentoikkunassa välilyöntiä tai enteriä. Eli komentoikkunassa koodin suoritus taukoaa näköjään less-komennon vuoksi. Miten sen saa pois? Matlabis voi suorittaa vaikka kuinka pitkiä koodipätkiä . RATKAISU: Lisäsin koodin loppuun more ja nyt toimii oikein. Vähän jäi silti häiritsemään miksei komento plot([E]) toimi tai mitä se tekee tarkalleen?
Otsikko: Vs: Octave
Kirjoitti: kamara - 22.02.17 - klo:19.04
Vähän jäi silti häiritsemään miksei komento plot([E]) toimi tai mitä se tekee tarkalleen?

Se tulkitsee molemmat E:n arvot Y:n avoiksi, kuten edellisessä viestissäni yritin kertoa.

Elikkä tulostaa seuraavaan tapaan...
Koodia: [Valitse]
clear
E=[14 0]
n=[1 2]
plot(n,E,'k-','linewidth',4)

Koodia: [Valitse]
clear
E=[14 0]
plot(E,'k-','linewidth',4)