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
1797
У меня на ссылку антивирус ругается. А вообще-то, если задача разбавить до нужной пропорции, то формулу и так вывести несложно.

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


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

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

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


25/02/11
1797
График нарисовать можно командой 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
1797
Аппроксимацию данных заданными функциями (методом наименьших квадратов) можно сделать с помощью команды 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
1797
От обоих аргументов $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
1797
По графику видно, что поправка растет с ростом разности между концентрациями. Так что естественно взть в качестве первого приближения функцию $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
1797
Это приближение для таблицы поправок, которую вы привели в 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
1797
Абсолютную погрешность я выше написал. Можете еще относительную посчитать.

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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