Warum ohne Funktion? Das wäre doch genau das, was du haben willst. Das Skript baut aus den gegebnen Punkten eine Funktion und zeichnet deren kurve, bzw kann dir für jeden x-Wert, den y-Wert geben.nein es muss ohne Funktion gehen.
Sorry übrigens, dass ich mich einmische, aber sone Interpolationssache würd mich reizen
Ja es gibt mathematische Verfahren mit denen auch ein dummes skript in der Lage ist ne Funktion aus Punkten zu erzeugen.
Theoretisch ließe sich das wahrscheinlich auch in ruby problemlos umsetzen und ich würds sogar versuchen wollen, aber ich weiß nich ob ichs hinkriege und ob du dann mit dem ergebniss zufrieden wärst. Vor allem was das zeichnen der Kurve angeht.
Ich bin mit ruby auch nich so befreundet, wenns um echtes programmieren geht. Sind mir zuwenig Klammern drin.
hmmmm also wenn dir keiner ne besser Lösung anbietet kann ichs ja mal versuchen....
Theoretisch ließe sich das wahrscheinlich auch in ruby problemlos umsetzen und ich würds sogar versuchen wollen, aber ich weiß nich ob ichs hinkriege und ob du dann mit dem ergebniss zufrieden wärst. Vor allem was das zeichnen der Kurve angeht.
Ich bin mit ruby auch nich so befreundet, wenns um echtes programmieren geht. Sind mir zuwenig Klammern drin.
hmmmm also wenn dir keiner ne besser Lösung anbietet kann ichs ja mal versuchen....
Hm, also Anzahl der Punkte flexibel wird haarig, das würd ich vielleciht in c++ hinkriegen, aber ich hab keine Ahnung ob und wie man in ruby dynamisch Speicher allukieren kann und ohne wirds nich gehen, denk ich, weil die Anzahl der Punkte die Menge der Variablen bestimmt, die ich brauche.
Also ich will mich jetzt hier auch nich als Experte ausgeben, nen richtiger Programmierer bzw. jemand der sich mit ruby auskennt wäre da sicher besser geeignet, aber ich kann mich, wenn ich am Wochenende Zeit über hab mal dran setzen. Jetzt geh ich jedenfalls ins Bett.
Also ich will mich jetzt hier auch nich als Experte ausgeben, nen richtiger Programmierer bzw. jemand der sich mit ruby auskennt wäre da sicher besser geeignet, aber ich kann mich, wenn ich am Wochenende Zeit über hab mal dran setzen. Jetzt geh ich jedenfalls ins Bett.
@Lelle : In Ruby musst du Speicher nicht von Hand freimachen, da es eine komplette Pointer-Sprache ist. Du kannst also einfach "hinter" ein Array schreiben, dann wird von selbst zusätzlicher Speicher freigemacht. Ich meine sowas^^: @array[-1] = IRGENDWAS. Somit kannst du praktisch unendlich viele Werte in ein Array stopfen. Das sollte also nicht das Problem werden 
Wenn du noch fragen bezüglich Ruby hast, kannst du mich auch gerne fragen
Drag-On

Wenn du noch fragen bezüglich Ruby hast, kannst du mich auch gerne fragen

Drag-On
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Drag-On« (19. Oktober 2007, 22:04)
Ja, als ich da weiter drüber nach gedacht habe is mir das auch kla geworden.
Und jetzt treibt mich grad mein eigener Skript in den Wahnsinn, weil er nicht das ausgibt, was er soll ... Irgendwie macht es mich aber auch nen Bischen fertig, das man in ruby nie so genau weiß, was man in den Variablen drin hat, also zB ob jetzt Integer oder Floats. Is ja teilweise ganz schön, aber manchmal wärs doch netter, wenns nen Bischen mehr festgelegt wäre...
Wie auch immer ich geh dann mal weiter den Fehler suchen...
Und jetzt treibt mich grad mein eigener Skript in den Wahnsinn, weil er nicht das ausgibt, was er soll ... Irgendwie macht es mich aber auch nen Bischen fertig, das man in ruby nie so genau weiß, was man in den Variablen drin hat, also zB ob jetzt Integer oder Floats. Is ja teilweise ganz schön, aber manchmal wärs doch netter, wenns nen Bischen mehr festgelegt wäre...
Wie auch immer ich geh dann mal weiter den Fehler suchen...
Hallo,
also über
kansnte rauskriegen was es ist und mit
kannste es auch konveriteren.
und wer zuviel langeweile hat, kann ja mal probieren das C++ Script in Ruby auszufühen, ne Menge Befehle müsste es auch verstehen
Gruß Sven
also über
|
|
Quellcode |
1 |
var.class |
|
|
Quellcode |
1 2 |
var = var.to_f var = var.to_i |
kannste es auch konveriteren.
und wer zuviel langeweile hat, kann ja mal probieren das C++ Script in Ruby auszufühen, ne Menge Befehle müsste es auch verstehen

