Using tabular data for Curve fitting of function z = f (x, y) with incomplete values of z. These blank z (i, j) automatically takes zero values and this is a problem

조회 수: 2 (최근 30일)
Dear Community Members,
I have tabular data for data selection in the Curve fitter in the form of:.
I have to use curve fitter for z = f (x, y), but I don't have values for z(2, 4), z(3,3) and z(3,4) (red one).
In the workspase variable (matrix Z) these blank places automatically take values, which is zeros. Is there any instrument to ignore these zeros and the regression analyses to be made only with the available z values. In other words to ignore the three zero values in the down right corner? May be something with the weights instrument? If I simply use the matrix with zero values, without any additional actions, of course the regression method uses these z(2, 4) = 0, z(3,3) = 0 and z(3,4) = 0 and the results are unacceptable.
  댓글 수: 2
Torsten
Torsten 2024년 9월 23일
Supply z as a vector instead of a matrix and don't list these three data points in the vector. What's the problem ?
Boyan
Boyan 2024년 9월 25일
Hi, Torsten,
The data is shown in picture below. x(i) is in green, y(j) is in blue. Z values simply form a matix, I think that I can't supply them as a vector.
I have no problem to obtain formula coefficients, if there are values in the right down corner.
In fact there is second issue, but this is asked in another question. The second issue is that there is no problem with regression analyses if the formula is z = a*x^n/y^m, but have problem when adding the "b" in the denominator and the formula is z = a*x^n/(y+b)^m.
So, to return to the first issue – how to make the regression method just to ignore missing values in the right down corner instead thinking for them like zeros.

댓글을 달려면 로그인하십시오.

채택된 답변

Torsten
Torsten 2024년 9월 25일
편집: Torsten 2024년 9월 25일
green = [5 5 5 5 5 4 4 4 4 1 1 1];
blue = [5 10 15 20 25 5 10 15 20 5 10 15];
yellow = [455 322 261 205 169 410 306 246 191 257 185 151];
F = @(p) fun(p,green,blue,yellow);
p0 = [1 1 1 1];
p = lsqnonlin(F,p0);
Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance.
F(p)
ans = 1×12
1.7303 9.7596 9.9255 -10.0906 -21.7707 -12.4649 14.9799 11.9889 -9.4727 -5.7667 3.9900 5.4487
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
norm(F(p))
ans = 38.2707
a = p(1)
a = 674.6751
n = p(2)
n = -0.5377
b = p(3)
b = -0.2283
m = -p(4)/2
m = -0.0748
function res = fun(p,green,blue,yellow)
a = p(1);
n = p(2);
b = p(3);
m = p(4);
res = yellow - a*blue.^n.*((green+b).^2).^m;
end

추가 답변 (1개)

Cris LaPierre
Cris LaPierre 2024년 9월 25일
I'd suggest using the standardizeMissing function to convert the 0 values to nan. The Curve Fitter app will ignore NANs.
  댓글 수: 1
Boyan
Boyan 2024년 9월 29일
Thank you, @Cris LaPierre,
Your advice also works (like "the vector approach" of @Torsten). I implemented it with small change. I have simply import (with "import data" tool) Excel table (the matrix) and the the blank cells became NaN. Already with NaN it works. Before I simply input the table data by hand and leave blank cells in the down right corner of the matrix and the cellc automatically have accepted value of 0.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Linear and Nonlinear Regression에 대해 자세히 알아보기

제품


릴리스

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by