Matlab:用不同的输入变量求解方程

时间:2014-11-08 15:24:27

标签: matlab symbolic-math

我想要解决的等式是

syms w v;
rho_air = 1.25;
equ = w == 0.5 * rho_air * v^2

问题在于,有时,我想从v解决w,有时从v到w。

我该怎么做?

我只知道这样做(现在不行,我不知道为什么):

syms v;
rho_air = 1.25;
w = 1;
equ = w == 0.5 * rho_air * v^2;

但是我必须改变它来解决v,比如

syms w;
rho_air = 1.25;
v = 1;
equ = w == 0.5 * rho_air * v^2;

这是非常重复的。无论如何更优雅地解决它?

2 个答案:

答案 0 :(得分:1)

这是一种使用函数的方法,其中输入是要求(作为字符串)和rho_air的变量。这是不言自明的。而且我不知道为什么你的上述代码不起作用;你只是错过了解决的电话,你很高兴去了:)。

function [ out ] = SolveFor(Var2Solve,rho_air)

if strcmp(Var2Solve,'v')

    syms Var2Solve
    v = Var2Solve

    w = 1;
    equ = w == 0.5 * rho_air * v^2;
    out = solve(equ,v)

elseif strcmp(Var2Solve,'w')

    syms Var2Solve
    w = Var2Solve

    v = 1;
    equ = w == 0.5 * rho_air * v^2;
    out = solve(equ,w)

end


end

TESTS(在命令窗口中):

SolveSym('v',1.25)

out =

  (2*10^(1/2))/5
 -(2*10^(1/2))/5

SolveSym('w',1.25)

out =

5/8

答案 1 :(得分:1)

在旧的Matlab版本中,您需要将等式定义为字符串;然后你可以申请solve

>> syms w v;
rho_air = 1.25;
>> equ = 'w = 0.5 * rho_air * v^2';

>> solve(equ, w)
ans =
0.5*rho_air*v^2

>> solve(equ, v)
ans =
  (2^(1/2)*w^(1/2))/rho_air^(1/2)
 -(2^(1/2)*w^(1/2))/rho_air^(1/2)