How to extract the coefficient of x inside the exponential?
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Ishan Khatri
le 9 Mai 2020
Commenté : David Goodmanson
le 10 Mai 2020
syms x
a1=10.0548; a2=-4.4425; a3=-3.2730; a4=-2.2430; b1=0.0; b2=0.0029; b3=0.0379; b4=0.3863;
y=a1*exp(-b1*x) + a2*exp(-b2*x) + a3*exp(-b3*x) + a4*exp(-b4*x);
z4 = expand(y4^2);
z4 = vpa(z4,6);
z4 = exp(-0.0758168 x) 10.7127 - exp(-0.0379084 x) 65.8191 - exp(-0.00294242 x) 89.3358 + exp(-0.00588485 x) 19.7354
- exp(-0.386332 x) 45.1049 + exp(-0.772664 x) 5.03086 + exp(-0.0379084 x) exp(-0.00294242 x) 29.0805
+ exp(-0.0379084 x) exp(-0.386332 x) 14.6825 + exp(-0.00294242 x) exp(-0.386332 x) 19.9285 + 101.099
[c, tx] = coeffs(vpa(z2,6))
qc = arrayfun(@char, tx, 'uniform', 0)
fin = cellfun(@(x)regexprep(x, '\<exp', ''), qc, 'UniformOutput', false)
fin1 = cellfun(@(x)regexprep(x, '\<x', ''), fin, 'UniformOutput', false)
fin2 = cellfun(@(x)regexprep(x, '*+', ''), fin1, 'UniformOutput', false)
fin3 = cellfun(@(x)regexprep(x, '\<(', ''), fin2, 'UniformOutput', false)
fin4 = cellfun(@(x)regexprep(x, '\>)', ''), fin3, 'UniformOutput', false)
fin5 = str2double(fin4)
It gives fin4 as
'-0.037908413650000305494813801487908-0.0029424243719999854107527426094748' '-0.037908413650000305494813801487908-0.38633213039999958482439978979528' '-0.037908413650000305494813801487908' '-0.075816827300000610989627602975816' '-0.0029424243719999854107527426094748-0.38633213039999958482439978979528' '-0.0029424243719999854107527426094748' '-0.0058848487439999708215054852189496' '-0.38633213039999958482439978979528' '-0.77266426079999916964879957959056' '1'
It gives fin5 as
NaN NaN -0.0379 -0.0758 NaN -0.0029 -0.0059 -0.3863 -0.7727 1.0000
Is there any better way to get the coefficennt of x inside the exponetial ?
Thank you.
0 commentaires
Réponse acceptée
David Goodmanson
le 9 Mai 2020
Modifié(e) : David Goodmanson
le 9 Mai 2020
Hi Ishan,
Squaring y gives 16 terms involving the product of two exponential functions. Multilying exponentials means adding the two b coefficients in each product, so the task comes down to finding all possible sums of two b coefficients.
b = -[0.0 0.0029 0.0379 .3863];
cof = b+b'
% and if you want just the unique ones,
ucof = unique(cof(:))
ucof =
-0.7726
-0.4242
-0.3892
-0.3863
-0.0758
-0.0408
-0.0379
-0.0058
-0.0029
0
2 commentaires
David Goodmanson
le 10 Mai 2020
Hi Ishan,
here is one way. Start with a variation of the original process:
b = -[0.0 0.0029 0.0379 .3863];
bsum = b'; % create a column vector, one sum
bsum = bsum + b % create a matrix of all pairs of sums
bsum = bsum(:); % create a column vector, two sums
Now you just repeat the process to get column vectors of three sums, etc. and use unique at the end if desired.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Line Plots 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!