Matlab "Unable to convert expression containing symbolic variables into ddouble array"
Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

Matlab "Unable to convert expression containing symbolic variables into ddouble array"



  1. #1
    turbulent

    Matlab "Unable to convert expression containing symbolic variables into ddouble array"


    ------

    Bonjour tout le monde. Merci de m'aider à corriger "Unable to convert expression containing symbolic variables into ddouble array"
    Code:
    %Root of linear or nonlinear function
    % Root-Finding in Matlab of function
    %defined on interval [a,b]
    clc
    %format short
    %format long
    % Find all roots of function real.
    % Solve Eq f(x)=0 on interval [a,b].
    L=3;
    A=1.08;
    f=@(x) tan(L*x)+2*x;
    a=-5;
    b=5;
    fplot(f,[a,b]),grid on;
    zero=fzero(@(x)f(x),a);
    oldzero=zero;
    zerotot=zero;
    eps=1e-6;
    nRoots=100;
    for i=a:0.01:b
    zero=fzero(@(x)f(x),i);
    long=length(zerotot);
    if abs(zero - zerotot)> eps & (a<= zero) & (zero <= b)
    zerotot=[zerotot;zero];
    long=long+1;
    end
    oldzero=zerotot(long);
    end
    index=find(zerotot<a);
    zerotot(index)=[];
    index=find(zerotot>b);
    zerotot(index)=[];
    
    %Check:
    froots=f(zerotot); % equal to 0?
    index=find(abs(froots)<=eps);
    Roots=sort(zerotot(index))
    z=0:.1:L;%L;%
    %dt =.1;
    for i=1:6
      if i==1
      T=0;
      end
      if i==2
      T= .25;
      end
      if i==3
      T=1;%.2;%*60;% Après 15 min;%1500;
      end
      if i==4
       T=3;%.2;%*60;% Après 20  min;%0.1;
      end
      if i==5
      T=7;%.2;%*60;% Après 30  heure;%
      end
      if i==6
      T=10;%.2;%*60;% Après 40 minutes; 
      end
      
        n=length(Roots);
    syms n
    %Roots=sort(zerotot(index));
    %Roots=subs(sort(zerotot(index)));
    Roots=sym(sort(zerotot(index)));
    % symsum(sin(Roots(i )*z).*sin(Roots(i )*L).*exp(-(Roots(i ).^2).*t )./(1+...
    %         L /2+2*L*Roots(i ).^2),1,length(Roots));
    symsum(sin(Roots.*sym(z)).*sin(Roots*L).*exp(-(Roots.^2).*sym(T) )./(1+...
            L /2+2*L*Roots.^2),1,n);
    fsum=symsum(sin(Roots.*sym(z)).*sin(Roots*L).*exp(-(Roots.^2).*sym(T) )./(1+...
            L /2+2*L*Roots.^2),1,n);
    f=log(A -(A-1)*exp(-sym(z))-4*(A)*exp(L-...
             sym(z)).*exp(-sym(T) ).*fsum); %subs
    
       % fplot(double(f),z)
    end
    F=subs(f)
    % plot(double(f),z)
    plot(double(F),z)
    %end

    -----

  2. #2
    Biname

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Salut,
    Je n'utilise jamais Matlab. Curieux de tester GPT sur le sujet, je lui copie ton msg, il me répond ceci que je ne comprends pas/peu :
     Cliquez pour afficher


    A-t-il raison ?

    Biname

  3. #3
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Merci infiniment Biname.
    Effectivement, le problème résidait dans la définition de n. Le code marche bien, malheureusement, il n'aboutit pas aux bons résultats. L'essentiel pour moi c'est qu'il marche. Le reste, c'est à moi de le régler.

  4. #4
    Biname

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Citation Envoyé par turbulent Voir le message
    Merci infiniment Biname.
    Effectivement, le problème résidait dans la définition de n. Le code marche bien, malheureusement, il n'aboutit pas aux bons résultats. L'essentiel pour moi c'est qu'il marche. Le reste, c'est à moi de le régler.
    C'est GPT qu'il faut remercier, pas moi !
    Merci, pour le retour.
    Biname

  5. A voir en vidéo sur Futura
  6. #5
    umfred

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Pour une prochaine fois, en plus du message d'erreur lui-même, il serait bien aussi d'indiquer la ligne où cette erreur est survenue, ça permet de directement cibler la bonne ligne à corriger/analyser.

  7. #6
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    C'est promis

  8. #7
    MissJenny

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Citation Envoyé par turbulent Voir le message
    Le code marche bien, malheureusement, il n'aboutit pas aux bons résultats.
    j'aime beaucoup cette phrase...

  9. #8
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Je veux dire qu'il n y a pas d'erreurs de programmation, mais ça n'aboutit pas aux résultats attendus.

  10. #9
    MissJenny

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    tu t'enfonces...

  11. #10
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Merci, c'est gentil. Pourriez-vous ne pas commenter à mes questions, même si vous avez la bonne réponse.

  12. #11
    Biname

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Salut,
    J'ai demandé à GPT de trouver une éventuelle erreur dans la formulation
     Cliquez pour afficher

    Je n'ai pas fait l'effort d'essayer comprendre. Est-ce pertinent ?

    Biname

  13. #12
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    En fait, j'ai déjà remplacé les variables sym par les variables réelles et j'ai même modifié le code. Maintenant, le problème réside dans fsum, à propos duquel, ce matin, j'ai posté dans ce forum mon message intitulé "Fzero all roots". Merci Biname pour l'effort déployé même si GPT qui s'en occupait.

  14. #13
    Biname

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Salut,
    Citation Envoyé par turbulent Voir le message
    En fait, j'ai déjà remplacé les variables sym par les variables réelles et j'ai même modifié le code. Maintenant, le problème réside dans fsum, à propos duquel, ce matin, j'ai posté dans ce forum mon message intitulé "Fzero all roots". Merci Biname pour l'effort déployé même si GPT qui s'en occupait.
    Je viens de passer une heure agréable avec GPT qui, grâce à toi, m'a initié à la programmation symbolique, il m'a traduit ton code en Python et là, j'ai compris ... pas rien ça
     Cliquez pour afficher

    Biname
    Images attachées Images attachées

  15. #14
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    C'est intérresant, mais comme je l'ai cité dans mon message précédent, mon problème, maintenant réside dans le calcul des Roots. Le code (modifié) que j'ai appliqué me donne des racines bizarres:
    Code:
    f=@(x) tan(100*x)+2*x;
    a=-5.0;
    b=5.0;
    %fplot(f,[a,b]),grid on;
    zero=fzero(@(x)f(x),a);
    oldzero=zero;
    zerotot=zero;
    eps=1e-9;
    for i=a:0.01:b
    zero=fzero(@(x)f(x),i);
    long=length(zerotot);
    if abs(zero - zerotot)> eps & (a<= zero) & (zero <= b)
    zerotot=[zerotot;zero];
    long=long+1;
    end
    oldzero=zerotot(long);
    end
    index=find(zerotot<a);
    zerotot(index)=[];
    index=find(zerotot>b);
    zerotot(index)=[];
    froots=f(zerotot); % equal to 0?
    index=find(abs(froots)<=eps);
    Roots=sort(zerotot(index))
    En testant par exemple la dernière valeur affichée Roots(231)= 4.6663 et f(4.6663)=-0.2956 et pourtant eps=1e-9. Est-ce que avec Pyton, on obtient les mêmes résultats ou c'est différent ?

  16. #15
    Paraboloide_Hyperbolique

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"


  17. #16
    Biname

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Salut,
    A la calculette on trouve f(4.6663) = -0.29556...
    Tu voudrais trouver zéro ? , je comprends mieux miss Jenny.
     Cliquez pour afficher


    Biname

  18. #17
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Je n'ai pas besoin de "calculette" !!!!
    Moi, je cherche à vérifier la condition:
    Code:
    froots=f(zerotot); % equal to 0?
    index=find(abs(froots)<=eps);
    Roots=sort(zerotot(index))

  19. #18
    Biname

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Salut,
    Citation Envoyé par turbulent Voir le message
    Je n'ai pas besoin de "calculette" !!!!
    Moi, je cherche à vérifier la condition:
    Code:
    froots=f(zerotot); % equal to 0?
    index=find(abs(froots)<=eps);
    Roots=sort(zerotot(index))
    A l'endroit de la racine en x=~4.66... la courbe est quasi verticale, d'où la difficulté de trouver la racine avec précision, même pour dx = 1e-9

    Pour f(x) = tg(100x) + 2x, racine entre 4.66 et 4.67
    Bounds: x=4.66000000 y=11.04046803, x =4.67000000 y = 7.38826799
    Root found at x = 4.66526509 (eps = 1e-9)
    Derivative at the root: f'(x) = 563.06569550
    Arctan of the derivative: arctan(f'(x)) = 89.89824328 degrees

     Cliquez pour afficher

    Biname

  20. #19
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Merci comme même, le problème est déjà résolu.
    Dernière modification par turbulent ; 19/07/2023 à 19h54.

  21. #20
    umfred

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    la réponse a été donnée sur son autre post https://forums.futura-sciences.com/p...all-roots.html
    c'est le format d'affichage du résultat qui biaise la valeur (affichée)
    on peut forcer l'affichage long via l'instruction matlab "format long" , ou mieux, passer directement la valeur retournée dans la fonction f(Roots(231)) et ça donne bien une valeur inférieure à l'epsilon définie

  22. #21
    Biname

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Salut,
    Est-ce que la courbe est bien très verticale en la racine ?231, x=4.66... ?
    Je me demande si 'mon' code ne trouve pas l'infini (pi/2) de la tangente ?
    Biname

  23. #22
    turbulent

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    La vérité, ce qui m'importait, c'est les courbes f(z, T), c'est parfait.
    Dernière modification par turbulent ; 19/07/2023 à 20h17.

  24. #23
    Biname

    Re : Matlab "Unable to convert expression containing symbolic variables into ddouble array"

    Salut,
    Citation Envoyé par turbulent Voir le message
    La vérité, ce qui m'importait, c'est les courbes f(z, T), c'est parfait.
    La valeur ___minimale___ de la dérivée de tg(bx) est b pour x = N * pi
    Ajouter 2 x augmente encore la pente.
    Si b=100, dx=1 >> dy=100 ... au moins
    Biname

Discussions similaires

  1. "NextDNS" : site "RTL" dans l'allowlist, pourtant le "play" est bloqué ici (voir lien)
    Par sypqys dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 18/09/2020, 18h23
  2. configuration équatoriale ou " Quad-array "
    Par AK48 dans le forum Géologie et Catastrophes naturelles
    Réponses: 0
    Dernier message: 05/07/2020, 21h08
  3. VB mettre le micro en mode " ecoute" "veille" et "stop" sous visual basic
    Par invite5ea368ff dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 14/12/2015, 13h45
  4. Matlab: fonction "filter" --> le signal est "retourné" --> pourquoi ?
    Par invitea29b3af3 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/11/2011, 09h24
  5. HELP "Unable to access jarfile" minecraft
    Par invite4e49250f dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 02/08/2011, 17h39