Fit data with a given equation for 3 variables
8 views (last 30 days)
Show older comments
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
Torsten
on 24 May 2022
How should it be possible to have the value for b if you don't know the value for a ?
Accepted Answer
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
More Answers (1)
Hiro Yoshino
on 24 May 2022
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)
See Also
Categories
Find more on Least Squares in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!