Finding a variable in a very complicated equation
8 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Nikodem Podlaszewski
il 24 Apr 2021
Commentato: Star Strider
il 2 Mag 2021
There are two equations:
y=P*exp(-alfa*x)*cos(alfa*x)/(2*alfa^3*EI)
alfa=(k/(4*EI))^(1/4)
x, y, P, EI are known, I need to find k using these equations, accuracy of 0,0001 is enough
I think that the only way to find k is to use the trial and error (iteration) method, unfortunately I can't manage to write a good script to calculate that
Thank You for all Your help in advance
0 Commenti
Risposta accettata
Star Strider
il 24 Apr 2021
It would be nice if the constants were supplied. Using random numbers for them —
x = rand;
y = rand;
P = rand;
EI = rand;
alfa = @(k,EI) (k./(4*EI)).^(1/4);
yfcn = @(x,y,P,EI,k) P.*exp(-alfa(k,EI).*x).*cos(alfa(k,EI).*x)./(2*alfa(k,EI).^3.*EI) - y;
[k_est,fv] = fsolve(@(k)yfcn(x,y,P,EI,k), 1)
.
8 Commenti
Star Strider
il 2 Mag 2021
Apparently, there is more to your code than what you posted.
If you are using a for loop, it is relatively straightforward to preallocate ‘k_est’ and ‘fv’ —
x = rand;
y = rand;
P = rand;
EI = rand;
alfa = @(k,EI) (k./(4*EI)).^(1/4);
yfcn = @(x,y,P,EI,k) P.*exp(-alfa(k,EI).*x).*cos(alfa(k,EI).*x)./(2*alfa(k,EI).^3.*EI) - y;
num_iter = 10; % Use The Appropriate Value
k_est = zeros(num_iter,1); % Preallocate Vector
fv = zeros(num_iter,1); % Preallocate Vector
for k1 = 1:num_iter
[k_est(k1),fv(k1)] = fsolve(@(k)yfcn(x,y,P,EI,k), 10);
end
Output = table(k_est,fv)
If you are using a while loop, preallocate the vectors to be greater than what you will likely require, then after the looop finishes (since you will have used a counter to create the ‘k1’ values) re-define —
k_est = k_est(1:k1);
fv = fv(1:k1);
This discards the rest of the vector, saving memory.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Transforms in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!