Smalltalk Вандермонде-матрица
Короче говоря, это матрица Вандермонда, и у меня есть проблема для запуска во втором измерении массива.
'add meg M-et majd N-et (enter kozotte)(az 1. sor az 1-es szam hatvanyai)' displayNl.
M := stdin nextLine asInteger.
N := stdin nextLine asInteger.
|tomb|
tomb := Array new: M.
x := 1.
y := 1.
a := M + 1.
b := N + 1.
x to: a do: [ :i|
tomb at:x put: (Array new: N) y to: b do: [ :j |
x at: y put: (x raisedTo: y - 1) ] ].
tomb printNl.
1 ответ
Вот хороший способ создать матрицу, для которой у нас есть выражение общей записи aij
:
Matrix class >> fromBlock: aBlock rows: n columns: m
| matrix |
matrix := self rows: n columns: m.
matrix indicesDo: [:i :j | | aij |
aij := aBlock value: i value: j.
matrix at: i at: j put: aij].
^matrix
С помощью вышеуказанного метода вы можете теперь реализовать
Matrix class >> vandermonde: anArray degree: anInteger
^self
fromBlock: [:i :j | (anArray at: i) raisedTo: j - 1]
rows: anArray size
columns: anInteger + 1
РЕДАКТИРОВАТЬ
Я только что понял, что в Pharo есть способ создать матрицу из выражения его aij
это называется rows:columns:tabulate:
поэтому мой ответ сводится к:
Matrix class >> vandermonde: anArray degree: anInteger
^self
rows: anArray size
columns: anInteger + 1
tabulate: [:i :j | (anArray at: i) raisedTo: j - 1]