Effacer les filtres
Effacer les filtres

Using while loop to run through equation n times using column matrix of n rows

1 vue (au cours des 30 derniers jours)
I am trying to obtain a column matrix of n rows that has the solution of an equation done n times. This equation has other variables in it that also are column matrices of n rows. Basically, I have an equation that has matrices in it. I am trying to solve the equation a number of times equal to the rows in the column matrices and get a matrix answer of the variable I am solving for, if that makes sense. Here is what I have so far but am unable to obtain the matrix of the variable I am solving for in the equation:
syms beta cp2 lambda2
c1= 0.5176;
c2= 116;
c3= 0.4;
c4= 5;
c5= 21;
c6= 0.0068;
l= (1/(lambda2+0.008*beta))-(0.035/((beta^3)+1));
solve(cp2==c1*(c2*l-c3*beta-c4)*exp(-c5*l)+c6, beta);
lambda_m = [7.943485689; 7.876168014; 7.809981728; 7.744898547; 7.680891121;
...
7.876168014; 7.943485689];
cp_m = [0.3862077656; 0.3764718995; 0.3670605433; 0.3579602882; 0.3491583852;
...
0.3764718995; 0.3862077656];
beta_m=zeros(67,1);
i=1;
while i<=67
cp2=cp_m(i,:)
lambda2=lambda_m(i,:)
R=solve(cp2==c1*(c2*l-c3*beta-c4)*exp(-c5*l)+c6, beta)
%beta_m(i,:)=R
i=i+1
end

Réponse acceptée

Star Strider
Star Strider le 22 Avr 2018

I would not use the Symbolic Math Toolbox for iterative numerical calculations. It is inefficient for that purpose.

I would use fzero and anonymous function implementations of ‘l’ and the expression you want to solve for in the loop (that I call ‘fcn’ here):

c1= 0.5176;
c2= 116;
c3= 0.4;
c4= 5;
c5= 21;
c6= 0.0068;
l = @(beta,lambda2) (1/(lambda2+0.008*beta))-(0.035/((beta^3)+1));                  % Create Anonymous Function
lambda_m = [7.943485689; 7.876168014; 7.809981728; 7.744898547; 7.680891121; 
    ...
    7.876168014; 7.943485689];
cp_m = [0.3862077656; 0.3764718995; 0.3670605433; 0.3579602882; 0.3491583852;
    ...
    0.3764718995; 0.3862077656];
beta_m=zeros(67,1);
i=1;
while i<=67 
    cp2=cp_m(i,:);
    lambda2=lambda_m(i,:); 
    fcn = @(beta) (c1*(c2*l(beta,lambda2)-c3*beta-c4)*exp(-c5*l(beta,lambda2))+c6) - cp2;
    R(i) = fzero(fcn, 1)
    i=i+1
end

Experiment to get the result you want.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by