2
votes

Comment résoudre une fonction y = f (x, y), c'est-à-dire que la valeur fonctionnelle dépend d'elle-même

Je veux résoudre l'équation suivante en python. Le problème est que la variable dépendante «y» est également présente dans le côté droit de l'équation. Première question, comment ces équations sont-elles nommées en mathématiques?

Je peux la résoudre si je saute le «y» du RHS. Mais aucune idée de comment résoudre le problème en le maintenant en place.

 entrez la description de l'image ici

J'ai utilisé le code suivant: importer numpy en tant que np depuis matplotlib importer pyplot comme plt

A=2
B=1.3
C=0.25
D=1.25
def func(x,A,B,C,D):
  y=A*np.sinh(((x)/B-C)/D)  #I skipped (x-y) here
  return y

x=np.linspace(-3,3,200)
y=func(x,A,B,C,D)
plt.plot(x,y)
plt.show()


6 commentaires

Que se passe-t-il lorsque y = 0?


pourquoi ne pas déplacer y dans l'autre direction et résoudre votre équation = 0:


python ne résout pas l'équation pour vous avec juste func


@ user8426627 Je pense qu'Alam demandait comment définir une fonction qui résout un problème comme celui-ci. Alam, la manière typique de résoudre un problème comme celui-ci est de donner une valeur initiale à y, puis d'itérer un certain nombre de fois jusqu'à ce que vous convergiez vers la réponse attendue.


sont sûrs que convergeront


soit x = 3, y = 0, sinh t = (e ^ t - e ^ -t) / 2, t = (3 / 1,3- 0,25) / 1,25 = 1,64, e ^ 1,64 = 5 - 0,19 ~ 5> 3 , en plus il y aura de plus grands nombres, ça ne converge pas ou je suis stupide aujourd'hui?


3 Réponses :


4
votes

De telles équations non linéaires sont souvent résolues de manière itérative. Définissez y = 0 , résolvez l'équation, obtenez un nouveau y , insérez la nouvelle valeur dans RHS et répétez le processus. Suivez la valeur y (j) -y (j-1) pour vérifier la convergence. Si ce n'est pas le cas, essayez de mélanger la partie RHS précédente avec une partie actuelle avec un certain poids: RHS (j) = w * RHS (j) + (1-w) RHS (j-1). Voici quelques liens utiles à ce sujet:

wiki

Livre : Solution itérative d'équations non linéaires en plusieurs variables Par JM Ortega, WC Rheinboldt

Voici votre exemple modifié:

import matplotlib.pyplot as plt
A=2
B=1.3
C=0.25
D=1.25
def func(x,z,A,B,C,D):
  y=A*np.sinh(((x-z)/B-C)/D)  #I skipped (x-y) here
  return y

x=np.linspace(-30,30,200)
y = np.zeros(x.shape)
w = 0.99999999
d = 10
track_d = []

while d > 0.0000001:
    track_d.append(d)
    temp = y
    y = w * y + (1-w) * func(x,y,A,B,C,D)
    d = np.max(np.abs(temp-y))

y=func(x, y,A,B,C,D)
plt.plot(x,y)
plt.show()
# look at the convergence
plt.plot(track_d)
plt.show()

Pour un intervalle plus grand, cela semble plus intéressant, faites attention au paramètre w.

import matplotlib.pyplot as plt
A=2
B=1.3
C=0.25
D=1.25
def func(x,z,A,B,C,D):
  y=A*np.sinh(((x-z)/B-C)/D)  #I skipped (x-y) here
  return y

x=np.linspace(-3,3,200)
y = np.zeros(x.shape)
w = 0.4
d = 10
track_d = []

while d > 0.01:
    track_d.append(d)
    temp = y
    y = w * y + (1-w) * func(x,y,A,B,C,D)
    d = np.max(np.abs(temp-y))

y=func(x, y,A,B,C,D)
plt.plot(x,y)
plt.show()

plt.plot(track_d)
plt.show()

 entrez la description de l'image ici


10 commentaires

toujours je ne vois pas comment cela converge, expliquez pls facilement et j'écrirai la fonction


dans l'intervalle que vous avez défini, cela ressemble à une fonction linéaire.


soit x = 3, y = 0, sinh t = (e ^ t - e ^ -t) / 2, t = (3 / 1,3- 0,25) / 1,25 = 1,64, e ^ 1,64 = 5 - 0,19 ~ 5> 3 , en plus il y aura de plus grands nombres, ça ne converge pas ou je suis stupide aujourd'hui?


