MATLAB (M-files)

Moderators: dirkwb, Xilvo

Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
Berichten: 8

MATLAB (M-files)

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?

Berichten: 664

Re: MATLAB (M-files)

eval(x)

eval(y)

werkt dat?

Re: MATLAB (M-files)

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)));

Berichten: 664

Re: MATLAB (M-files)

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.

Gebruikersavatar
Lorentziaan
Berichten: 1.433

Re: MATLAB (M-files)

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?

Re: MATLAB (M-files)

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???

Berichten: 8

Re: MATLAB (M-files)

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{:});

Berichten: 8

Re: MATLAB (M-files)

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)

Berichten: 664

Re: MATLAB (M-files)

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

Berichten: 8

Re: MATLAB (M-files)

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.....

Berichten: 8

Re: MATLAB (M-files)

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???

Berichten: 664

Re: MATLAB (M-files)

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

Berichten: 8

Re: MATLAB (M-files)

hier snap ik niks meer van!!!!

MATLAB blijft verbazen en soms schuilt het onheil in een klein hoekje!!!

alleszins bedankt!

:shock: ;) ;)

Berichten: 8

Re: MATLAB (M-files)

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.

Gebruikersavatar
Berichten: 222

Re: MATLAB (M-files)

Wat betreft matlab is er ook nog vrij veel aan tutorials te vinden op het internet, bijvoorbeeld http://instruct1.cit.cornell.edu/courses/b...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"

Reageer