Как установить неявное уравнение в набор данных с одним параметром: MATLAB

58
7

Я пытаюсь подставить неявное уравнение к набору данных, извлеченных из бумаги, как показано ниже.

image from paper

Набор данных содержит концентрацию частиц, phi, через зазор радиуса R Данные для phi и R приведены ниже.

phi(Ri) = phi(1);
Ri = R(1);
n = 2;
phiM = 0.68
Kc / Ku = fitting parameters.
R = [4.47 4.59 4.69 4.81 4.92 5.02 5.13 5.24 5.35 5.46 5.57 5.68];
phi = [0.569 0.570 0.573 0.576 0.578 0.581 0.585 0.589 0.593 0.595 0.598 0.602];

Я пытаюсь установить уравнение 16 в предоставленный набор данных. Я полностью потеряю, как подогнать уравнение к набору данных, где phi находится по обе стороны от уравнения. Я уже установил данные в уравнение. Однако он всегда был явным (y = f(x)).

Каждый раз, когда я пытаюсь ввести уравнение подгонки в панель инструментов подбора кривой, я предупреждаю, что я не могу иметь y по обе стороны уравнения. Что мне делать для этих типов уравнений, где инструмент подгонки кривой не может быть использован?

Любая помощь или руководство в отношении того, как я могу научиться двигаться по такой штуковине, очень оценят.

спросил(а) 2017-07-04T15:13:00+03:00 3 года, 3 месяца назад
1
Решение
58

Давайте начнем с определения ваших известных переменных, как указано в вашем вопросе:

% Known parameters
R = [4.47 4.59 4.69 4.81 4.92 5.02 5.13 5.24 5.35 5.46 5.57 5.68];
phi = [0.569 0.570 0.573 0.576 0.578 0.581 0.585 0.589 0.593 0.595 0.598 0.602];
phi_Ri = phi(1); Ri = R(1);
n = 2; phiM = 0.68;

Теперь определите свою функцию, но вычтите левую сторону, чтобы мы могли уравнять уравнение равным нулю. Эта функция будет находиться в терминах параметра x (R), параметра y (phi) и единственного неизвестного kk который определяется как Ku/Kc в (16).

F = @(x,y,kk) ((x/Ri).^2).*((1-phi_Ri/phiM)./(1-y/phiM)).^(n*(1-kk)) - (y/phi_Ri);

Теперь мы можем использовать fminsearch с некоторым начальным предположением для kk, чтобы найти "лучшее" значение. Вы можете определить "лучший", как вам нравится, в этом случае я принял норму F, что означает расстояние между рассчитанными координатами x и y и заданными значениями для R и phi. Поскольку функция F должна быть равна 0, минимизация ее имеет смысл!

% Min search based on norm, with initial guess KuKcMin = 1
KuKcMin = fminsearch(@(KuKc) norm(F(R,phi,KuKc)), 1);

В этом примере KuKcMin = 1.6735 поэтому Kc/Ku = 1/1,6735 = 0,5975, что похоже на правую фигуру в бумаге.

Теперь мы должны использовать ezplot для построения неявной функции, мы также построим исходные точки.

ezplot(@(x,y)F(x,y,KuKcMin), [4.2,6,0.56,0.61]); % 4-element array is axes limits
hold on;
plot(R,phi,'o');
xlabel('R'); ylabel('\phi'); title('');

Выход:

output

Вы можете проверить правильность работы графика и функции F, изменив параметры n, phiM и KuKcMin чтобы воспроизвести графики в приведенной выше статье:

output 2

Редактировать:

Диапазон осей, передаваемый в качестве входа в ezplot представляет собой весь диапазон построения, а не только то, что видно. Ваши новые данные не лежат в старых пределах, поэтому мы должны адаптироваться!

phi = [0.285 0.285 0.293 0.298 0.299 0.303 0.309 0.310 0.310 0.312 0.315 0.317 0.318 0.318 0.321 0.321 0.321 0.324 0.327 0.325 0.326 0.332 0.335 0.333 0.336];
R = [4.190 4.365 4.540 4.714 4.889 5.063 5.238 5.413 5.587 5.762 5.937 6.111 6.286 6.460 6.635 6.810 6.984 7.159 7.333 7.508 7.683 7.857 8.032 8.206 8.381];
phi_Ri = phi(1); Ri = R(1); n = 2; phiM = 0.68;
F = @(x,y,kk) ((x/Ri).^2).*((1-phi_Ri/phiM)./(1-y/phiM)).^(n*(1-kk)) - (y/phi_Ri);
KuKcMin = fminsearch(@(KuKc) norm(F(R,phi,KuKc)), 1);
% NOTE: change the ezplot <-- axes limits -->
ezplot(@(x,y)F(x,y,KuKcMin), [4.18,8.4,0.28,0.34]); % 4-element array is axes limits
hold on; plot(R,phi,'o'); xlabel('R'); ylabel('\phi'); title('');

Чтобы сделать ваш код более универсальным, вы всегда можете использовать ezplot в том же диапазоне, что и ваши данные. Возможно, вы захотите добавить прописку или округление.

ezplot(@(x,y)F(x,y,KuKcMin), [min(R),max(R),min(phi),max(phi)]);

Выход:

output 3

ответил(а) 2017-07-04T16:34:00+03:00 3 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема