MATLAB: Ajustement de courbe non linéaire dans MATLAB

Salut les gars! On me donne des données énormes. J’essaie d’adapter un ensemble de données dans un modèle de forme fonctionnelle comme décrit ci-dessous:
z (x, y) = c0. * x ^ 0 * y ^ 2 + c1. * x ^ 1 * y ^ 1 + c2. * x ^ 2 * y ^ 1
où c0, c1, c2 sont les coefficients à trouver.
Ma tentative consiste à utiliser la fonction nlinfit pour le résoudre.
Jusqu’à présent, j’ai essayé:
% je viens d’ajouter une petite partie de mes données
a = [0,001, 0,001, 0,001, 0,001, 0,001, 0,001, 0,001, 0,001, 0,001, 0,001,0,011, 0,011, 0,011, 0,011, 0,011, 0,011, 0,011, 0,011, 0,011, 0,011];
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
y = x. * a;
z = [-.304860225, .170315374, .343019354, .370114906, .373180536, .36719579, .363397853, .363417755, .366962504, .379710865, -.304860225, .170315374, .343019354, .36, 346 .36719579, .363397853, .363417755, .366962504, .379710865];
modèle = c0. * (x (:). ^ 0). * (y (:). ^ 2) + c1. * (x (:). ^ 1). * (y (:). ^ 1) + c2. * (x (:). ^ 2). * (y (:). ^ 0)
[c0 c1 c2] = [0,001 0,007 0,788]
C = nlinfit ([x, y], z, «modèle», [0,001 0,007 0,788])
% Ici x, y sont des variables indépendantes et z est une variable dépendante.
Comment définir ces valeurs initiales pour les coefficients? Je ne sais pas comment passer les arguments. J’obtiens cette erreur « ??? Fonction non définie ou variable ‘c0′ ». Aidez-moi !!!
Merci d’avance, Syeda

Meilleure réponse

  • La solution est triviale car vous avez un système d’équations linéaire pour les 3 coefficients
     

    A*c = b;
    c = A\b

     

  • MATLAB: ajustement de données 3D à partir de trois vecteurs 1D

    salut
    Je veux obtenir la fonction d’ajustementDelta_n = f (largeur, espace, épaisseur). J’ai exécuté la simulation EM d’un appareil particulier et obtenu la valeur de Delta_n en variant la largeur, l’écart et l’épaisseur. Il n’y a pas de modèle mathématique que je puisse utiliser pour s’adapter. Les données proviennent directement de simulations EM. J’ai joint les données au cas où vous voudriez les examiner. Les données contiennent trois vecteurslargeur_j (1 × 11), gap_i (1 × 11)etthick_k (1 × 10), J’ai stocké la valeur de Delta_n (11 x 11 x 10) en utilisant trois boucles imbriquées comme indiqué ci-dessous.
     
    delta_n = matrix (length(gap_i),length(width_j),length(thick_k));
    for (kk=1:length(thick_k))
    {
    for (ii=1:length(gap_i))
    {
    for(jj=1:length(width_j))
    {
    delta_n(ii,jj,kk) = EM Simulation (width_i(jj), gap_j(ii), thick_k(kk)) % I have used third party EM simulator here.
    }}}
     
    J’ai parcouru plusieurs réponses MATLAB recommande principalement d’utiliserdisperséInterpolantou polyfitn. Mais ici, je pense que c’est la disposition des données du problème. Quelqu’un peut-il aider à obtenir la fonction d’ajustement delta_n = f (largeur, espace, épaisseur)? Je ne peux pas utiliser l’application interactive cftool car elle ne prend en charge que les fonctions 2D.

    Meilleure réponse

  • Vous devez d’abord créer une grille à partir des trois variables d’entrée, puis appliquer scatteredInterpolant
     

    [W, G, T] = ndgrid(width_j, gap_i, thick_k);
    Model = scatteredInterpolant(W(:), G(:), T(:), delta_n(:))