Vinnaren i pepparkakshustävlingen!
2014-03-12, 17:44
  #1
Medlem
Primat91s avatar
Jag har följande ekvationer:

20x + 40y + 20z = N1
4x + 60z = N2
8x + 40a = N3
32x + 8y + 16z + 8a = N4

där N1-4 är kända. Jag vill beräkna x, y, z och a

När jag söker på google (http://www.mathworks.se/help/symboli...html#btrxsqd-1) verkar det som att jag bara kan använda solvefunktionen. Min kod därav är just nu:

Kod:
N1 =input(sprintf('Enter N1: '));
N2 =input(sprintf('Enter N2: '));
N3 =input(sprintf('Enter N3: '));
N4 =input(sprintf('Enter N4: '));


syms x y z a
[xans, yans, zans, aans] = solve(20*x + 40*y + 20*z == N1, 4*x + 60*z == N2,...
    8*x + 40*a == N3, 32*x + 8*y + 16*z + 8*a == N4);

och jag får följande felmeddelanden:

Citat:
??? Error using ==> char
Conversion to char from logical is not possible.

Error in ==> solve>getEqns at 189
vc = char(v);

Error in ==> solve at 67
[eqns,vars] = getEqns(varargin{:});

Error in ==> chao at 8
[xans, yans, zans, aans] = solve(20*x + 40*y + 20*z == N1, 4*x + 60*z == N2,...

Så är det ett syntaxfel? Felaktig användning av funktionen? Har inte använt MATLAB på hur länge som helst så har glömt det mesta.

Och om det inte finns någon inbyggd funktion att använda sig av, någon som kan rekommendera en metod att använda sig av?

Tack på förhand
Citera
2014-03-12, 18:20
  #2
Medlem
Mindstormers avatar
Hej!

Jag testade följande kod och det funkade fint för mig.
Kod:
clear all;
clc;

N1 =input(sprintf('Enter N1: '));
N2 =input(sprintf('Enter N2: '));
N3 =input(sprintf('Enter N3: '));
N4 =input(sprintf('Enter N4: '));

A=[20,40,20,0;4,0,60,0;8,0,0,40;32,8,16,8];
B=[N1;N2;N3;N4];

X=linsolve(A,B);

Testade dock med din kod först och då klagade MATLAB på något licensfel. Hoppas det löser sig för dig nu!
Citera
2014-03-12, 18:25
  #3
Medlem
Primat91s avatar
Tack så mycket, det verkade funka finfint!

Men jag förstår fortfarande inte vad problemet är med mitt program. Följande kod:

Kod:
clear all
clc


N1 =input(sprintf('Enter N1 level: '));
N2 =input(sprintf('Enter N2 level: '));
N3 =input(sprintf('Enter N3 level: '));
N4 =input(sprintf('Enter N4 level: '));

N1 = N1*100;
N1 = N2*100;
N3 = N3*100;
N4 = N4*100;


syms x y z a
[xans, yans, zans, aans] = solve(20*x + 40*y + 20*z == N1, 4*x + 60*z ==... 
    N2, 8*x + 40*a == N3, 32*x + 8*y + 16*z + 8*a == N4);

funkar inte, med precis samma felmeddelanden. För en kompis som kör MATLAB 2012 funkar det dock. Jag använder MATLAB 7.12.0 (R2011a)
Citera
2014-03-12, 18:34
  #4
Medlem
Mindstormers avatar
Citat:
Ursprungligen postat av Primat91
För en kompis som kör MATLAB 2012 funkar det dock. Jag använder MATLAB 7.12.0 (R2011a)
Där tror jag felet ligger, kan det vara så att din version av MATLAB är lite äldre så att solvefunktionen har ändrats mellan din och kompisens MATLAB?

Läste lite här: http://stackoverflow.com/questions/2...lbox-in-r2010b

Edit: såg det först nu men personen i länken ovan verkar även ha samma felmeddelande. Något jag noterade nu.
Citera
2014-03-12, 22:20
  #5
Moderator
Protons avatar
Övriga språk --> Fysik, matematik och teknologi
/Moderator
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback