2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 15:33 


31/07/16
10
Доброго времени суток!
Есть такая табличка.
Возможно ли получение графика и его формулы по этим значениям? Т.е., чтобы формула могла по двум значениям:
  1. Крепость разводимого спирта
  2. Желаемая крепость
высчитать необходимый объем воды.
Если необходимо привести данные в какой либо вид - напишите, сделаю.
Спасибо.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 20:09 
Заслуженный участник


25/02/11
1786
У меня на ссылку антивирус ругается. А вообще-то, если задача разбавить до нужной пропорции, то формулу и так вывести несложно.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 20:15 


31/07/16
10
Vince Diesel в сообщении #1141181 писал(а):
У меня на ссылку антивирус ругается. А вообще-то, если задача разбавить до нужной пропорции, то формулу и так вывести несложно.

У вас антивирус на картинку ругается? Странно.. Вот на Яндексе.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 21:25 
Заслуженный участник


25/02/11
1786
График нарисовать можно командой ListPlot3D[lst], если представить данные в виде списка элементов вида {крепость разводимого, крепость разведенного, объем воды}: lst={{35,30,167},...}.

Если бы жидкость была бы одна и та же, то формула для добавочного объема была бы $k=\frac nm-1$, где $n$ $-$ крепость разводимого, $m$ $-$ крепость разведенного. Однако сравнение с таблицей показывает, что есть небольшие отличия. Есть ли формула для них, лучше спросить химиков. Функцию можно приближать другими функциями разными способами. Так что неплохо бы знать, с помощью каких функций описывается эта зависимость. Или это чисто экспериментальные данные в таблице?

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 21:29 


31/07/16
10
Vince Diesel в сообщении #1141189 писал(а):
Или это чисто экспериментальные данные в таблице?

Экспериментальные. Товарищ Фертман в каком-то давнем году их еще получил. А формулу требуется получить апроксимацией или чем-нибудь подобным.. Необязательно 100% попадание в число.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 22:16 
Заслуженный участник


25/02/11
1786
Аппроксимацию данных заданными функциями (методом наименьших квадратов) можно сделать с помощью команды NonlinearModelFit[lst,...], используя все тот же список lst. Но, прежде чем выбирать модель, имеет смысл вычесть главное слагаемое, которое я привел выше, и построить график остатка, чтобы прикинуть, на что оно похоже.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 22:28 


31/07/16
10
Vince Diesel в сообщении #1141207 писал(а):
построить график остатка, чтобы прикинуть, на что оно похоже

График зависимости остатка от какого значения нужно построить? Остаток то я получил, но какой график построить?

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 23:10 
Заслуженный участник


25/02/11
1786
От обоих аргументов $m,n$ все той же командой ListPlot3D.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение31.07.2016, 23:46 


31/07/16
10
Vince Diesel в сообщении #1141227 писал(а):
От обоих аргументов $m,n$ все той же командой ListPlot3D.

