How can I fit data to a system of implicit equations?
조회 수: 10 (최근 30일)
이전 댓글 표시
The goal is to find the best fit for unknown parameters (A1, A2, A3, A4) to fit experimental data to a system of implicit equations
y1 = (A3*(x/(x+A1))*exp(B1*(B2-B3+A4-y1*V1*A2)))
y2 = (A3*(x/(x+A1))*exp(B1*(B2-B3+A4-y2*V2*A2)))
y3 = (A3*(x/(x+A1))*exp(B1*(B2-B3+A4-y3*V3*A2)))
y4 = (A3*(x/(x+A1))*exp(B1*(B2-B3+A4-y4*V4*A2)))
Here
- x is the independent variable
- y is the dependent variable.
- B1, B2 and B3 as well as V1, V2, V3, V4 are known constants
- A1, A2, A3, and A4 are unknown parameters that I want to use the code to find.
For example:
B1= -40;
B2 = 0.1;
B3 = 0.5;
V1 = 20e-4; V2 = 40e-4, V3 = 60e-4, V4 = 60e-4
x, y1, y2, y3, y4 are experimental data arrays
x = [240;220;195;170;145;120;95;75;50;35;25;12.5;6;0]*1e-6;
y1 = [-1;-0.95;-0.94;-0.90;-0.87;-0.84;-0.77;-0.67;-0.56;-0.48;-0.37;-0.20;-0.13;0];
y2 = [another array, similar format];
y3 = [another array, similar format];
y4 = [another array, similar format];
Note: all four equations have the same format where x is an independent variable, and y is the measured experimental output (dependent variable). One constant is different between the equations (reaction volume: V1, V2, V3 and V4).
Thanks in advance
댓글 수: 0
답변 (2개)
the cyclist
2021년 1월 5일
I'm pretty sure that this is a really tricky problem to solve, and I am not certain it can be done in MATLAB. (When I say this, usually someone posts within 5 minutes with an obvious solution, so I hope that that happens!)
But, I thought I could share some thoughts, and maybe it wlil help.
You might be able to solve this with the fitglm function from the Statistics and Machine Learning Toolbox.
First step, which I think is possible if you take the log of both sides of the equation, is to isolate the x terms and the y terms onto the two sides of the equation.
Next step is to define the custom link function that links the x and y sides of the generalized regression. That's where it gets tricky, I think. If I'm not mistaken the inverse function you'll need is not simple -- I think it might require the Lambert W function.
So, sorry I can't actually write out a simple, straightforward answer. I hope someone else can.
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!