How Can I Fit a Curve Using Least Squares for My Custom Equation?

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 2K views
pazmush
Messages
32
Reaction score
0
The main problem is that I have no idea what I am doing. But second to that I am attempting to fit a curve to some data using the equation

y = ((1/A(x-B)^(C+1))+D)^-1

if that makes sense

I need to get the values for A,B,C and D and so have been looking into lsqnonlin but I am having problems. I may also be making life hard for myself as I am also trying to incorporate it into a GUI. Here is an example of what I have been trying

this is my function

Code:
   function F = myfun(x,Vg,Gd)
        A = x(1);
        B = x(2);
        C = x(3);
        D = x(4);
        
        F = (((1/(A.*(x-B)^(C+1)))+D)^-1)-Gd;
    end

this is how I attempt to use lsqnonlin

Code:
 cla reset;
     Vg = A.data(:,1);
     Id = A.data(:,6);
     Vd = A.data(:,5);
     Gd = (Id./Vd);
     
    
    x=lsqnonlin(@myfun,[1*10^9 -1 1 3*10^5],[],[],[],Vg,Gd);
    %Gd_new = (((1/(x(1).*(x-x(2))^(x(3)+1)))+x(4))^-1);
    %semilogy(Vg,Gd,'o',Vg,Gd_new);

can anyone give me a hand in either starting again or making this work?

thanks
 
on Phys.org
is this matlab?

I have a problem with the choice of variable names.

You know that array x() that you have chosen to pass 4 constants (A,B,C,D) in one shot into the function? How come that the scalar x, and I mean the only 'x' in the equation, has the same name? I think you have to decouple those two things, for starters.
 
If your problem is that you have vectors x and y that contain your data, and you want to find A, B, C and D for the equation shown as a fit to that data, try the curve fitting toolbox. Run cftool, select x and y as your data set, then under fit select custom equation and you can enter the equation in the form you want, and it will calculate the coefficients.