Fit data with a given equation for 3 variables

I want to fit my data to the following equation, but I dont know how to force the program to take the b values which i have, instead of calculating them automatically, I attached here my code which i wrote
fy = @(a,b,x) ((1-(x/a)).^(-a*b));
x = [0,0.1, 0.2, 0.3, 0.4, 0.46, 0.55, 0.6];
y = [0.001, 0.00111499, 0.0011926, 0.0013699, 0.00161633, 0.00192075, 0.00274991, 0.00357156];
b = [0, 1.1499, 0.963, 1.233, 1.540825, 2.001630435, 3.181654545, 4.285933333];
B = fmincon(@(c) norm(y - fy(c(1),c(2),x)), [1; 1], [],[],[],[], [0 0],[1 90]);
fprintf('PhiMax = %.15f\nVisco = %.15f\n', B)
xv = linspace(min(x), max(x));
figure(1)
plot(x, y, 'pg')
hold on
plot(xv, fy(B(1),B(2),xv), '-r')
hold off
grid

2 Comments

How should it be possible to have the value for b if you don't know the value for a ?
Indeed i am looking for the value of a

Sign in to comment.

 Accepted Answer

Torsten
Torsten on 24 May 2022
Edited: Torsten on 24 May 2022
Your function is not suited to reflect your data.
x = [0,0.1, 0.2, 0.3, 0.4, 0.46, 0.55, 0.6];
y = [0.001, 0.00111499, 0.0011926, 0.0013699, 0.00161633, 0.00192075, 0.00274991, 0.00357156];
b = [0, 1.1499, 0.963, 1.233, 1.540825, 2.001630435, 3.181654545, 4.285933333];
p0 = 1;
B = lsqnonlin(@(a)fy(a,x,y,b),p0,max(x),Inf)
fprintf('PhiMax = %.15f\nVisco = %.15f\n', B)
figure(1)
plot(x, y, 'pg')
hold on
plot(x, fy(B(1),x,y,b)+y, '-r')
hold off
grid
function res = fy(a,x,y,b)
res = ((1-(x/a)).^a).^b - y;
end

1 Comment

Thanks a lot, it works, I just need to multipy the function by 0.001.
function res = fy(a,x,y,b)
res = 0.001*((1-(x/a)).^a).^b - y;
end

Sign in to comment.

More Answers (1)

How about this?
You only need to think about c as follows:
fy = @(a,b,x) ((1-(x/a)).^(-a*b));
x = [0,0.1, 0.2, 0.3, 0.4, 0.46, 0.55, 0.6];
y = [0.001, 0.00111499, 0.0011926, 0.0013699, 0.00161633, 0.00192075, 0.00274991, 0.00357156];
b = [0, 1.1499, 0.963, 1.233, 1.540825, 2.001630435, 3.181654545, 4.285933333];
B = fmincon(@(c) norm(y - fy(c,b,x)),1,[],[],0,1)
Converged to an infeasible point. fmincon stopped because the size of the current step is less than the value of the step size tolerance but constraints are not satisfied to within the value of the constraint tolerance. Consider enabling the interior point method feasibility mode.
B = 6.6511e+03

1 Comment

Thank you for the suggestion but the fitting plot is not working

Sign in to comment.

Categories

Products

Release

R2021b

Asked:

on 24 May 2022

Commented:

on 24 May 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!