Automating Changing Partial Derivatives
2 次查看(过去 30 天)
显示 更早的评论
I'm trying to create a program to automate Kline-McClintock Uncertainty analysis'.
My only problem with my current script is in the %% Declaring Variables section. I don't know how I can define a variable, which was symbolic, to equal a number so that I can evaluate the partials. I want to do this in a way that I can put it into a for loop and it will work for any number of variables. My only thought is to edit the script by scanf within itself.
clear all; close all; clc;
%%Declare Stuff
Variables = 'M t L h1 h2 g D rho';
Eq = '((h1-h2)*2*g*D*rho^2*t^2*(pi/4*D^2)^2)/(L*M^2)';
Conversion = 1;
string.Units = '';
string.Eq = ' for f';
% Example = Var Value Var Error % Var Unit
%------------------------------------------------------------------
Variable_Values = [2.95 0.005 ; % M Kg
30.07 0.1 ; % t sec
360E-3 1E-3 ; % L m
29.5E-2 0.5E-2 ; % h1 m
11E-2 0.5E-2 ; % h2 m
9.81 0.002 ; % g m/s^2
8.6E-3 0.3E-3 ; % D m
999 1 ]; % rho kg/m^3
%%Gogo Matlab
index = 0;
string.old = [];
for i = 1:length(Variables)
if ~isspace(Variables(i)) && i ~= length(Variables)
string.new = sprintf('%c',Variables(i));
string.old = strcat(string.old,string.new);
elseif i == length(Variables)
index = index + 1;
string.new = sprintf('%c',Variables(i));
string.old = strcat(string.old,string.new);
Symbolic_Variables(index) = sym(string.old);
string.old = [];
else
index = index + 1;
Symbolic_Variables(index) = sym(string.old);
string.old = [];
end
end
%%Finding Partials
% Display Initial Equation
string.Initial_Eq = sprintf('Initial Equation%s:\n%s\n',string.Eq,char(Eq));
disp(string.Initial_Eq)
% Calculate and Display Partials
for i = 1:length(Symbolic_Variables)
string.Partial = sprintf('Partial wrt %s:', ...
char(Symbolic_Variables(i)));
Partial(i) = diff(Eq,Symbolic_Variables(i));
if Partial(i) ~= 0
disp(string.Partial)
disp(Partial(i))
end
end
%%Declaring Variables
M = Variable_Values(1,1);
t = Variable_Values(2,1);
L = Variable_Values(3,1);
h1 = Variable_Values(4,1);
h2 = Variable_Values(5,1);
g = Variable_Values(6,1);
D = Variable_Values(7,1);
rho = Variable_Values(8,1);
%%Computing Uncertainty
uncertainty = 0;
for i = 1:length(Symbolic_Variables)
uncertainty = (eval(Partial(i))*Variable_Values(i,2))^2 + uncertainty;
end
uncertainty = sqrt(uncertainty)*Conversion;
%%Display Answer
string.Answer = sprintf('The uncertainty is %.4f%s%s',uncertainty,...
string.Units,string.Eq);
disp(string.Answer)
0 个评论
采纳的回答
Walter Roberson
2011-4-12
If you have a symbolic expression and you wish to substitute a particular numeric value for a symbol, use subs(). If you are need a double-precision number as the result, use double() on the symbolic number that results from the subs().
0 个评论
更多回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Number Theory 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!