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

Schnittstelle Comsol - Matlab - VC++

 

metzger1887
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 27.10.14
Wohnort: ---
Version: R2014a 64bit
     Beitrag Verfasst am: 11.11.2014, 17:16     Titel: Schnittstelle Comsol - Matlab - VC++
  Antworten mit Zitat      
Beim Versuch eine Schnittstelle zwischen Comsol (LiveLink for Matlab) und Visual Studio C++ zu programmieren stoße ich auf folgendes Problem:

Ich habe zum Testen folgendes kleines "Schnittstellenprogramm" in Matlab geschrieben.
Code:

function [model,c,a,f] = schnittstelle

% load modelutil
import com.comsol.model.*
import com.comsol.model.util.*

% load model (evtl in Schleife)
model = mphload ('C:\Users\Documents\Versuch.mph');

% Schleife

for n = 1:3
model.sol('sol1').runAll; % Simulation starten
c = mpheval(model,'c');% Ausgabe der Lösungsmatrix
a = c.d1(1,51);% Wert auslesen
f = mal(a,1); %Wert manipulieren
% x=f(1)
model.param.set('c0',a);% Neuen globalen Parameter setzen
% model.param.set('c0',x);% Neuen globalen Parameter setzen
model.param.get('c0'); % Globalen Parameter anzeigen
end


mal ist ein C++-Programm (über mex eingebunden) das zwei Zahlen multipliziert. Dies soll später dann noch durch ein kompliziertes Berechnungsprogramm ersetzt werden.
Die Schleife läuft soweit einwandfrei, allerdings funktioniert das C++-Programm nicht:
Hier wird mir a, also der eingelesene Wert (soll mit 1 multipliziert werden), immer als 0 ausgegeben und das Ergebnis natürlich dann auch als 0 (1*0=0).
Der ausgelesene Wert besitzt am Anfang aber den Inhalt 1*10^-6
Ich habe im C++-Programm a als Typ Double definiert. Liegt hier der Fehler?

Hier nochmal das C++-Programm

Code:
#include <math.h>
#include <matrix.h>
#include <mex.h>


#include <iostream>


using namespace std;



void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
   double a,b;
   double *mpointer, *npointer, *f;

   /* Eingabe- und Augabeparameter werden überprüft*/
   if (nlhs != 1)
      mexErrMsgTxt ("Nur ein Ausgabeparameter wird erwarte!");
   else if (nrhs != 2)
      mexErrMsgTxt ("Zwei Eingabeparameter werden erwartet!");

   /* Eingabeparameter werden gelesen*/
   mpointer=mxGetPr(prhs[0]);
   npointer=mxGetPr(prhs[1]);
   a = (int) mpointer [0];
   b = (int) npointer [0];


   plhs[0] = mxCreateDoubleMatrix (1,3, mxREAL);
   f = mxGetPr (plhs[0]);
   f[0]=a*b;
   f[1]=a;
   f[2]=b;
}
 



Als absoluter Neuling bin ich leider noch nicht wirklich im Thema und möchte mich für blöde Fragen vorab entschuldigen.
Ich hoffe trotzdem, dass mir jemand weiterhelfen kann.
Private Nachricht senden Benutzer-Profile anzeigen


metzger1887
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 27.10.14
Wohnort: ---
Version: R2014a 64bit
     Beitrag Verfasst am: 13.11.2014, 17:49     Titel:
  Antworten mit Zitat      
Hat keiner eine Idee, was ich falsch mache?
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 - 2025 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.