Код:
lst2 = {{35, 30, 0.333}, {40, 30, 1.667}, {40, 35, 1.143}, {45, 30,
   5}, {45, 35, 4.286}, {45, 40, 2}, {50, 30, 7.333}, {50, 35,
   7.429}, {50, 40, 5}, {50, 45, 2.889}, {55, 30, 11.667}, {55, 35,
   11.571}, {55, 40, 9}, {55, 45, 6.778}, {55, 50, 3}, {60, 30,
   17}, {60, 35, 15.714}, {60, 40, 14}, {60, 45, 10.667}, {60, 50,
   7}, {60, 55, 4.091}, {70, 30, 26.667}, {70, 35, 27}, {70, 40,
   24}, {70, 45, 21.444}, {70, 50, 17}, {70, 55, 12.273}, {70, 60,
   8.333}, {70, 65, 4.077}, {75, 30, 35}, {75, 35, 34.143}, {75, 40,
   31}, {75, 45, 27.333}, {75, 50, 23}, {75, 55, 18.364}, {75, 60,
   14}, {75, 65, 9.154}, {75, 70, 4.571}, {80, 30, 42.333}, {80, 35,
   41.286}, {80, 40, 39}, {80, 45, 34.222}, {80, 50, 30}, {80, 55,
   25.455}, {80, 60, 19.667}, {80, 65, 15.231}, {80, 70, 10.143}, {80,
    75, 5.333}, {85, 30, 50.667}, {85, 35, 49.429}, {85, 40, 47}, {85,
    45, 43.111}, {85, 50, 38}, {85, 55, 32.545}, {85, 60,
   26.333}, {85, 65, 21.308}, {85, 70, 16.714}, {85, 75, 10.667}, {85,
    80, 5.5}, {90, 30, 61}, {90, 35, 58.571}, {90, 40, 56}, {90, 45,
   52}, {90, 50, 47}, {90, 55, 40.636}, {90, 60, 35}, {90, 65,
   29.385}, {90, 70, 24.286}, {90, 75, 18}, {90, 80, 13}, {90, 85,
   6.176}, {95, 30, 72.333}, {95, 35, 70.714}, {95, 40, 68}, {95, 45,
   62.889}, {95, 50, 57}, {95, 55, 51.727}, {95, 60, 45.667}, {95, 65,
    39.462}, {95, 70, 33.857}, {95, 75, 28.333}, {95, 80, 21.5}, {95,
   85, 15.353}, {95, 90, 8.444}}
ListPlot3D[lst2]

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение01.08.2016, 11:25 
Заслуженный участник


25/02/11
1786
По графику видно, что поправка растет с ростом разности между концентрациями. Так что естественно взть в качестве первого приближения функцию $a(n-m)$. Выделив в массиве lst2 отдельно концентрации и объем воды
Код:
points = Most /@ lst2;
values = Last /@ lst2;

получаем аппроксимацию
Код:
f[n_, m_] = NonlinearModelFit[lst2, a (n - m) , {a}, {n, m}] //  Normal

$1.0213452873563218(n - m)$
C абсолютной погрешностью для разности dif между табличными значениями и полученным приближением
Код:
dif = f @@@ points - values;
Max@Abs@dif

$14.18681149425287$.

График невязки
Код:
tbl = Flatten /@ Transpose[{points, dif}];
ListPlot3D[tbl]

указывает возможное наличие еще квадратичной зависимости. С учетом того, что на диагонали $m=n$ поправка должа быть равна нулю, можно рассмотреть модель $f(m,n)=(n-m)(a+bm+cn)$:
Код:
f[n_, m_] = NonlinearModelFit[lst2, (n - m) (a + b m + c n), {a, b, c}, {n, m}] // Normal

$(0.005540957046615 m+0.0162448144131 n-0.5792105533534) (n-m)$.

Абсолютная погрешность в этом случае равна $2.787319623114883$. График разности уже более хаотический. Мб это уже в пределах погрешностей. Хотя, конечно, можно поиграться с добавлением слагаемых более высокого порядка.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение01.08.2016, 11:47 


31/07/16
10
Vince Diesel
Подставив значения, например:
n=35, m=30 получаю, к сожалению, совсем непригодные значения.. Может для этой таблицы вообще невозможно вывести подходящую формулу.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение01.08.2016, 14:14 
Заслуженный участник


25/02/11
1786
Это приближение для таблицы поправок, которую вы привели в lst2. Для исходной функции надо добавить основное слагаемое: $h(n,m)=f(n,m)+1000(n/m - 1) $.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение01.08.2016, 15:28 


31/07/16
10
Vince Diesel
Извините за наглость, но не могли бы вы написать конечную функцию? А то я совсем нуб в этих делах, да и на работе нет возможности установить Математику, чтобы попробовать сделать самому. Заранее спасибо.
Разобрался.
UPD. Большое Вам спасибо! При беглой проверке, вроде как получаемые значения находятся в допустимых пределах. Дальше получше посмотрю.

 Профиль  
                  
 
 Re: [Mathematica] Получение функции по точкам
Сообщение01.08.2016, 19:16 
Заслуженный участник


25/02/11
1786
Абсолютную погрешность я выше написал. Можете еще относительную посчитать.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: gris


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group