Finding a variable in a very complicated equation
8 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Star Strider
2021-4-24
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 个评论
Star Strider
2021-5-2
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Transforms 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!