在for循环中求解具有两个方程和两个变量的系统

时间:2016-03-10 15:01:31

标签: matlab equation symbolic-math equation-solving

我想解决一个有两个方程和两个变量的系统  select * from item where id <> :id and parent_id = :parent_id; Tau(i)是输入数组。

Roh(i)
Tau=[0.91411 0.91433 0.91389 0.91399 0.91511 0.915]

我想为每个Roh=[0.07941 0.07942 0.07952 0.07946 0.07951 0.07947]步骤(for循环)计算R(i)t(i)。 我很乐意帮助解决这些方程式。 enter image description here

i
Tau(i)-((1-R(i))^2*t(i))/(1-R(i)^2*t(i)^2)==0

我尝试过以下脚本但是我很难编写正确的代码来导出数据。我只得到“sym”,这不是一个值。

Roh(i)-R(i)-((1-R(i))^2*R(i)*t(i)^2)/(1-R(i)^2*t(i)^2)==0

2 个答案:

答案 0 :(得分:2)

您的代码存在多个问题。

  • matrix语法与变量一起使用,混合了符号函数。我想在这里你只有变量。与R(i)相同,这创建了一个符号函数,而不是您的方程列表(正如您可能想要的那样)
  • 您使用错误的参数顺序调用了
  • 您使用错误的参数顺序调用eq(i)
  • 将字符串传递给solve已知常量symTau未被替换的字符串,最终在方程中有4个未知数

Roh

答案 1 :(得分:1)

您只需要定义一次函数,然后使用for循环来获取值。

function [R_out,t_out] = glassair(Tau_in, Roh_in)

syms R t Tau Roh
eq1 = Tau-((1-R)^2*t)/(1-R^2*t^2);
eq2 = Roh-R-((1-R)^2*R*t^2)/(1-R^2*t^2);

R_out = zeros(1,6); % Given it will be always 6
t_out = zeros(1,6);

for i=1:6
    Tau = Tau_in(i);
    Roh = Roh_in(i);
    sol = solve( subs( [eq1;eq2] ) );
    R_out(i) = double(sol.R);
    t_out(i) = double(sol.t);
end

end

Matlab非常聪明,为您定义类型。当您求解方程时,它会检测需要哪些变量。零分配用于加速。