Jo, du har rätt, integralen existerar. Jag skulle tippa på att matlab symboliska integrator inte kan lösa integralen. Tänker att matlab inte har de starkaste algoritmerna för symboliska beräkningar, matlab är mer för numerisk analys och matriser/vektorer. Men wolfram alpha löste integralen utan problem.
Angående kvoterna så tror jag att matlab skriver decimaltal som kvoter när de är "kring" symboliska variabler.
Du verkar ha rätt på båda. Det var matlab som strula för det gick att lösa via hemsidan och sedan sätta in integralen i matlab igen. Och kvoterna verkar precis som du säger hålla sig kring de symboliska variablerna.
Hur använder jag symboler när jag använder funktionshandtag? Jag har definierat q som en funktion med variabeln t. Anledningen till att jag inte sätter in hela funktions uttrycket är att jag har en forsats för att att göra q komplett.
Q=@(t) q;
Q(0)=123*t....
Matlab verkar inte förstå att t är en variabel. Det fungerar om jag byter uttrycket för q mot "siffervärdena".
Det jag egentligen vill göra är en geometrisk summa där jag hämtar information enligt olika index. Dessa summor ska sedan användas i en funktion som beror på variabeln t. Problemet är att när jag har gjort mina summor m.h.a av en (flera) forsatser så förstår inte matlab att t är en variabel. Är det p.g.a. lokal vs global variabel?
Jag har löst problemet nedan men koden är så svårhanterad när man inte kan summera indexen.
for t=0:0.01:1
F=f=((XX(:,1)*XX(:,1)')/((w0(1)^2-w^2+2*1i*w*w0(1)*rd(1))*my(1)))+((XX(:,2)*XX(:,2)' )/((w0(2)^2-w^2+2*1i*w*w0(3)*rd(3))*my(2)))+((XX(:,3)*XX(:,3)' )/((w0(3)^2-w^2+2*1i*w*w0(3)*rd(3))*my(3)));
Såhär vill jag göra men sista raderna för t fungerar ej.
for n=1:3
f=((XX(:,n)*XX(:,n)')/((w0(n)^2-w^2+2*1i*w*w0(n)*rd(n))*my(n))).';
F=F+f;
end
for m=1:3;
a=exp(-rd(m)*w0(m)*t)*(((XX(:,m)*XX(:,m)')*M)/my(m))*(cos(wd(m)*t)+rd(m)*(w0(m)/wd(m))*sin(wd(m)*t))*(-fp0);
b=exp(-rd(m)*w0(m)*t)*(((XX(:,m)*XX(:,m)')*M)/(my(m)*wd(m)))*sin(wd(m)*t)*(-fp0dot);
A=A+a;
B=B+b;
end
Det blir nog lättare om du gör en separat funktions fil när du ska göra så många beräkningar
Så typ
function [ Q ] = funktionsnamn( t )
beräkning
Q = ?
end
Så du utför alla beräkningar, summerar allt i Q som funktionen returnerar.
Sen behöver du bara skicka in ett värde på t i vanlig ordning. Du kan även ha flera input argument till funktionen om det skulle krävas, t.ex. någon konstant
Hur använder jag symboler när jag använder funktionshandtag? Jag har definierat q som en funktion med variabeln t. Anledningen till att jag inte sätter in hela funktions uttrycket är att jag har en forsats för att att göra q komplett.
Q=@(t) q;
Q(0)=123*t....
Matlab verkar inte förstå att t är en variabel. Det fungerar om jag byter uttrycket för q mot "siffervärdena".
Det jag egentligen vill göra är en geometrisk summa där jag hämtar information enligt olika index. Dessa summor ska sedan användas i en funktion som beror på variabeln t. Problemet är att när jag har gjort mina summor m.h.a av en (flera) forsatser så förstår inte matlab att t är en variabel. Är det p.g.a. lokal vs global variabel?
Jag har löst problemet nedan men koden är så svårhanterad när man inte kan summera indexen.
for t=0:0.01:1
F=f=((XX(:,1)*XX(:,1)')/((w0(1)^2-w^2+2*1i*w*w0(1)*rd(1))*my(1)))+((XX(:,2)*XX(:,2)' )/((w0(2)^2-w^2+2*1i*w*w0(3)*rd(3))*my(2)))+((XX(:,3)*XX(:,3)' )/((w0(3)^2-w^2+2*1i*w*w0(3)*rd(3))*my(3)));
Såhär vill jag göra men sista raderna för t fungerar ej.
for n=1:3
f=((XX(:,n)*XX(:,n)')/((w0(n)^2-w^2+2*1i*w*w0(n)*rd(n))*my(n))).';
F=F+f;
end
for m=1:3;
a=exp(-rd(m)*w0(m)*t)*(((XX(:,m)*XX(:,m)')*M)/my(m))*(cos(wd(m)*t)+rd(m)*(w0(m)/wd(m))*sin(wd(m)*t))*(-fp0);
b=exp(-rd(m)*w0(m)*t)*(((XX(:,m)*XX(:,m)')*M)/(my(m)*wd(m)))*sin(wd(m)*t)*(-fp0dot);
A=A+a;
B=B+b;
end
for t=0:0.01:1
A
B
q=A+B;
Q=[Q,q];
end
>>Thx
Jag föreslår att du gör t symbolisk först och främst. Skriv syms t före du använder t, sen när du vill att t ska evalueras så kan du loopa över s istället och köra subs(uttryck, t, s) så byter den ut alla t i uttrycket mot s och sen evalueras uttrycket. Så du kan köra q=subs(A+B, t, s) mest troligt.
Alternativt kanske du inte behöver göra t symbolisk, du kanske bara behöver köra subs(A+B) i den kod du har redan, jag är osäker och har inte MATLAB installerat för tillfället.
Om jag ska rita funktionen f(x) = x^3/(x^2 - 2*abs(x-2)), kan jag inte sätta en variabel till hela högerled? För det funkade inte då den inte vet vad x är.
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
Swish: 123 536 99 96Bankgiro: 211-4106
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!