lsqcurvefit requires all values returned by functions to be of data type double.

8 visualizzazioni (ultimi 30 giorni)
I am having this error :
"Error using lsqncommon
lsqcurvefit requires all values returned by functions to be of data type double.
Error in lsqcurvefit (line 295)
lsqncommon(funfcn,xCurrent,lb,ub,options,defaultopt,optimgetFlag,caller,..."
Here's my code.
syms a b c d e f theta
ydata=[10 12 5 65 32 12 25 30 15 26];
theta_Val=0:5:45;
y = (a+445)*c*cos(theta)+e/f*sin(theta)+d;
%Variable equal to 0
Var_Zero=[a b c d];
%Variable to search
Var_Search=[e f];
%Initial value
Init=[0,0];
%I replace my variable equal to 0 by 0
y_reduce = eval(subs(y,Var_Zero,zeros(size(Var_Zero))));
%I declare my function
Fonction = @(Var_Cherche,theta) y_reduce;
%I do a test to see if the size are corresponding
size(ydata) %1x10
size(Fonction(Init,theta_Val)) %1x1
%They are not
%I replace my theta with the values that I want
y_reduce=(subs(y_reduce,theta,theta_Val));
%I recreate the function
Fonction = @(Var_Search,theta) y_reduce;
%Size Test
size(ydata) %1x10
size(Fonction(Init,theta_Val)) %1x10
%They are the same size
%Then I try to fit
x = lsqcurvefit(Fonction,Init,theta_Val,ydata)
The problem comes with how I handle theta in my function but I don't know what to change.

Risposta accettata

Torsten
Torsten il 6 Lug 2022
Modificato: Torsten il 6 Lug 2022
Setting y = e/f*sind(theta) makes no sense because this setup will have infinitely many solutions.
Use a single parameter e instead.
syms a b c d e theta
ydata=[10 12 5 65 32 12 25 30 15 26];
theta_Val=0:5:45;
y = (a+445)*c*cosd(theta)+e*sind(theta)+d;
%Variable equal to 0
Var_Zero=[a b c d];
%Variable to search
Var_Search=[e];
%Initial value
Init=[1];
%I replace my variable equal to 0 by 0
y_reduce = eval(subs(y,Var_Zero,zeros(size(Var_Zero))));
%I declare my function
Fonction = @(Var_Cherche,theta) y_reduce;
%I do a test to see if the size are corresponding
%size(ydata) %1x10
%size(Fonction(Init,theta_Val)) %1x1
%They are not
%I replace my theta with the values that I want
y_reduce=(subs(y_reduce,theta,theta_Val));
%I recreate the function
%Fonction = @(Var_Search,theta) y_reduce
Fonction = matlabFunction(y_reduce)
Fonction = function_handle with value:
@(e)[0.0,e.*sin(pi./3.6e+1),e.*sin(pi./1.8e+1),-e.*(sqrt(2.0)./4.0-sqrt(6.0)./4.0),e.*sin(pi./9.0),e.*sin(pi.*(5.0./3.6e+1)),e./2.0,e.*sin(pi.*(7.0./3.6e+1)),e.*sin(pi.*(2.0./9.0)),(sqrt(2.0).*e)./2.0]
Fonction = @(x,theta_Val)Fonction(x);
%Size Test
%size(ydata) %1x10
%size(Fonction(Init,theta_Val)) %1x10
%They are the same size
%Then I try to fit
x = lsqcurvefit(Fonction,Init,theta_Val,ydata)
Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
x = 48.8708
Fonction(x,theta_Val)-ydata
ans = 1×10
-10.0000 -7.7406 3.4863 -52.3513 -15.2852 8.6537 -0.5646 -1.9689 16.4135 8.5569
  5 Commenti
Quentin Javey
Quentin Javey il 7 Lug 2022
Thank you, I can make it work with 2+ variable on this program but it doesn't seem to work on my original problem with 2+ variable. It's okay with 2 but no more than that: "Failure in initial objective function evaluation. LSQCURVEFIT cannot continue."
Here's the original work.
At first, it's just symbolic calcul.Nothing wrong here.
clear all; clc;
%% Main
%défauts
syms x_l_M_TR y_l_M_TR z_l_M_TR a_l_M_TR b_l_M_TR c_l_M_TR
syms x_m_M_TR y_m_M_TR z_m_M_TR a_m_M_TR b_m_M_TR c_m_M_TR
syms x_l_TR_RX y_l_TR_RX z_l_TR_RX a_l_TR_RX b_l_TR_RX c_l_TR_RX
syms x_m_TR_RX y_m_TR_RX z_m_TR_RX a_m_TR_RX b_m_TR_RX c_m_TR_RX
syms x_l_RX_P y_l_RX_P z_l_RX_P a_l_RX_P b_l_RX_P c_l_RX_P
Var=[x_l_M_TR y_l_M_TR z_l_M_TR a_l_M_TR b_l_M_TR c_l_M_TR x_m_M_TR y_m_M_TR z_m_M_TR a_m_M_TR...
b_m_M_TR c_m_M_TR x_l_TR_RX y_l_TR_RX z_l_TR_RX a_l_TR_RX b_l_TR_RX c_l_TR_RX x_m_TR_RX y_m_TR_RX...
z_m_TR_RX a_m_TR_RX b_m_TR_RX c_m_TR_RX x_l_RX_P y_l_RX_P z_l_RX_P a_l_RX_P b_l_RX_P c_l_RX_P];
%mouvement
syms theta
%constantes
dist_z_TR_RX = 185.0;
dist_z_RX_P = 71.11;
dist_z_P_M1 = 16.77;
dist_z_P_M2 = 50.31;
%matrices de passage
%lock nominal
T_ln_M_TR = eye(4);
T_ln_TR_RX = eye(4); T_ln_TR_RX(3,4)=dist_z_TR_RX;
T_ln_RX_P = eye(4); T_ln_RX_P(3,4)=dist_z_RX_P;
%lock error
T_le_M_TR = MTH(x_l_M_TR,y_l_M_TR,z_l_M_TR,a_l_M_TR,b_l_M_TR,c_l_M_TR);
T_le_TR_RX = MTH(x_l_TR_RX,y_l_TR_RX,z_l_TR_RX,a_l_TR_RX,b_l_TR_RX,c_l_TR_RX);
T_le_RX_P = MTH(x_l_RX_P,y_l_RX_P,z_l_RX_P,a_l_RX_P,b_l_RX_P,c_l_RX_P);
%mouvement nominal
T_mn_M_TR = MTH(0,0,0,0,0,theta);
T_mn_TR_RX = MTH(0,0,0,0,0,-theta);
%mouvement error
T_me_M_TR = MTH(x_m_M_TR,y_m_M_TR,z_m_M_TR,a_m_M_TR,b_m_M_TR,c_m_M_TR);
T_me_TR_RX = MTH(x_m_TR_RX,y_m_TR_RX,z_m_TR_RX,a_m_TR_RX,b_m_TR_RX,c_m_TR_RX);
%changement de repère
T_M_TR = T_ln_M_TR*T_le_M_TR*T_mn_M_TR*T_me_M_TR;
T_TR_RX = T_ln_TR_RX*T_le_TR_RX*T_mn_TR_RX*T_me_TR_RX;
T_RX_P = T_ln_RX_P*T_le_RX_P;
%global symbolique
T_sym= T_M_TR*T_TR_RX*T_RX_P;
%Tri
% clear T_ln_M_TR T_le_M_TR T_mn_M_TR T_me_M_TR T_ln_TR_RX T_le_TR_RX T_mn_TR_RX T_me_TR_RX...
% T_ln_RX_P T_le_RX_P T_M_TR T_TR_RX T_RX_P...
% x_l_M_TR y_l_M_TR z_l_M_TR a_l_M_TR b_l_M_TR c_l_M_TR x_m_M_TR y_m_M_TR z_m_M_TR a_m_M_TR b_m_M_TR...
% c_m_M_TR x_l_TR_RX y_l_TR_RX z_l_TR_RX a_l_TR_RX b_l_TR_RX c_l_TR_RX x_m_TR_RX y_m_TR_RX z_m_TR_RX...
% a_m_TR_RX b_m_TR_RX c_m_TR_RX x_l_RX_P y_l_RX_P z_l_RX_P a_l_RX_P b_l_RX_P c_l_RX_P
Then i get the expression of my function (Angle).
%transformation de la mesure
load('Mesure_7_6_RX10.mat')
Y_Val=Val*1.e-5*3600;
theta_Val=0:5:360;
theta_Val_rad = theta_Val/180*pi;
%Variables à 0
Var_Zero=[z_l_M_TR c_l_M_TR x_m_M_TR y_m_M_TR z_m_M_TR a_m_M_TR...
b_m_M_TR c_m_M_TR z_l_TR_RX c_l_TR_RX x_m_TR_RX y_m_TR_RX...
z_m_TR_RX a_m_TR_RX b_m_TR_RX c_m_TR_RX z_l_RX_P c_l_RX_P...
x_l_M_TR y_l_M_TR a_l_M_TR b_l_M_TR x_l_TR_RX y_l_TR_RX a_l_TR_RX...
b_l_TR_RX x_l_RX_P ];
%Varibles à déterminer
Var_Cherche=[y_l_RX_P a_l_RX_P b_l_RX_P];
%départ:
Depart=zeros(1,size(Var_Cherche,2));
M1 = T_sym* [0;0;dist_z_P_M1;1];
M2 = T_sym* [0;0;dist_z_P_M2;1];
Angle = atan2(M1(2,:)-M2(2,:),M2(3,:)-M1(3,:))/pi*180;
Then I change the value of theta and those that are equal to zero.
Angle = eval(subs(Angle,Var_Zero,zeros(size(Var_Zero))));
Angle = subs(Angle,theta,theta_Val);
Fonction = matlabFunction(Angle);
Fonction = @(x,theta_Val)Fonction(x(1),x(2),x(3));
And I try to do my fit.
x = lsqcurvefit(Fonction,Depart,theta_Val,Y_Val);
Error using symengine>@(a_l_RX_P,b_l_RX_P)[(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./3.6e+1).^2+sin(pi./3.6e+1).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./1.8e+1).^2+sin(pi./1.8e+1).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*((sqrt(2.0)./4.0-sqrt(6.0)./4.0).^2+(sqrt(2.0)./4.0+sqrt(6.0)./4.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./9.0).^2+sin(pi./9.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(5.0./3.6e+1)).^2+sin(pi.*(5.0./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(7.0./3.6e+1)).^2+sin(pi.*(7.0./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(2.0./9.0)).^2+sin(pi.*(2.0./9.0)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(5.0./1.8e+1)).^2+sin(pi.*(5.0./1.8e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.1e+1./3.6e+1)).^2+sin(pi.*(1.1e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.3e+1./3.6e+1)).^2+sin(pi.*(1.3e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(7.0./1.8e+1)).^2+sin(pi.*(7.0./1.8e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*((sqrt(2.0)./4.0-sqrt(6.0)./4.0).^2+(sqrt(2.0)./4.0+sqrt(6.0)./4.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(4.0./9.0)).^2+sin(pi.*(4.0./9.0)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.7e+1./3.6e+1)).^2+sin(pi.*(1.7e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.7e+1./3.6e+1)).^2+sin(pi.*(1.7e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(4.0./9.0)).^2+sin(pi.*(4.0./9.0)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*((sqrt(2.0)./4.0-sqrt(6.0)./4.0).^2+(sqrt(2.0)./4.0+sqrt(6.0)./4.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(7.0./1.8e+1)).^2+sin(pi.*(7.0./1.8e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.3e+1./3.6e+1)).^2+sin(pi.*(1.3e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.1e+1./3.6e+1)).^2+sin(pi.*(1.1e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(5.0./1.8e+1)).^2+sin(pi.*(5.0./1.8e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(2.0./9.0)).^2+sin(pi.*(2.0./9.0)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(7.0./3.6e+1)).^2+sin(pi.*(7.0./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(5.0./3.6e+1)).^2+sin(pi.*(5.0./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./9.0).^2+sin(pi./9.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*((sqrt(2.0)./4.0-sqrt(6.0)./4.0).^2+(sqrt(2.0)./4.0+sqrt(6.0)./4.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./1.8e+1).^2+sin(pi./1.8e+1).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./3.6e+1).^2+sin(pi./3.6e+1).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./3.6e+1).^2+sin(pi./3.6e+1).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./1.8e+1).^2+sin(pi./1.8e+1).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*((sqrt(2.0)./4.0-sqrt(6.0)./4.0).^2+(sqrt(2.0)./4.0+sqrt(6.0)./4.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./9.0).^2+sin(pi./9.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(5.0./3.6e+1)).^2+sin(pi.*(5.0./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(7.0./3.6e+1)).^2+sin(pi.*(7.0./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(2.0./9.0)).^2+sin(pi.*(2.0./9.0)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(5.0./1.8e+1)).^2+sin(pi.*(5.0./1.8e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.1e+1./3.6e+1)).^2+sin(pi.*(1.1e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.3e+1./3.6e+1)).^2+sin(pi.*(1.3e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(7.0./1.8e+1)).^2+sin(pi.*(7.0./1.8e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*((sqrt(2.0)./4.0-sqrt(6.0)./4.0).^2+(sqrt(2.0)./4.0+sqrt(6.0)./4.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(4.0./9.0)).^2+sin(pi.*(4.0./9.0)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.7e+1./3.6e+1)).^2+sin(pi.*(1.7e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.7e+1./3.6e+1)).^2+sin(pi.*(1.7e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(4.0./9.0)).^2+sin(pi.*(4.0./9.0)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*((sqrt(2.0)./4.0-sqrt(6.0)./4.0).^2+(sqrt(2.0)./4.0+sqrt(6.0)./4.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(7.0./1.8e+1)).^2+sin(pi.*(7.0./1.8e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.3e+1./3.6e+1)).^2+sin(pi.*(1.3e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(1.1e+1./3.6e+1)).^2+sin(pi.*(1.1e+1./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(5.0./1.8e+1)).^2+sin(pi.*(5.0./1.8e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(2.0./9.0)).^2+sin(pi.*(2.0./9.0)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(7.0./3.6e+1)).^2+sin(pi.*(7.0./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi.*(5.0./3.6e+1)).^2+sin(pi.*(5.0./3.6e+1)).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./9.0).^2+sin(pi./9.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*((sqrt(2.0)./4.0-sqrt(6.0)./4.0).^2+(sqrt(2.0)./4.0+sqrt(6.0)./4.0).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./1.8e+1).^2+sin(pi./1.8e+1).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2).*(cos(pi./3.6e+1).^2+sin(pi./3.6e+1).^2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi,(atan2(sin((a_l_RX_P.*pi)./1.8e+2),cos((a_l_RX_P.*pi)./1.8e+2).*cos((b_l_RX_P.*pi)./1.8e+2)).*1.8e+2)./pi]
Too many input arguments.

Error in solution (line 84)
Fonction = @(x,theta_Val)Fonction(x(1),x(2),x(3));

Error in lsqcurvefit (line 225)
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});

Caused by:
Failure in initial objective function evaluation. LSQCURVEFIT cannot continue.
I don't know why it's not working with 2+ while it's working with 2.
At the end, I want to have 12 variables to search.
Var_Zero=[z_l_M_TR c_l_M_TR x_m_M_TR y_m_M_TR z_m_M_TR a_m_M_TR...
b_m_M_TR c_m_M_TR z_l_TR_RX c_l_TR_RX x_m_TR_RX y_m_TR_RX...
z_m_TR_RX a_m_TR_RX b_m_TR_RX c_m_TR_RX z_l_RX_P c_l_RX_P];
%Varibles à déterminer
Var_Cherche=[x_l_M_TR y_l_M_TR a_l_M_TR b_l_M_TR x_l_TR_RX y_l_TR_RX a_l_TR_RX...
b_l_TR_RX x_l_RX_Py_l_RX_P a_l_RX_P b_l_RX_P];
Torsten
Torsten il 8 Lug 2022
According to the error message, your function "Angle" does not depend on y_l_RX_P.
Thus you'll have to define
Fonction = @(x,theta_Val)Fonction(x(1),x(2));
instead of
Fonction = @(x,theta_Val)Fonction(x(1),x(2),x(3));
Since the source error is always the same in your requests:
After defining
Fonction = matlabFunction(something);
look at the list of input parameters to the function and count them. If the total number is N, redefine Fonction as
Fonction = @(x,theta_Val)Fonction(x(1),x(2),x(3),...,x(N))

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by