Gleichung nach Varable auflösen

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
A346
Beiträge: 22
Registriert: Di Okt 20, 2020 11:04 am

Gleichung nach Varable auflösen

Beitrag von A346 »

Hallo Zusammen,

folgendes Grundproblem:

Angenommen ich habe die Funktion y = 2x + t
Das Programm soll mir nun x für y = 2 und t = 4 ausgeben.

Wie schreibe ich das? Habe es erfolglos mit der solve Funktion versucht...

Danke und viele Grüße
A346
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Gleichung nach Varable auflösen

Beitrag von bigben »

Hallo A346,

Wenn Du ausgehend von

y = 2x + t

auf beiden Seiten erst "minus t" und dann "geteilt durch 2" rechnest, erhälst Du

x = (y-t)/2

Daraus machst Du Dir eine R Funktion:

Code: Alles auswählen

reverse.linear  <- function(y, slope, intercept) (y-intercept)/slope
Die kannst Du dann für Dein Beispiel so aufrufen:

Code: Alles auswählen

reverse.linear(y = 2, intercept = 4, slope = 2)
Zur visuellen Überprüfung:

Code: Alles auswählen

reverse.linear(y = 2, intercept = 4, slope = 2, main = "y = 2x + 4")
## [1] -1
curve(2*x+4, from = -3, to = 3, ylab="y")
abline(h=2, lty=2)
abline(v=-1, lty=2)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
A346
Beiträge: 22
Registriert: Di Okt 20, 2020 11:04 am

Re: Gleichung nach Varable auflösen

Beitrag von A346 »

Hallo Bernhard,

vielen Dank für deine schnelle Antwort!
Damit ist das Problem für lineare Funktionen schonmal gelöst.
Gibt es auch für nicht lineare Funktionen, die händisch nicht auflösbar sind eine Lösung?

P = Z*(1-exp(-Z*T)) (exp() ist die e-Funktion)

Die Funktion soll für P = 3 und T = 5 nach Z aufgelöst werden.

Vielen Dank und viele Grüße
A346
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Gleichung nach Varable auflösen

Beitrag von jogo »

Hallo A346,

meinst Du sowas:

Code: Alles auswählen

P <- 3; T <- 5
myfu <- function(Z) Z*(1-exp(-Z*T)) - P

uniroot(myfu, c(0, +200))

plot(myfu, 2, +4); grid(col="red")
Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Gleichung nach Varable auflösen

Beitrag von bigben »

Hallo A346,

die Antwort lautet nein. Nicht alle Funktionen lassen sich algebraisch nach x auflösen und nicht alle Funktionen haben für die Fragestellung eine eindeutige Lösung. Denke etwa an

0,5 = sin(x)

das hat unendlich viele Lösungen für x. Natürlich kann man sich dort, wo es eine Lösung gibt, mit Versuch und Irrtum an diese Lösung herantasten. Auch dafür hält R Funktionen vor, aber das ist kompliziert und fehleranfällig und muss mit Bedacht genutzt werden (sogenannte lokale Minima können ein Problem sein, ebenso schlechte Startwerte).

Such mal nach der Funktion optim() als recht vielseitigen Lösungsansatz. Du wirst eine Reihe von Blogs etc. dazu finden, die die Anwendung vormachen. Dann nlm, constrOptim, ...

Frisch dieses Jahr erschienen ist dieses Buch, zu dem ich mehr nicht sagen kann: https://www.amazon.de/Introduction-Unco ... 811508933/ und schon etwas länger gibt es dieses, das ich aber auch nicht gelesen habe https://www.amazon.de/Modern-Optimizati ... 319082620/

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
A346
Beiträge: 22
Registriert: Di Okt 20, 2020 11:04 am

Re: Gleichung nach Varable auflösen

Beitrag von A346 »

Hallo Bernhard,

vielen lieben Dank für deine ausführliche Antwort!!
Das hat mir weitergeholfen!

Viele Grüße
A346
Antworten