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

lsqrsolve Problem

 

Kurt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2016, 17:17     Titel: lsqrsolve Problem
  Antworten mit Zitat      
Hallo. Ich bin langsam am verzweifeln. Ich habe in MATLAB mit der Optimization Toolbox mit lsqnonlin und Levenber-Marquard Algorithmus etwas gelöst. Dies wollte ich nun portieren in SCILAB (weil kostenlos) und habe gelesen, dass dies mit der Funktion lsqrsolve geht.
Allerdings kriege ich immer wieder den Fehler: (mit leastsq das gleiche)
Code:

-->exec('C:\...\SCILAB\lsqrsolve.sce', -1)
[a,b]=lsqrsolve(x0,fct,11);
                           !--error 98
Variable, die durch Scilab Funktion zurückgegeben wurde, ist inkorrekt.
at line      18 of exec file called by :    
exec('C:\...\SCILAB\lsqrsolve.sce', -1)

Habe schon viel mit den Startbedingungen rumgespielt, aber die müssen so in der Richtung stimmen. Wenn ich die MATLAB Lösung eingebe, dann funktioniert es. Aber das ist ja nicht Sinn der Sache. Lösung bei MATLAB: [0.001 23.481 7.224 14.45]
Hier mal der SCILAB Code:
Code:

Ua=[250;250;250;200;200;200;170;170;170;100;100];
Ug=[-17.5;-11.5;-2.5;-13.5;-4;-1;-7.5;-4.5;-0.5;-6;-0.5];
Ia=[0.0005;0.005;0.029;0.0005;0.0145;0.025;0.0035;0.0085;0.0215;0.001;0.01];
x0=[0.01 10 10 10]; //Startbedingung

function y=ecc82(x)
    k=x(1); kb=x(2); kc=x(3); mu=x(4);
    y=k.*(1+Ug/kb).*((Ug+(Ua+kc)/mu) .^1.5) -Ia;
endfunction

Z=[Ia,Ug]; //Hier bin ich mir unsicher

function y=fct(x,n)
    y=ecc82(x)
endfunction

[a,b]=lsqrsolve(x0,fct,11);
 

und so sieht das in MATLAB aus:
Code:
function F = ecc82_rydel(x)
% Arbeitspunkte der ECC82
Ua=[250,250,250,200,200,200,170,170,170,100,100];
Ug=[-17.5,-11.5,-2.5,-13.5,-4,-1,-7.5,-4.5,-0.5,-6,-0.5];
Ia=1e-3*[0.5,5,29,0.5,14.5,25,3.5,8.5,21.5,1,10];
M=length(Ua);
% Problemvariablen und Roehrenparameter
K=x(1); kb=x(2); kc=x(3); mu=x(4);
    for k = 1:M
        F(k) = Ia(k) - K*(1 + Ug(k)/kb)*(Ug(k) + (Ua(k) + kc)/mu)^(3/2);
    end
end

Ihr würdet mir sehr helfen, danke im voraus.
MfG
Kurt


helmat
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 92
Anmeldedatum: 18.12.11
Wohnort: ---
Version: R2020a
     Beitrag Verfasst am: 03.10.2016, 16:09     Titel:
  Antworten mit Zitat      
Die Meldung bekommt man, wenn an unpassender Stelle komplexe Werte anfallen. Verdächtig in deinem Code ist der Exponent 1.5.
Beispiel:
-->[-2.].^1.5
ans =
- 5.196D-16 - 2.8284271i

HG helmat
_________________

Herzliche Grüße
helmat

p.s.
Hard work beats talent if talent doesn't work hard.
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.