Gruß Sven
So nach einem verdammt harten Wochenende hab ich mich grad nochmal hingesetzt und mir mein Skript angekukt. Hab die Fehler (ja es waren NATÜRLICH noch mehrer) gefunden und behoben.
Nicht besonders schön, aber funktionstüchtig. Ob das jetzt für deine Zwecke zubenutzenistmusst du entscheiden Hanmac.
Kurze Erläuterung zur Funktionsweise:
1. irgendwo ein Exemplar der Funktion initalizieren
2. mit set die Punkte eingeben und zwar die Koordinaten als Array. Bsp: P1(0|3) P2(1|4) wird zu [0,3,1,4]
3. mit get(x) den y-Wert für x kriegen
Die test Funktion hab ich eigentlich zur Fehlersuche geschrieben, aber vielleicht kann man die ja nochmal gebrauchen.
Danke an alle die mir mit meinen Ruby Kentnissen geholfen haben und an Sir Isac Newton, der dieses wunderbare Verfahren zur Interpolation entwickelt hat.
Hm der Code is nicht richtig eingerückt... warum auch immer....
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
class Funkt
def initialize
@x=[]
@y=[]
@size=0
end
########################################################################
# set-Funktion
# points ist ein Array von Punktkoordinaten (jeweils abwechselnd x- und
# zugehöriger y-Wert
########################################################################
def set(points)
#Überprüfung ob das eingegebene Array eine gerade Anzahl von Koordinaten
#enthält, also paarweise ausgelesen werden kann
if points.size%2!=0
print "Fehler, bei Punktübergabe. Koordinatenanzahl ist nicht gerade."
return
end
#Feststellung der Menge der Punkte
@size=points.size/2
for i in 0...@size
@y[i]=[]
end
#Je nach Position im Array werden die Koordinaten in x oder y gepusht
for i in 0...points.size
if i%2==0
@x.push(points[i])
else
@y[i/2].push(points[i])
end
end
#Interpolationsschritt 1 nach Newton
for i in 1...@size
for j in 0...(@size-i)
@y[j][i]=((@y[j+1][i-1]-@y[j][i-1]).to_f/(@x[j+i]-@x[j]).to_f)
end
end
end
##########################################################################
# get
# Errechnet den zu x gehörigen y Wert
##########################################################################
def get(x)
#Errechnung des y Wertes auf Basis der in set erzeugten y-Werte
rg=0
for i in 0...@y[0].size
zw_erg=@y[0][i]
for j in 0...i
zw_erg*=(x-@x[j])
end
rg+=zw_erg
end
return rg
end
##########################################################################
# test-Funktion, die alle durch set errechneten Werte ausgibt
##########################################################################
def test
for i in 0...@x.size
x_text="X"+i.to_s+": "+@x[i].to_s
print(x_text)
end
for i in 0...@y.size
for j in 0...@y[i].size
y_text="Y ["+i.to_s+"|"+j.to_s+"]:"+@y[i][j].to_s
print(y_text)
end
end
end
end |
Nicht besonders schön, aber funktionstüchtig. Ob das jetzt für deine Zwecke zubenutzenistmusst du entscheiden Hanmac.
Kurze Erläuterung zur Funktionsweise:
1. irgendwo ein Exemplar der Funktion initalizieren
2. mit set die Punkte eingeben und zwar die Koordinaten als Array. Bsp: P1(0|3) P2(1|4) wird zu [0,3,1,4]
3. mit get(x) den y-Wert für x kriegen
Die test Funktion hab ich eigentlich zur Fehlersuche geschrieben, aber vielleicht kann man die ja nochmal gebrauchen.
Danke an alle die mir mit meinen Ruby Kentnissen geholfen haben und an Sir Isac Newton, der dieses wunderbare Verfahren zur Interpolation entwickelt hat.
Hm der Code is nicht richtig eingerückt... warum auch immer....


YAams
Random Signatur