Converting Matlab to C Code

The following code is the Matlab version which works perfectly:
Starting=[1 1 -1];
options=optimset('Display','iter');
Estimates=fminsearch(@myfit,Starting,options,t_d,Data)
function sse=myfit(params,Input,Actual_Output)
a=params(1);
b=params(2);
c=params(3);
Calling the Function:
Fitted_Curve = (1/(a*b))*(c-asinh(sinh(c)*exp(a*Input*2*pi)));
Error_Vector=Actual_Output-Fitted_Curve ;
sse=sum(Error_Vector.^2);
I have tried to replicate the function in C which looks like this:
static double function(int n, double x[])
{
double c;
double Fitted_Curve[5];
double Error_Vector[5];
int i;
double a, b, sum = 0;
double v1[5], v2[5], geom_inv[5], norm = 0, norm_2 = 0, v2sum = 0, x_coeff = 0;
// Actual_Output[5] = {1.2, 2.693, 4.325, 6.131, 8.125};
a = x[0];
b=x[1];
c=x[2];
for (i = 0; i <= 4; i++)
{
Fitted_Curve[i] = (1/(a*b))*(c-asinh(sinh(c)*exp(a*Input[i]*2*pi)));
Error_Vector[i] = Actual_Output[i]-Fitted_Curve[i];
}
for (i = 0; i <= 4; i++)
{
sum = sum + Error_Vector[i]*Error_Vector[i];
}
printf("sum = %f\n", sum);
a_global = a;
b_global = b;
// x_coeff_global = x_coeff;
return sum;
}
It runs but doesnt get the same result as the Matlab. The matlab is right, I know that, but the C doesnt get close enough

回答 (1 件)

Walter Roberson
Walter Roberson 2011 年 8 月 16 日

0 投票

Your MATLAB code is not right. We discussed this before here. You have too many inputs to "myfit"

1 件のコメント

Alex
Alex 2011 年 8 月 16 日
The Matlab works and it produces the correct values to 3dp. I'm not sure what you are spotting that I am not but I think you may be getting confused with the fact that it is sent first to the function fminsearch which then send myfit the correct information, because it works

この質問は閉じられています。

質問済み:

2011 年 8 月 16 日

閉鎖済み:

2021 年 8 月 20 日

Community Treasure Hunt

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

Start Hunting!

Translated by