Izračun enačbe

O matematiki, številih, množicah in računih...
matson
Prispevkov: 20
Pridružen: 8.8.2014 13:55

Re: Izračun enačbe

Odgovor Napisal/-a matson » 3.8.2016 0:07

Dodal sem še vrednosti za E in končni F0, a mi ne deluje. Gre za to, da se poračunane vrednosti od prej vstavijo v E in nato rezultat vsega skupaj v F0, ki mi ga izpiše v tabeli. Tr in Pr vseskozi nabira iz prvotne matrike. Prav tako mi ni razumljiv princip z (end+1) in to "shranjevanje rezultatov". Kaj lahko naredim, da bo stvar delovala?

Koda: Izberi vse

b1_0=0.1181193; b2_0=0.265728; b3_0=0.154790; b4_0=0.03023; c1_0=0.0236744; c2_0=0.0186984; c3_0=0; c4_0=0.042724; d1_0=0.155488*10^-4; 
d2_0=0.623689*10^-4; BETA_0=0.65392; GAMA_0=0.060167;
 
%clear all
Tr_0=[0.85, 0.90, 0.93, 0.95]
Pr_0=[0.800, 1.000, 1.200, 1.500]
 
%REDUCIRANA FUGATIVNOST ln(f/p)
syms Vr_0 Z0_0 E F0
F0 = []; 
    for j = 1:length(Tr_0)
        B_0 = (b1_0 - b2_0/Tr_0(j) - b3_0/Tr_0(j)^2 - b4_0/Tr_0(j)^3);
        C_0 = (c1_0 - c2_0/Tr_0(j) + c3_0/Tr_0(j)^3);
        D_0 = (d1_0 + d2_0/Tr_0(j));
    for i = 1:length(Pr_0)
            Vr = double(solve(-Pr_0(i)*Vr_0/Tr_0(j) + 1 + B_0/Vr_0 + C_0/Vr_0^2 + D_0/Vr_0^5 + c4_0/(Tr_0(j)^3*Vr_0^2)*(BETA_0 + GAMA_0/Vr_0^2)*exp(-GAMA_0/Vr_0^2), Vr_0));
            Z0 = double(solve(-Z0_0 + 1 + B_0/Vr + C_0/Vr^2 + D_0/Vr^5 + c4_0/(Tr_0(j)^3*Vr^2)*(BETA_0 + (GAMA_0/Vr^2))*exp(-GAMA_0/Vr^2), Z0_0));
            E = double(solve(-E + c4_0/(2*Tr_0(j)^3) * (BETA_0 + 1 - (BETA_0 + 1 + GAMA_0/Vr^2)* exp(-GAMA_0/Vr^2))), E);
        %Izračun F0
        F0(end+1) = double(solve(-Z0 + 1 + B_0/Vr + C_0/Vr^2 + D_0/Vr^5 + c4_0/(Tr_0(j)^3*Vr^2)*(BETA_0 + (GAMA_0/Vr^2))*exp(-GAMA_0/Vr^2), F0));
    end 
end
disp(F0)
Dobim:

Koda: Izberi vse

Error using sym/double
Too many input arguments.

Error in fugativnost (line 40)
            E = double(solve(-E + c4_0/(2*Tr_0(j)^3) * (BETA_0 + 1 -
            (BETA_0 + 1 + GAMA_0/Vr^2)* exp(-GAMA_0/Vr^2))), E);

maxwell
Prispevkov: 96
Pridružen: 16.11.2011 19:10

Re: Izračun enačbe

Odgovor Napisal/-a maxwell » 3.8.2016 10:52

Namesto E daj ime kaj drugega, da ne povoziš simbolične spremenljivke E, ali pa v for zanko dodaj sysms E, da jo vedno znova inicializiraš.

V izrazu ko računaš E imaš narobe oklepaje. V izrazu za računanje F0 ta E nikjer ne nastopa je to prav? In tudi, ko računaš F0 uporabljaš solve, vendar ti v tem izrazu nikjer ne nastopa F0, zato ti vrne napako.

(end+1) ti vektor za eno poveča in podatek shrani na to novo mesto. To ni najboljša praksa, ker spreminjaš velikost vektorja in pri veliko iteracijah koda postane počasna. Podatke lahko shranjuješ v matriko F0(j, i)=... sedaj imaš po stolpcih za različne Tr_0 in po vrsticah za Pr_0.

Koda: Izberi vse

%REDUCIRANA FUGATIVNOST ln(f/p)
F0_data=zeros(length(Tr_0), length(Pr_0));
syms Vr_0 Z0_0 E F0
F0 = []; 
for j = 1:length(Tr_0)
    B_0 = (b1_0 - b2_0/Tr_0(j) - b3_0/Tr_0(j)^2 - b4_0/Tr_0(j)^3);
    C_0 = (c1_0 - c2_0/Tr_0(j) + c3_0/Tr_0(j)^3);
    D_0 = (d1_0 + d2_0/Tr_0(j));
    for i = 1:length(Pr_0)
            Vr = double(solve(-Pr_0(i)*Vr_0/Tr_0(j) + 1 + B_0/Vr_0 + C_0/Vr_0^2 + D_0/Vr_0^5 + c4_0/(Tr_0(j)^3*Vr_0^2)*(BETA_0 + GAMA_0/Vr_0^2)*exp(-GAMA_0/Vr_0^2), Vr_0));
            Z0 = double(solve(-Z0_0 + 1 + B_0/Vr + C_0/Vr^2 + D_0/Vr^5 + c4_0/(Tr_0(j)^3*Vr^2)*(BETA_0 + (GAMA_0/Vr^2))*exp(-GAMA_0/Vr^2), Z0_0));
            E_data = double(solve((-E + c4_0/(2*Tr_0(j)^3) * (BETA_0 + 1 - (BETA_0 + 1 + GAMA_0/Vr^2)* exp(-GAMA_0/Vr^2))), E));
        %Izračun F0
        %F0(end+1) = double(solve(-Z0 + 1 + B_0/Vr + C_0/Vr^2 + D_0/Vr^5 + c4_0/(Tr_0(j)^3*Vr^2)*(BETA_0 + (GAMA_0/Vr^2))*exp(-GAMA_0/Vr^2), F0));
        F0_data(j,i)=-Z0 + 1 + B_0/Vr + C_0/Vr^2 + D_0/Vr^5 + c4_0/(Tr_0(j)^3*Vr^2)*(BETA_0 + (GAMA_0/Vr^2))*exp(-GAMA_0/Vr^2);
    end 
end
F0_data

Uporabniški avatar
shrink
Prispevkov: 14100
Pridružen: 4.9.2004 18:45

Re: Izračun enačbe

Odgovor Napisal/-a shrink » 3.8.2016 13:17

Preveri tudi, kako Matlab obravnava B_0, C_0, D_0 in Vr, ko jih kličeš v zankah, saj gre za polja oz. matriko: najbrž jih je treba klicati kot B_0(j), C_0(j), D_0(j) in Vr(i,j) oz. Vr(j,i). Poglej tudi v dokumentacijo/help, kako se lahko definira polja/matrike in kako se jih kliče v zankah, da jih tvoja različica Matlaba pravilno razume.

Odgovori

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 5 gostov