Ce n'est pas une fonction, c'est une courbe algébrique (toutes les fonctions peuvent être des courbes algébriques, mais l'inverse est faux). Vous demandez de tracer tous les points (x, y) satisfaisant l'équation y - bla (x, y) = 0. Rien n'est nécessaire pour converger. La première étape consiste à trouver un groupe de (x, y) par force brute en utilisant un niveau de tolérance au lieu de l'égalité. Les étapes suivantes sont des méthodes plus sophistiquées (il y en a beaucoup, voir le livre de Fulton).


Il convergera pour w = 0,99999999


SeF, si Alam demande une méthode mathématique, la question est hors-sujet. J'ai proposé une solution numérique et algorithmique plus proche des thèmes de ce forum. Pouvez-vous, s'il vous plaît, prouver que cela ne fonctionne pas en comparant avec une bonne courbe.


le sentiment de sauter quelque chose d'important à l'université: D


Montrez-moi la bonne courbe, est-elle différente de la sortie du code?


Merci!!! Existe-t-il une fonction de bibliothèque pour effectuer ce travail? Ou à chaque fois que je devrai écrire un code personnalisé comme celui que vous avez partagé?


C'est une technique assez standard en physique non linéaire. Recherchez des codes là-bas.



1
votes

Votre équation peut être très simplifiée pour obtenir x en fonction de y . Tout d'abord, nous pouvons réécrire votre équation comme suit:

y = a * sinh (b * x + c * y + d)

Notez que cela vient avec des hypothèses non nulles sur A, B, C, D

b * x + c * y + d = arcsinh (y / a)

arcsinh peut être réécrit en utilisant logarithme naturel : b * x + c * y + d = ln (y / a + sqrt ((y / a) ** 2 + 1)))

Cela donne:

x = (1 / b) * (ln (y / a + sqrt ((y / a) ** 2 + 1))) - c * y - d)

Vous pouvez ensuite tracer ceci pour différentes valeurs de a, b, c, d.


1 commentaires

Merci d'avoir résolu le problème spécifique. Mais je voulais poser une question générale pour les problèmes généraux qui ne peuvent pas être convertis en y = f (x) ou l'inverse. Je devrais probablement modifier un peu la question alors.



1
votes

Votre fonction en général est appelée relation de récurrence dans le formulaire

 entrez la description de l'image ici

Il peut être résolu numériquement en choisissant la valeur de départ de y, puis en la mettant dans l'équation, en calculant la valeur y suivante. Et répéter le calcul en mettant la valeur y suivante comme valeur y précédente dans l'équation. Les calculs sont répétés en boucle jusqu'à ce que la valeur y converge. La valeur Y peut ne pas converger. Même dans ce cas, vous pouvez analyser le système plus en détail. Vous pouvez essayer de tracer le graphique y n = f (y n-1 ) et voir ce que vous avez. Dans le cas où le système est stable , la courbe doit être très périodique et fermée , sinon le système non convergent est chaotique et de telles équations la fenêtre.

Quelques exemples de systèmes stables sont les courbes de Lissajous :

 entrez la description de l'image ici

Quelques exemples de systèmes chaotiques sont l'attracteur de Rossler :

 entrez la description de l'image ici

Analyse y = A * sinh (-y-C)

Pour voir si votre système est stable ou non - essayons de moduler la fonction sin (x) avec votre relation de récurrence de sin hyperbolique: y = k * SIN (x) + 0.88 * SINH (-y-0.02) et essayons de dessiner ce graphique paramétrique de récurrence de y prev vs y next .

k = 0

 entrez la description de l'image ici

Pas grand chose à voir ici, car dans ce cas, nous obtenons votre équation d'origine qui a une très faible résolution entre les points de données. Ils se trouvent tous le long d'une ligne, avec une petite dispersion que nous ne pouvons pas différencier avec les yeux - c'est pourquoi nous avons besoin de sin (x) ici!

k = 0,0005

 entrez la description de l'image ici

Beaucoup plus intéressant. Maintenant, on peut voir que votre «ligne» n'est pas du tout une ligne et a un comportement chaotique. Mais regardons quelque chose de plus attrayant.

k = 0,005

 entrez la description de l'image ici

À certains endroits, la récurrence sinh () l'emporte, mais à certains - sin (). Essayons de forcer la victoire de la fonction sin (), pour pouvoir voir si elle sera modulée périodiquement et avec une boucle fermée ou non. Donc image finale.

k = 0,05

 entrez la description de l'image ici

Donc, ce n'est ni très périodique, ni fermé. Nous avons un certain type d'attracteur. Ce qui signifie que dans un cas général, votre équation se comporte de manière très chaotique et qu'en tant que telle, elle ne vaut pas un centime. Bien sûr, dans votre plage de paramètres exacte, elle peut se comporter comme une fonction linéaire. Mais un petit segment infinitésimal d'un cercle réassemble également une ligne, qu'est-ce que cela signifie? Rien. Vous ne pouvez pas vous fier à une plage d'entrée très spécifique. Si votre unité commerciale change les exigences ne serait-ce qu'un peu , le comportement de votre équation changera radicalement. La seule étape rationnelle consiste donc à passer par la fenêtre et à reconstruire un modèle différent - cette fois stable - pour une donnée. Ou dites simplement que cela ne peut pas être fait.


0 commentaires