# Non Linear Regression for a surface

3 次查看（过去 30 天）
Hidd_1 2023-6-29

I have the following matrices, and their dimensions:
X (1*249 double)
Y (1*20 double)
Z (20*249 double)
I know that the relation between X and Z is a Sigmoid function ( Z = 1/exp(b(1).*X + b(2))).
I would like to find a function Z = function(X,Y), with the variables X, and Y.
##### 2 个评论显示 1更早的评论隐藏 1更早的评论
Hidd_1 2023-6-29
I think a function like objfun = @(b,X,Y) b(1) + (Y.*b(2))./(b(3) + exp(-b(4).*X + b(5)));
where objfun should fit the Z data.

### 采纳的回答

S0852306 2023-7-24

@Hidd_1 "I found a function that fitt the surface with R2 = 0.92, do you have any tips how can I improve it?"
R-squared: 0.999089
RMSE: 0.1797
MAE: 0.1202
The fitted surface match your data quite well. The model I used is a neural net, and its mathematical model is just lots of "weighted sigmoid function".
Notation: is point-wise sigmoid function, and are weight matrices and bias vectors
The neural net perform the following operation; Neural nets are universal approximator, so if you want further improvement, use a larger net, but be careful of overfitting.
clear; clc; close all;
Z=Inter_cubic;
% at file exchange: https://tinyurl.com/wre9r5uk
%% Reshape the data to required format
X= 1:1:249;
Y = 1:0.2:4.8;
count=0;
for i=1:numel(X)
for j=1:numel(Y)
count=count+1;
input(1,count)=X(i);
input(2,count)=Y(j);
output(count)=Inter_cubic(count);
end
end
%% model set up
NN.InputAutoScaling='on'; NN.LabelAutoScaling='on'; % perform normalization x'=(x-mean(x))/std(x)
NN.ActivationFunction='Sigmoid'; % 'Gaussian' actually performs better
InSize=2; OutSize=1; % input : x,y ,output : z=f(x,y)
LayerStruct=[InSize,5,5,5,OutSize]; % change the size of network here, e.x. [2,10,10,1];
NN=Initialization(LayerStruct,NN);
%% least square solver
option.MaxIteration=500;
NN=OptimizationSolver(input,output,NN,option);
%% stats
R=FittingReport(input,output,NN);
SST=sum((output-mean(output)).^2);
SSE=sum(R.ErrorVector.^2);
Rsquared=1-SSE/SST;
%% visualization
p=NN.Evaluate(input);
[Xmesh,Ymesh]=meshgrid(X,Y);
pMatrix=reshape(p,size(Z,1),size(Z,2));
figure
scatter3(input(1,:),input(2,:),output,'.')
hold on
s=surf(Xmesh,Ymesh,pMatrix);
s.EdgeColor='none';
legend('data point','fitted surface')
##### 3 个评论显示 2更早的评论隐藏 2更早的评论
Hidd_1 2023-7-27

Thank you very much! I have written the question on the file exchange page ? and I would be greatful if you can upload the live script which explain the math in details ;)

### 类别

Help CenterFile Exchange 中查找有关 Linear Predictive Coding 的更多信息

R2020a

### Community Treasure Hunt

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

Start Hunting!