Springen naar inhoud

MATLAB (M-files)


  • Log in om te kunnen reageren

#1

PieterPan

    PieterPan


  • 0 - 25 berichten
  • 8 berichten
  • Gebruiker

Geplaatst op 05 oktober 2005 - 11:15

Ik moet voor mijn eindwerk in MATLAB een programmaatje schrijven waarbij ik een hele reeks waarden kan invoeren opdat er nadien een oplossing voor het probleem uitkomt.
Het probleem bevat echter een aantal niet lineaire stelsels en dergerlijke, wat niet echt een probleem is, want de solv functie van matlab kan dit wel aan, maat wanneer ik de solve functie gebruik neemt deze geen parameters ovcer die eerder al berekend of zelfs opgegeven zijn.

Bijvoorbeeld:

ohm = 0.5093
R = 478
d = 60


[x,y] = solve ('sin(x)-2*sin(ohm)+sin(y)=0','R*cos(x)-d-R*cos(y)=0')


geeft als oplossing:


x =

atan((2*R*sin(ohm)-1/2/(4*d^2+16*R^2*sin(ohm)^2)*(32*sin(ohm)^3*R^3+8*d^2*sin(ohm)*R+4*(-16*sin(ohm......
atan((2*R*sin(ohm)-1/2/(4*d^2+16*R^2*sin(ohm)^2)*(32*sin(ohm)^3*R^3+8*d^2*sin(ohm)*R-4*(-16*sin(ohm......



y =

atan(1/2/(4*d^2+16*R^2*sin(ohm)^2)*(32*sin(ohm)^3*R^3+8*d^2*sin(ohm)*R+4*(-16*sin(ohm)^4*R^4*...........
atan(1/2/(4*d^2+16*R^2*sin(ohm)^2)*(32*sin(ohm)^3*R^3+8*d^2*sin(ohm)*R-4*(-16*sin(ohm)^4*R^4*d^.........


wanneer ik de waarden voor ohm, R en d rechtstreeks invul in de vergelijkingen krijg ik wel numerieke uitkomsten van de klasse "sym object" en deze zijn gemakkelijk om te zetten naar de klasse "double"


Iemand een idee?

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Chriis

    Chriis


  • >250 berichten
  • 664 berichten
  • Ervaren gebruiker

Geplaatst op 05 oktober 2005 - 11:56

eval(x)
eval(y)

werkt dat?

#3


  • Gast

Geplaatst op 05 oktober 2005 - 13:21

als ik na deze bewerking eval probeer krijg ik dit antwoord:

>> eval(x)
??? Error using ==> atan
Too many input arguments.

Error in ==> sym.eval at 9
s = evalin('caller',map2mat(char(x)));

#4

Chriis

    Chriis


  • >250 berichten
  • 664 berichten
  • Ervaren gebruiker

Geplaatst op 05 oktober 2005 - 13:29

Ja, dat kreeg ik ook. Ik hoopte eigenlijk dat jij dat niet zou krijgen. :shock:

Het komt omdat er een ',' in de atan() staat, waar komt die vandaan?
Hoe vul je de antwoord-vergelijkingen dan wel in?

Maar goed, eval(x) zou de formule x in moeten vullen met de door jou gegeven waarden.

#5

Brinx

    Brinx


  • >1k berichten
  • 1433 berichten
  • Lorentziaan

Geplaatst op 05 oktober 2005 - 14:22

Ik weet niet of dit nuttig kan zijn, maar de atan() functie in matlab neemt slechts een argument (de verhouding y/x) terwijl de atan2() functie er twee neemt (y en x). Misschien is atan2() hier te gebruiken?

#6


  • Gast

Geplaatst op 05 oktober 2005 - 14:32

waar die ',' vandaan komt weet ik absoluut niet! Ik had ze eigenlijk nog niet opgemerkt.

atan2() werkt wel, maar het probleem is dat ik die atan() als uitkomst heb, hoe kan ik ervoor zorgen dat dat een atan2() wordt???

#7

PieterPan

    PieterPan


  • 0 - 25 berichten
  • 8 berichten
  • Gebruiker

Geplaatst op 05 oktober 2005 - 14:37

het werkt dus niet om eerst de tan() te nemen en dan de atan2() !
het probleem hier is dat de uitkomst van de klasse sym object is en hierop kan je geen atan2() toepassen.


>> atan2(x)
??? Function 'atan2' is not defined for values of class 'sym'.

Error in ==> atan2 at 13
 builtin('atan2', varargin{:});


#8

PieterPan

    PieterPan


  • 0 - 25 berichten
  • 8 berichten
  • Gebruiker

Geplaatst op 05 oktober 2005 - 14:50

met een beetje klooien is't gelukt!!!

[x,y]= solve ('sin(x)+sin(y)-2*sin(ohm)=0','(R+r)*cos(x)-da+dv-(R+r)*cos(y)=0')%;

 
psi = tan(y);
fi = tan(x);
psi = eval(psi);
fi = eval(fi);
psi = atan(psi)
fi = atan(fi)


#9

Chriis

    Chriis


  • >250 berichten
  • 664 berichten
  • Ervaren gebruiker

Geplaatst op 05 oktober 2005 - 15:02

:shock: , mooi. Maar het blijft stom dat MATLAB zelf een atan(x,y) geeft, ipv, atan2(x,y).

#10

PieterPan

    PieterPan


  • 0 - 25 berichten
  • 8 berichten
  • Gebruiker

Geplaatst op 05 oktober 2005 - 15:19

hmmm......
niet zo mooi!
had niet gecontroleerd of de uitkomst klopt, wat dus niet zo is!!!

Dit zou het moeten zijn:

>> [x,y] = solve ('sin(x)-2*sin(0.5093)+sin(y)=0','478*cos(x)-60-478*cos(y)=0')
 
x =
 
2.4996589839588790855785334318547
.38589352061544262144995852113503
 
 
 
y =
 
2.7556991329743506170126848621445
.64193366963091415288410995142485



dit geeft het:

[x,y]= solve ('sin(x)+sin(y)-2*sin(ohm)=0','(R+r)*cos(x)-da+dv-(R+r)*cos(y)=0');

 
psi = tan(y);
fi = tan(x);
psi = eval(psi);
fi = eval(fi);
psi = atan(psi)
fi = atan(fi)

psi =

   0.6420
  -0.3860


fi =

   0.3860
  -0.6420



weet niet wat het probleem is.....

#11

PieterPan

    PieterPan


  • 0 - 25 berichten
  • 8 berichten
  • Gebruiker

Geplaatst op 05 oktober 2005 - 15:42

die uitkomsten verschillen blijkbaar net TT met mekaar, dus dat zou logisch kunnen zijn, dus das geen probleem meer!

volgende probleem (volgende vergelijking):

solve ('(a+b)*sin(x)+R*cos(x)=(R+r)*cos(fi)+dv+L')


wanneer ik alle parameters invul, berekent MATLAB zonder moeite x,
nu geeft het de volgende error

??? Error using ==> solve
' (a+b)*sin(x)+R*cos(x)=(R+r)*cos(fi)+dv+L ' is not a valid expression or equation.



hoe los ik dit op???

#12

Chriis

    Chriis


  • >250 berichten
  • 664 berichten
  • Ervaren gebruiker

Geplaatst op 05 oktober 2005 - 15:53

solve ('(a+b)*sin(x)+R*cos(x)=(R+r)*cos(phi)+dv+L') werkt wel, waarom? geen idee. Hij houdt niet van fi.

#13

PieterPan

    PieterPan


  • 0 - 25 berichten
  • 8 berichten
  • Gebruiker

Geplaatst op 05 oktober 2005 - 16:01

hier snap ik niks meer van!!!!
MATLAB blijft verbazen en soms schuilt het onheil in een klein hoekje!!!


alleszins bedankt!
:shock: ;) ;)

#14

PieterPan

    PieterPan


  • 0 - 25 berichten
  • 8 berichten
  • Gebruiker

Geplaatst op 11 oktober 2005 - 10:33

De berekeningen zijn bijna geprogrammeerd. Nu zou ik er een grafische interface (GUI) aan willen koppelen, maar Matlab gebruikt hiervoor een systeem met handles e.d. en ik snap het allemaal niet zo goed.
Kan iemand mij hierbij verderhelpen.
We zouden gegevens moeten ingeven in een tekstbox en dan door een pushbutton de berekeningen moeten laten plaatsvinden en dan de uitkomsten weergeven in ander tekstboxen.

Kan er iemand misschien een klein voorbeeldje maken met een invoerbox, een uitkomstbox en een drukknop om een eenvoudige berekening te maken.
Dan kan ik zien waar ik wat moet aanpassen in de mfile en dan zal het wel lukken denk ik.
De voorbeelden bij de helpfiles zijn allemaal te complex om het te leren.

#15

Friendly Ghost

    Friendly Ghost


  • >100 berichten
  • 222 berichten
  • Ervaren gebruiker

Geplaatst op 11 oktober 2005 - 16:55

Wat betreft matlab is er ook nog vrij veel aan tutorials te vinden op het internet, bijvoorbeeld http://instruct1.cit...b441/GUIdesign/ maar ook op the site van matlab www.mathworks.com
Maar ik denk dat het handiger is dat je zelf gericht op een bepaalde functie gaat zoeken, dan denk ik dat je er wel uit moet komen.
"If you're scared to die, you'd better not be scared to live"





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures