How to fit data!

8 views (last 30 days)
재열 김 on 25 Jan 2022
Commented: Star Strider on 27 Jan 2022
I have experimental data and I need to represent it as a function of x using the MATLAB fitting tool.
However, the obtained experimental data were non-linear and were fitted by dividing the intervals.
The problem here is that the fitting is made so that the function values at the points connecting the sections do not match.
Is there a way or code to fix and fit the end value of the interval?
A data example is attached.
It's a long question, but I'll wait for an answer. Thank you.
(If there is an efficient way to represent it as a function, please let me know!)
- There may be some awkward parts using a translator! :)
재열 김 on 26 Jan 2022
@Image Analyst Oh, I edited the post and attached the data. Thanks!

Star Strider on 25 Jan 2022
This is something similar to Curve Fitting of large Data Measurement? however with a different sort of envelope. I would begin by using the envelope function to get the general shape of the envelope, derive a function that describes it mathematically in terms of the other data (time, amplitude, frequency, perhaps others), then change the code in the Answer I linked to in order to fit the entire function to the data (unless the desired result is only to determine a function for the envelope, if so stop after the envelope determination step).
Star Strider on 27 Jan 2022
It ocurred to me that this could be a straighttforward system identification problem, and would automatically code for the envelope function as well, since that may not be possible to correctly estimate otherwise.
For best results, I need to know what the inputs were to the system that produced those outputs. It should be a vector (or matrix) of corresponding sample times. The system identification is not going to work well without knowing the inputs.
T1 = 251×4 table
x Fx Fy Fz ______ ___________ ___________ _________ 0 0.0016495 -0.00014195 0.0053701 1.0935 0.0014762 0.00023496 0.0051739 2.187 0.00032598 -0.00015709 0.0054594 3.2804 0.00029656 0.00070307 0.0056151 4.3739 0.0012309 -8.01e-05 0.006997 5.4674 0.00016371 -9.65e-05 0.0090012 6.5609 -0.00035602 -9.09e-05 0.0082262 7.6544 -0.0001414 1.35e-06 0.0081911 8.7478 0.0012345 0.00030346 0.0098071 9.8413 0.0015556 0.00011919 0.010114 10.935 -0.00026018 0.00052635 0.015164 12.028 0.0015505 0.00011503 0.016601 13.122 0.0011482 -1.83e-05 0.021914 14.215 0.00087075 -6.07e-05 0.022012 15.309 -0.00092485 7.86e-05 0.02872 16.402 -0.0023217 0.0007304 0.031215
x = T1.x;
Fx = T1.Fx;
Ts = mean(diff(x)) % Sampling Interval
Ts = 1.0935
% Tsd = std(diff(x)) % Check Sampling Time Consistency
Fx_data = iddata(Fx,[],Ts)
Fx_data = Time domain data set with 251 samples. Sample time: 1.09348 seconds Outputs Unit (if specified) y1
Fxss_sys = ssest(Fx_data, 8)
Fxss_sys = Continuous-time identified state-space model: dx/dt = A x(t) + K e(t) y(t) = C x(t) + e(t) A = x1 x2 x3 x4 x5 x6 x7 x8 x1 0.009635 0.2412 0.006551 0.01099 -0.03323 -0.1819 -0.2486 -0.04133 x2 -0.232 0.01263 -0.03631 0.02909 -0.1952 -0.04111 -0.0001147 0.04236 x3 -0.008426 0.03976 -0.08719 0.3809 -0.03252 -0.1163 -0.3864 -0.743 x4 -0.01136 -0.0002404 -0.2501 -0.1937 0.3994 -0.6713 -0.6635 -0.07726 x5 -0.03699 0.01098 -0.2085 -0.01034 -0.2836 -0.03551 -1.613 -2.127 x6 -0.02895 0.04372 -0.9473 0.008575 -0.7482 -6.161 -9.695 -7.186 x7 -0.01104 0.1119 -0.7441 -0.04221 0.04838 -2.865 -5.675 -6.342 x8 -0.02755 0.09637 -0.9548 0.04119 0.3045 -3.905 -4.536 -7.763 C = x1 x2 x3 x4 x5 x6 x7 x8 y1 17.69 0.1826 -0.1761 0.2149 0.007997 0.4935 0.3214 -0.0009668 K = y1 x1 0.334 x2 0.5631 x3 -6.595 x4 2.645 x5 1.094 x6 7.102 x7 1.62 x8 -1.852 Parameterization: FREE form (all coefficients in A, B, C free). Disturbance component: estimate Number of free coefficients: 80 Use "idssdata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using SSEST on time domain data "Fx_data". Fit to estimation data: 98.57% (prediction focus) FPE: 0.0002877, MSE: 0.0002532
figure
compare(Fx_data, Fxss_sys)
.