WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Nichtlineare Regression gibt imaginäre Koeffizienten aus

 

Redeagleone
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2019, 15:50     Titel: Nichtlineare Regression gibt imaginäre Koeffizienten aus
  Antworten mit Zitat      
Hallo zusammen,

Ich habe Parameter und Messwerte aus verschiedenen Versuchsreihen und eine Funktion gegeben, an die ich die Messwerte anpassen möchte. Das Problem ist jedoch, dass Matlab imaginäre Koeffizienten ausgibt.

Meine Frage ist deshalb wie ich verhindern kann, dass imaginäre Koeffizienten eine zulässige Lösung sind. Meiner Meinung nach müssten auch reelle Koeffizienten berechnet werden können, auch wenn der Fit sehr schlecht sein mag.

Sowohl mit lsqnonlin als auch mit verschiedenen Startwerten habe ich es bereits versucht.

Anbei einmal mein Code sowie eine Exceldatei mit den Daten.

Vielen Dank im Voraus.

Code:


% Einlesen der Daten
daten = 'E:\GoMatlab.xlsx';
sheet = 'Messungen';


a = xlsread(daten,sheet, 'A2:A137');
g = xlsread(daten,sheet, 'B2:B137');
f = xlsread(daten,sheet, 'C2:C137');
v = xlsread(daten,sheet, 'D2:M137');
teil = xlsread(daten,sheet, 'E2:E137');
L = xlsread(daten,sheet, 'F2:F137');
B = xlsread(daten,sheet, 'G2:G137');

% Unabhängige Variablen
x = [a(:,1), g(:,1), f(:,1), v(:,1), teil(:,1), B(:,1)];

% Modellierung der Regressionsfunktion
modelfun = @(b,x) (x(:,6).*b(1)+ b(2).*(1-exp(x(:,3)./b(3))).*sin(x(:,2))).^(3/2).*(sin(x(:,1)).*cos(x(:,1))).^(-1/2).*x(:,5).^b(4);
b0 = [0.1,0.1,0.1,0.1];

%Regression
options = statset('MaxIter',1000,'TolFun',1e-1000);
[mdl,R] = nlinfit(x,L, modelfun,b0,options);
 


GoMatlab.zip
 Beschreibung:

Download
 Dateiname:  GoMatlab.zip
 Dateigröße:  13.36 KB
 Heruntergeladen:  170 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.12.2019, 10:06     Titel:
  Antworten mit Zitat      
Hallo,

deine Winkel sind in Grad. Dann solltest du sind und cosd verwenden statt sin und cos.

Ist zudem dies korrekt?
Code:
v = xlsread(daten,sheet, 'D2:M137');

Sollte der Bereich nicht bis D137 gehen?

Vermutlich sind durch die Verwendung von sin und cos negative Ausdrücke unter den Wurzeln entstanden und dadurch die komplexen Zahlen, und damit ist das Problem vielleicht schon gelöst. Bitte nochmal kurz Bescheid geben falls nicht.

Im übrigen sollte es effizienter sein, mit xlsread alles auf einmal einzulesen und dann die Spalten zu extrahieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Redeagleone
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.06.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2019, 14:37     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ja, das war ein Tippfehler beim Übertragen des Codes in das Forum. Das soll natürlich bis D137 gehen.

Vielen Dank für deine Hilfe, mit sind statt sin klappt es nun!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.