Ich habe diese Unbekannten und Gleichungen: u1, u2, ... u10 und eq1, eq2, ... eq10. Ich löse sie derzeit mit vpasolve Normalerweise sind sie es wert zu berechnen, aber manchmal sind ihre Werte so niedrig (< 0.0001), dass ich sie beseitigen möchte, und nachdem vpasolve den Rest löst (etwa 10 Minuten) sollte ich überprüfen, ob es war falsch oder nicht die Unbekannten zu beseitigen.Matlab machen IF zu entscheiden schreiben etwas in einer Funktion
So würde dies bedeuten, so etwas wie:
verif=zeros(10); %false value for removing unknowns
syms if verif(1)=0
write 'u1'
end
... und so weiter für alle 10 Unbekannten. vpasolve
hätte eine ähnliche Art zu entscheiden, ob die Unbekannten und Gleichungen geschrieben werden. Dies ist der Ort, an dem ich überprüfen sollte, ob das Entfernen OK war. Und dies ist der Ort, an dem die < 0,0001 Entscheidung getroffen wird:
if u1<0.0001
verif(1)=1;
Mein Problem ist, dass ich nicht weiß, wie man richtig den ersten Code zu schreiben, und wie es tun leichter für 100 Unbekannten (so etwas wie ein für Schleife).
EDIT 1 Dies ist alles innerhalb einer for-Schleife.
EDIT 2
Ich habe einen Java-Entwickler gesprochen, und er erklärte mir, dass einige Dinge nicht möglich sind (oder zu vermeiden) wegen der Art und Weise Matlab funktioniert.
Die Schlussfolgerung war, dass ich die Gleichungen vpasolve
muss woanders, nicht mit einem if
innerhalb es vorbereiten.
So ist dies, wie es jetzt aussieht, bitte sagen, ob es etwas anderes falsch ist, dass ich nicht (ich bin nur ein Chemiker) sehen:
verif=zeros(10); %false value for removing unknowns
eq=[eq1,eq2...eq10]; %original eq's
eq(2,:)=eq(1,:); %eq's I can modify
for loop
syms u1 u2...u10;
[u1,u2...u10]=vpasolve(eq(2,:),[u1,u2...u10];
%this is where the verification of my assumption should take place
%to note that u1...u4 are not to be judged this way
if verif(5)=1
%the verification I need
if %verification returns that the assumption was wrong-this normally does not happen
eq(2,5)=eq(1,5);
verif(5)=0; %wait a few loops before making that assumption again
run the for loop again
end
end
...
if u5<0,0001
eq(2,5)=(u5==0);
verif(5)=1;
end
...
end for
Und eine Frage über meine andere Fragen, die leiden das gleiche Problem ... sollte ich sie löschen oder einen Link zu hier setzen?