PDA

Просмотр полной версии : Нужно построить уравнение поверхности. Подскажите программу.


Lexander
15.11.2012, 07:31
Есть 8-битное изображение BMP шириной в 1000 пикселей и высотой в 70 пикселей. Каждый пиксел изображения имеет яркость от 0 до 255. Нужно построить функцию вида I = f (x, y) , где I - яркость пикселя (0..255), х и y - координаты пикселя (х=1..1000, y=1..70). Нужна программа, в которую можно вставить матрицу 1000х70 и которая построит по ней функцию I=f(x,y). Excel строит поверхность, но не строит функцию. А мне надо функцию именно узнать. Есть такая программа?

Hogfather
15.11.2012, 08:03
Нужна программа, в которую можно вставить матрицу 1000х70 и которая построит по ней функцию I=f(x,y). Excel строит поверхность, но не строит функцию. А мне надо функцию именно узнать. Есть такая программа?

Lexander, например, GNU R (http://aspirantura.spb.ru/forum/showthread.php?t=10501).
Только сформулируйте задачу непротиворечиво: построить I по х,у при известной f, или аппроксимировать f по x,y,I. Это несколько разные задачи.
Вам полиномище что-ли нужен? Дык, это и Excel умеет...

Вот это
Excel строит поверхность, но не строит функцию.
вызвало разрыв шаблона.

Lexander
15.11.2012, 09:04
Функция задана таблично. То есть матрица чисел 1000х70. y принимает значения от 1 до 70 (строки), x от 1 до 1000 (столбцы). Сами числа в матрице - от 0 до 255, это I. Нужно узнать уравнение вида I = f (x, y), то бишь найти f. Например такого вида: I = a*х^2 + b*y^2 (параболоид).

Добавлено через 14 минут
Вот пример. Создал матрицу 3х3, заполнил произвольными числами, построил поверхность (Excel). Для двумерных графиков можно добавить линию тренда и узнать уравнение у=f(x). А как для трехмерного графика узнать уравнение z=f(x,y) в Excel?
http://www.emaenu.pisem.net/g.jpg

ptrvc
15.11.2012, 09:37
Maple должен это уметь.

Hogfather
15.11.2012, 10:23
Ну, я не пробовал подгонять двухпараметрическую функцию, но можем и попробовать.

># Инициируем данные

> MyData<-data.frame(x=c(rep(c(1,2,3),3)),y=c(1,1,1,2,2,2,3, 3,3))
> MyData$I<-MyData$x^2-MyData$y^2

># Таращимся на результат
> MyData
x y I
1 1 1 0
2 2 1 3
3 3 1 8
4 1 2 -3
5 2 2 0
6 3 2 5
7 1 3 -8
8 2 3 -5
9 3 3 0

># Подключаем доступ к переменным из таблицы по именам
> attach(MyData)
> (MyMdl<-lm(I~x+y+x*y+I(x^2)+I(y^2)))
> summary(MyMdl)

Call:
lm(formula = I ~ x + y + x * y + I(x^2) + I(y^2))

Residuals:
1 2 3 4 5 6 7
1.436e-16 -3.583e-16 2.147e-16 -5.121e-17 2.445e-16 -1.933e-16 -9.244e-17
8 9
1.138e-16 -2.139e-17

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.067e-15 1.322e-15 1.563e+00 0.216
x -1.776e-15 9.840e-16 -1.805e+00 0.169
y 2.989e-16 9.840e-16 3.040e-01 0.781
I(x^2) 1.000e+00 2.298e-16 4.351e+15 <2e-16 ***
I(y^2) -1.000e+00 2.298e-16 -4.351e+15 <2e-16 ***
x:y -3.065e-16 1.625e-16 -1.886e+00 0.156
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.25e-16 on 3 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 3.711e+32 on 5 and 3 DF, p-value: < 2.2e-16

# Дальше по одному убираем лишнее
# Курс по аппроксимации МНК читать не собираюсь.
# финальная стадия

> MyMdl<-lm(I~I(x^2)+I(y^2)+0)
> summary(MyMdl)

Call:
lm(formula = I ~ I(x^2) + I(y^2) + 0)

Residuals:
Min 1Q Median 3Q Max
-4.899e-16 -1.357e-16 -2.659e-17 8.422e-17 3.775e-16

Coefficients:
Estimate Std. Error t value Pr(>|t|)
I(x^2) 1.000e+00 2.336e-17 4.282e+16 <2e-16 ***
I(y^2) -1.000e+00 2.336e-17 -4.282e+16 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.985e-16 on 7 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 1.1e+33 on 2 and 7 DF, p-value: < 2.2e-16

> anova(MyMdl)
Analysis of Variance Table

Response: I
Df Sum Sq Mean Sq F value Pr(>F)
I(x^2) 1 32.667 32.667 3.6663e+32 < 2.2e-16 ***
I(y^2) 1 163.333 163.333 1.8331e+33 < 2.2e-16 ***
Residuals 7 0.000 0.000
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Предупреждение
In anova.lm(MyMdl) :
применение F-критерия для в целом хорошей подгонки бессмысленно

# Убираем за собой
> detach(MyData)


Где-то так. R также работает с матрицами, но я в этом пока не разбирался, поэтому матрицу развернул. Думаю, идея понятна.

Lexander
15.11.2012, 10:27
Maple должен это уметь.
Установил Maple 7. Он не строит функций.

phys2010
15.11.2012, 10:49
Почему не строит? Замечательно строит. Почитайте "Maple V Power Edition" (Б.М. Манзон), там все описано. Скачать можно здесь (http://bookfi.org/).

А... речь идет не о графике, а о самой функции. Тогда не скажу... Могу лишь посоветовать более полное руководство по Maple: "Maple 6. Решение задач высшей математики и механики" (Матросов А.В.).

Lexander
15.11.2012, 10:57
phys2010, мне бы лучше ссылку, где скачать сам Maple, чтоб не ознакомительная версия, и чтоб бесплатно, если такое счастье возможно...

Видимо я не тот Maple установил. В моём Maple в справке написано: "Maple - удобный и легкий в использовании менеджер документов, который позволяет создавать иерархические деревья для хранения документов, заметок, изображений, и т. д.". Выглядит он как текстовый редактор.

Сейчас начал скачивать нужный Maple, потом посмотрел на размер - 1,9 Гб и прекратил скачивать. Мне бы что-нибудь не такое весомое... А книжку я скачал на всякий случай.

Hogfather
15.11.2012, 11:02
Hogfather, это MATLAB?

Lexander, например, GNU R.
:facepalm:

Lexander
15.11.2012, 11:20
Вам полиномище что-ли нужен? Дык, это и Excel умеет...Согласен на полином. Как его построить для трёхмерного графика в Excel?

phys2010
15.11.2012, 11:26
Сейчас начал скачивать нужный Maple, потом посмотрел на размер - 1,9 Гб и прекратил скачивать. Мне бы что-нибудь не такое весомое... А книжку я скачал на всякий случай.
Не тот... Размер файла порядка 30 метров. Скачать можно здесь (http://szenprogs.ru/load/maple/24-1-0-457).

Lexander
15.11.2012, 11:31
Когда двумерный график строю, потом кликаю на кривую правой мышью (это я про Excel), потом выбираю "Добавить линию тренда", потом выбираю "Полиномиальная 2 степень", потом захожу на вкладку "Параметры" и ставлю две галочки: "показывать уравнение на диаграмме" и "поместить на диаграмму величину достоверности аппроксимации R^2". А для трёхмерного графика как построить "поверхность тренда" и вывести её уравнение?

Добавлено через 2 минуты
Не тот... Размер файла порядка 30 метров. Скачать можно здесь (http://szenprogs.ru/load/maple/24-1-0-457).
Зашёл я по ссылке, выбрал бесплатное скачивание, а мне пишут: "Для БЕСПЛАТНОГО пробного периода на 24 часа введите свой телефон:". :(

Hogfather
15.11.2012, 11:34
Подключаете пакет анализа в Excel, запускаете.
http://aspirantura.spb.ru/forum/picture.php?albumid=36&pictureid=799
Внизу есть меню "Регрессия"
Во вложении результат.
Алгоритм тот же, что показан в R, возможности победнее.

P.S. В умелых руках и [...] балалайка!
P.P.S. А вообще, уравнение для 70 тысяч пар точек это сильно.

phys2010
15.11.2012, 12:17
Зашёл я по ссылке, выбрал бесплатное скачивание, а мне пишут: "Для БЕСПЛАТНОГО пробного периода на 24 часа введите свой телефон:".
Так откажитесь :) Нажмите на "нет, спасибо" и тогда на следующей странице появится - "скачать файл".

Lexander
15.11.2012, 12:44
1. Перехожу по ссылке http://szenprogs.ru/load/maple/24-1-0-457
2. Нажимаю "Скачать с www.unibytes.com (31.3 МБ)"
3. Нажимаю кнопку "Бесплатно"
4. Появляется текст "Для БЕСПЛАТНОГО пробного периода на 24 часа введите свой телефон:"

В какой момент должна была появиться ссылка "нет, спасибо"?

phys2010
15.11.2012, 13:01
4. Появляется текст "Для БЕСПЛАТНОГО пробного периода на 24 часа введите свой телефон:"
Здесь (последняя строчка на странице - мелкими буквами):
"Вам придет SMS с кодом для проверки номера телефона.
Пробный доступ дается ровно на 24 часа (*) , то есть на одни сутки.
Второй раз на вторые сутки пробный период не предоставляется.
нет, спасибо"

Lexander
15.11.2012, 13:08
Да не там ссылки "нет, спасибо". Вот скриншот:
http://emaenu.pisem.net/gg.jpg

phys2010
15.11.2012, 13:16
Понятно, исчерпан лимит на скачивание. Ждать 30' смысла нет, гораздо быстрее можно найти альтернативу в интернете. Ориентируйтесь на описание, данное здесь (http://szenprogs.ru/load/maple/24-1-0-457).

Lexander
15.11.2012, 13:20
Та... всё равно, я понял, Maple - как Excel строит только график. А мне бы надо чтобы строило уравнение.

phys2010
15.11.2012, 14:02
В Maple есть пакет статистики stats. Команда fit позволяет строить функции. Например:

with(stats):
fit[leastsquare[[x,y], y=a*x^2+b*x+c]]( [[10,15,17,19],[3,4,5,6]]);

дает

y=(417/13358)x^2+(7583/13358)x+37054/6679

По поводу 2-x параметрической функции не скажу. Надо пробовать...

Hogfather
15.11.2012, 14:10
phys2010, я так понимаю, ТС мечтает о Халяве, чтобы кнопку мышки нажать и получить Уравнение.
Я предложил Выше 2(два) решения с примерами. В R и Excel. Про исключение членов a posteriori, а также обоснование степени полинома я уж говорить не стал, чтобы не расстраивать.
В R наверняка более красивое решение, просто мне лень искать среди пакетов нужный.

phys2010
15.11.2012, 14:15
Hogfather, я тоже думаю, что обсуждение пора заканчивать...

Paul Kellerman
16.11.2012, 16:17
Установил Maple 7
В Инете давно уже Maple 15 лежит. А вообще займитесь RTFM, очень полезное занятие.

Полищук Андрей
22.11.2012, 13:25
В Инете давно уже Maple 15 лежит. А вообще займитесь RTFM, очень полезное занятие.

Однако, есть нюанс :smirk: . Maple 15 очень проприетарная программа. Скорее всего, дороже 2000 USD в профессиональной версии, и примерно 2/3 от этого в академической.
Maple 7 и 8 можно использовать легально для любого применения. Но это серьёзная математическая программа, которая требует знания математики, понимания, что Вы хотите.